aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsveneh <sven@ethdev.com>2015-01-14 23:10:33 +0800
committersveneh <sven@ethdev.com>2015-01-14 23:10:33 +0800
commit74faa30af6349a7f87959dcf907092b98af735ec (patch)
treeb6732f74791b40e269cf1c8eb68046b5295c8d35
parent762a93fec8d0782e1a36d6be1760b8ee3174b0f5 (diff)
downloaddexon-tests-74faa30af6349a7f87959dcf907092b98af735ec.tar
dexon-tests-74faa30af6349a7f87959dcf907092b98af735ec.tar.gz
dexon-tests-74faa30af6349a7f87959dcf907092b98af735ec.tar.bz2
dexon-tests-74faa30af6349a7f87959dcf907092b98af735ec.tar.lz
dexon-tests-74faa30af6349a7f87959dcf907092b98af735ec.tar.xz
dexon-tests-74faa30af6349a7f87959dcf907092b98af735ec.tar.zst
dexon-tests-74faa30af6349a7f87959dcf907092b98af735ec.zip
first version of automatic testrunner deployment. Uses ansible, vagrant
and virtualbox
-rw-r--r--.gitignore4
-rw-r--r--ansible/README.md5
-rw-r--r--ansible/Vagrantfile75
-rw-r--r--ansible/host-config.yml8
-rw-r--r--ansible/roles/common/tasks/main.yml27
-rw-r--r--ansible/roles/testrunner/tasks/main.yml6
-rw-r--r--ansible/site.yml3
-rw-r--r--ansible/test-files/docker-go/Dockerfile46
-rw-r--r--ansible/testrunner-config.yml12
9 files changed, 186 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 000000000..cdf615a0f
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+venv/
+*~
+*.swp
+.vagrant/
diff --git a/ansible/README.md b/ansible/README.md
new file mode 100644
index 000000000..558b2e845
--- /dev/null
+++ b/ansible/README.md
@@ -0,0 +1,5 @@
+# Automatic deployment of the random test generator
+
+Testing is done in a Vagrant virtual machine
+
+install vagrant, virtualbox, ansible, then do `vagrant up`. It should provison a basic machine. `vagrant ssh` to verify the machine is working as expected.
diff --git a/ansible/Vagrantfile b/ansible/Vagrantfile
new file mode 100644
index 000000000..ca2a7b288
--- /dev/null
+++ b/ansible/Vagrantfile
@@ -0,0 +1,75 @@
+# -*- mode: ruby -*-
+# vi: set ft=ruby :
+
+# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
+VAGRANTFILE_API_VERSION ||= "2"
+
+Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
+ # All Vagrant configuration is done here. The most common configuration
+ # options are documented and commented below. For a complete reference,
+ # please see the online documentation at vagrantup.com.
+
+ # Every Vagrant virtual environment requires a box to build off of.
+ config.vm.box = "ubuntu/trusty64"
+ config.vm.define "random-test"
+
+ # Disable automatic box update checking. If you disable this, then
+ # boxes will only be checked for updates when the user runs
+ # `vagrant box outdated`. This is not recommended.
+ # config.vm.box_check_update = false
+
+ # Create a forwarded port mapping which allows access to a specific port
+ # within the machine from a port on the host machine. In the example below,
+ # accessing "localhost:8080" will access port 80 on the guest machine.
+ # config.vm.network "forwarded_port", guest: 80, host: 8080
+
+ # Create a private network, which allows host-only access to the machine
+ # using a specific IP.
+ # config.vm.network "private_network", ip: "192.168.33.10"
+
+ # Create a public network, which generally matched to bridged network.
+ # Bridged networks make the machine appear as another physical device on
+ # your network.
+ # config.vm.network "public_network"
+
+ # If true, then any SSH connections made will enable agent forwarding.
+ # Default value: false
+ # config.ssh.forward_agent = true
+
+ # Share an additional folder to the guest VM. The first argument is
+ # the path on the host to the actual folder. The second argument is
+ # the path on the guest to mount the folder. And the optional third
+ # argument is a set of non-required options.
+ # config.vm.synced_folder "../data", "/vagrant_data"
+
+ # Provider-specific configuration so you can fine-tune various
+ # backing providers for Vagrant. These expose provider-specific options.
+ # Example for VirtualBox:
+ #
+ # config.vm.provider "virtualbox" do |vb|
+ # # Don't boot with headless mode
+ # vb.gui = true
+ #
+ # # Use VBoxManage to customize the VM. For example to change memory:
+ # vb.customize ["modifyvm", :id, "--memory", "1024"]
+ # end
+
+
+ # Ubuntu / Virtualbox workaround.
+ # see http://askubuntu.com/questions/238040/how-do-i-fix-name-service-for-vagrant-client
+ config.vm.provider "virtualbox" do |vb|
+ vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
+ end
+
+ #
+ # View the documentation for the provider you're using for more
+ # information on available options.
+
+
+ # Ansible
+ config.vm.provision "ansible" do |ansible|
+ ansible.playbook = "host-config.yml"
+ end
+
+end
+
diff --git a/ansible/host-config.yml b/ansible/host-config.yml
new file mode 100644
index 000000000..edb4cd820
--- /dev/null
+++ b/ansible/host-config.yml
@@ -0,0 +1,8 @@
+---
+- name: Provision the operation system for buildslave
+ # testing
+ hosts: all
+ # live
+ # hosts: poc-8.ethdev.com
+ roles:
+ - common
diff --git a/ansible/roles/common/tasks/main.yml b/ansible/roles/common/tasks/main.yml
new file mode 100644
index 000000000..dcffc7b8b
--- /dev/null
+++ b/ansible/roles/common/tasks/main.yml
@@ -0,0 +1,27 @@
+---
+- name: install docker
+ sudo: true
+ # install script from https://docs.docker.com/installation/ubuntulinux/
+ shell: curl -sSL https://get.docker.com/ubuntu/ | sudo sh
+
+- name: install package dependencies
+ sudo: true
+ apt: name={{ item }}
+ with_items:
+ - python-pip
+
+- name: install python dependencies
+ sudo: true
+ pip: name=docker-py
+
+
+- name: enable docker for standard user
+ sudo: true
+ # todo: how to logout after this command, otherwise won't be effective in this play
+ user: name=vagrant groups=docker append=yes
+
+- name: checkout test repo
+ git:
+ repo: https://github.com/sveneh/tests.git
+ version: develop
+ dest: git
diff --git a/ansible/roles/testrunner/tasks/main.yml b/ansible/roles/testrunner/tasks/main.yml
new file mode 100644
index 000000000..54f7fc5fb
--- /dev/null
+++ b/ansible/roles/testrunner/tasks/main.yml
@@ -0,0 +1,6 @@
+---
+- name: update Go client
+ docker_image:
+ path: git/ansible/test-files/docker-go
+ name: go
+ state: build
diff --git a/ansible/site.yml b/ansible/site.yml
new file mode 100644
index 000000000..cc04daa94
--- /dev/null
+++ b/ansible/site.yml
@@ -0,0 +1,3 @@
+---
+- include: host-config.yml
+- include: testrunner-config.yml
diff --git a/ansible/test-files/docker-go/Dockerfile b/ansible/test-files/docker-go/Dockerfile
new file mode 100644
index 000000000..235ffff44
--- /dev/null
+++ b/ansible/test-files/docker-go/Dockerfile
@@ -0,0 +1,46 @@
+# Adjusted from https://github.com/ethereum/go-ethereum/blob/develop/Dockerfile
+FROM ubuntu:14.04
+
+## Environment setup
+ENV HOME /root
+ENV GOPATH /root/go
+ENV PATH /go/bin:/root/go/bin:/usr/local/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
+
+RUN mkdir -p /root/go
+ENV DEBIAN_FRONTEND noninteractive
+
+## Install base dependencies
+RUN apt-get update && apt-get upgrade -y
+RUN apt-get install -y git mercurial build-essential software-properties-common pkg-config libgmp3-dev libreadline6-dev libpcre3-dev libpcre++-dev
+
+## Build and install Go
+RUN hg clone -u release https://code.google.com/p/go
+RUN cd go && hg update go1.4
+RUN cd go/src && ./all.bash && go version
+
+## Install GUI dependencies
+RUN add-apt-repository ppa:ubuntu-sdk-team/ppa -y
+RUN apt-get update -y
+RUN apt-get install -y qtbase5-private-dev qtdeclarative5-private-dev libqt5opengl5-dev
+
+## Fetch and install serpent-go
+RUN go get -v -d github.com/ethereum/serpent-go
+WORKDIR $GOPATH/src/github.com/ethereum/serpent-go
+# RUN git checkout master
+RUN git submodule update --init
+RUN go install -v
+
+# Fetch and install go-ethereum
+RUN go get -v -d github.com/ethereum/go-ethereum/...
+WORKDIR $GOPATH/src/github.com/ethereum/go-ethereum
+
+RUN git checkout develop
+
+RUN git pull
+RUN ETH_DEPS=$(go list -f '{{.Imports}} {{.TestImports}} {{.XTestImports}}' github.com/ethereum/go-ethereum/... | sed -e 's/\[//g' | sed -e 's/\]//g' | sed -e 's/C //g'); if [ "$ETH_DEPS" ]; then go get $ETH_DEPS; fi
+RUN go install -v ./cmd/ethtest
+
+# Run JSON RPC
+ENTRYPOINT ["ethtest"]
+EXPOSE 8080
+
diff --git a/ansible/testrunner-config.yml b/ansible/testrunner-config.yml
new file mode 100644
index 000000000..99323f82b
--- /dev/null
+++ b/ansible/testrunner-config.yml
@@ -0,0 +1,12 @@
+---
+- name: setting up buildslave configuration
+ # testing
+ hosts: all
+ # live
+ # hosts: poc-8.ethdev.com
+
+ # TODO use the right user for configuring, until credentials set, stay with default vagrant user
+ # remote_user: buildsalve
+
+ roles:
+ - buildslave