Skip to content

Commit

Permalink
Merge pull request #48 from sveneh/develop
Browse files Browse the repository at this point in the history
Testrunner deployment
  • Loading branch information
CJentzsch committed Jan 16, 2015
2 parents 44a12cd + 6bb10cc commit df33568
Show file tree
Hide file tree
Showing 11 changed files with 288 additions and 0 deletions.
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
venv/
*~
*.swp
.vagrant/
5 changes: 5 additions & 0 deletions ansible/README.md
Original file line number Diff line number Diff line change
@@ -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. `vagrant terminate` to reset machine to clean state.
78 changes: 78 additions & 0 deletions ansible/Vagrantfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
# -*- 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


config.vm.provider "virtualbox" do |vb|
# Ubuntu / Virtualbox workaround.
# see http://askubuntu.com/questions/238040/how-do-i-fix-name-service-for-vagrant-client
vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]

# cpp client needs a lot of RAM to build
vb.customize ["modifyvm", :id, "--memory", "2048"]
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 = "site.yml"
end

end

8 changes: 8 additions & 0 deletions ansible/host-config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
- name: Provision the operation system for tests
# testing
hosts: all
# live
# hosts: TDB
roles:
- common
28 changes: 28 additions & 0 deletions ansible/roles/common/tasks/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
---
- 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
- htop

- 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
16 changes: 16 additions & 0 deletions ansible/roles/testrunner/tasks/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
---
- name: update C++ client
docker_image:
path: git/ansible/test-files/docker-cpp
name: cpp
state: build

- name: update Go client
docker_image:
path: git/ansible/test-files/docker-go
name: go
state: build

- name: Run infinite tests (press ^C to stop)
sudo: true
shell: git/ansible/test-files/testrunner.sh
3 changes: 3 additions & 0 deletions ansible/site.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
---
- include: host-config.yml
- include: testrunner-config.yml
32 changes: 32 additions & 0 deletions ansible/test-files/docker-cpp/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# adjusted from https://github.com/ethereum/cpp-ethereum/blob/develop/docker/Dockerfile
FROM ubuntu:14.04

ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update
RUN apt-get upgrade -y

# Ethereum dependencies
RUN apt-get install -qy build-essential g++-4.8 git cmake libboost-all-dev libcurl4-openssl-dev wget
RUN apt-get install -qy automake unzip libgmp-dev libtool libleveldb-dev yasm libminiupnpc-dev libreadline-dev scons
RUN apt-get install -qy libjsoncpp-dev libargtable2-dev

# NCurses based GUI (not optional though for a succesful compilation, see https://github.com/ethereum/cpp-ethereum/issues/452 )
RUN apt-get install -qy libncurses5-dev

# Qt-based GUI
# RUN apt-get install -qy qtbase5-dev qt5-default qtdeclarative5-dev libqt5webkit5-dev

# Ethereum PPA
RUN apt-get install -qy software-properties-common
RUN add-apt-repository ppa:ethereum/ethereum
RUN apt-get update
RUN apt-get install -qy libcryptopp-dev libjson-rpc-cpp-dev

# Build Ethereum (HEADLESS)
RUN git clone --depth=1 --branch develop https://github.com/ethereum/cpp-ethereum
RUN mkdir -p cpp-ethereum/build
RUN cd cpp-ethereum/build && cmake .. -DCMAKE_BUILD_TYPE=Release -DHEADLESS=1 && make -j $(cat /proc/cpuinfo | grep processor | wc -l) && make install
RUN ldconfig

ENTRYPOINT ["/cpp-ethereum/build/test/createRandomTest"]

46 changes: 46 additions & 0 deletions ansible/test-files/docker-go/Dockerfile
Original file line number Diff line number Diff line change
@@ -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 && ./make.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

56 changes: 56 additions & 0 deletions ansible/test-files/testrunner.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
#!/bin/bash

# create random virtual machine test
#cd ~/software/Ethereum/pyethereum (python has local dependencies so only works from within the directory)
while [ 1 ]
do
TEST="$(docker run --rm cpp)"
# echo "$TEST"

# test pyethereum

#OUTPUT_PYTHON="$(python ./tests/test_vm.py "$TEST")"
#RESULT_PYTHON=$?

# test go
OUTPUT_GO="$(docker run --rm go "$TEST")"
RESULT_GO=$?

# test cpp-jit
#OUTPUT_CPPJIT="$(~/software/Ethereum/cpp-ethereum/build/test/checkRandomTest "$TEST")"
#RESULT_CPPJIT=$?

# go fails
if [ "$RESULT_GO" -ne 0 ]; then
echo Failed:
echo Output_GO:
echo $OUTPUT_GO
echo Test:
echo "$TEST"
echo "$TEST" > FailedTest.json
mv FailedTest.json $(date -d "today" +"%Y%m%d%H%M")GO.json # replace with scp to central server
fi

# python fails
#if [ "$RESULT_PYTHON" -ne 0 ]; then
# echo Failed:
# echo Output_PYTHON:
# echo $OUTPUT_PYTHON
# echo Test:
# echo "$TEST"
# echo "$TEST" > FailedTest.json
# mv FailedTest.json $(date -d "today" +"%Y%m%d%H%M")PYTHON.json
#fi

# cppjit fails
#if [ "$RESULT_CPPJIT" -ne 0 ]; then
# echo Failed:
# echo Output_CPPJIT:
# echo $OUTPUT_CPPJIT
# echo Test:
# echo "$TEST"
# echo "$TEST" > FailedTest.json
# mv FailedTest.json $(date -d "today" +"%Y%m%d%H%M")CPPJIT.json
#fi
done

12 changes: 12 additions & 0 deletions ansible/testrunner-config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
- name: preparing and running tests
# testing
hosts: all
# live
# hosts: TBD

# TODO use the right user for configuring, until credentials set, stay with default vagrant user
# remote_user: ubuntu

roles:
- testrunner

0 comments on commit df33568

Please sign in to comment.