diff options
Diffstat (limited to 'scripts/docker')
| -rw-r--r-- | scripts/docker/Dockerfile | 53 | ||||
| -rw-r--r-- | scripts/docker/Makefile | 35 | ||||
| -rw-r--r-- | scripts/docker/README.md | 15 | ||||
| -rw-r--r-- | scripts/docker/TODO | 4 | ||||
| -rw-r--r-- | scripts/docker/couchdb/Dockerfile | 3 | ||||
| -rw-r--r-- | scripts/docker/couchdb/Makefile | 4 | ||||
| -rw-r--r-- | scripts/docker/couchdb/README.rst | 12 | ||||
| -rw-r--r-- | scripts/docker/couchdb/local.ini | 2 | ||||
| -rwxr-xr-x | scripts/docker/files/bin/run-perf.sh | 22 | ||||
| -rwxr-xr-x | scripts/docker/files/bin/run-tox.sh | 17 | ||||
| -rwxr-xr-x | scripts/docker/files/bin/setup-test-env.py | 16 | 
11 files changed, 132 insertions, 51 deletions
| diff --git a/scripts/docker/Dockerfile b/scripts/docker/Dockerfile index 915508ea..21764d84 100644 --- a/scripts/docker/Dockerfile +++ b/scripts/docker/Dockerfile @@ -1,51 +1,32 @@  # start with a fresh debian image -FROM debian - -# expose soledad server port in case we want to run a server container -EXPOSE 2424 - -# install dependencies from debian repos -COPY files/apt/leap.list /etc/apt/sources.list.d/ - -RUN apt-get update -RUN apt-get -y --force-yes install leap-archive-keyring +# we use backports because of libsqlcipher-dev +FROM debian:jessie-backports  RUN apt-get update  RUN apt-get -y install git -RUN apt-get -y install vim -RUN apt-get -y install python-ipdb -# install python deps +# needed to build python twisted module  RUN apt-get -y install libpython2.7-dev -RUN apt-get -y install libffi-dev +# needed to build python cryptography module  RUN apt-get -y install libssl-dev -RUN apt-get -y install libzmq3-dev -RUN apt-get -y install python-pip -RUN apt-get -y install couchdb -RUN apt-get -y install python-srp -RUN apt-get -y install python-scrypt -RUN apt-get -y install leap-keymanager -RUN apt-get -y install python-tz +RUN apt-get -y install libffi-dev +# needed to build pysqlcipher +RUN apt-get -y install libsqlcipher-dev +# needed to support keymanager +RUN apt-get -y install libsqlite3-dev +# install pip and tox +RUN apt-get -y install python-pip  RUN pip install -U pip -RUN pip install psutil - -# install soledad-perf deps -RUN pip install klein -RUN apt-get -y install curl -RUN apt-get -y install httperf +RUN pip install tox  # clone repositories -ENV BASEURL "https://github.com/leapcode" -ENV VARDIR "/var/local" -ENV REPOS "soledad leap_pycommon soledad-perf" -RUN for repo in ${REPOS}; do git clone ${BASEURL}/${repo}.git /var/local/${repo}; done +RUN mkdir -p /builds/leap +RUN git clone -b develop https://0xacab.org/leap/soledad.git /builds/leap/soledad -# copy over files to help setup the environment and run soledad -RUN mkdir -p /usr/local/soledad - -COPY files/build/install-deps-from-repos.sh /usr/local/soledad/ -RUN /usr/local/soledad/install-deps-from-repos.sh +# use tox to install everything needed to run tests +RUN cd /builds/leap/soledad/testing && tox -v -r --notest +RUN mkdir -p /usr/local/soledad  COPY files/bin/ /usr/local/soledad/ diff --git a/scripts/docker/Makefile b/scripts/docker/Makefile index 4fa2e264..7050526a 100644 --- a/scripts/docker/Makefile +++ b/scripts/docker/Makefile @@ -16,7 +16,7 @@  # Some configurations you might override when calling this makefile #  ##################################################################### -IMAGE_NAME           ?= leap/soledad:1.0 +IMAGE_NAME           ?= leapcode/soledad:latest  SOLEDAD_REMOTE       ?= https://0xacab.org/leap/soledad.git  SOLEDAD_BRANCH       ?= develop  SOLEDAD_PRELOAD_NUM  ?= 100 @@ -27,11 +27,14 @@ MEMORY               ?= 512m  # Docker image generation (main make target) #  ############################################## -all: image +all: soledad-image couchdb-image -image: +soledad-image:  	docker build -t $(IMAGE_NAME) . +couchdb-image: +	(cd couchdb/ && make) +  ##################################################  # Run a Soledad Server inside a docker container #  ################################################## @@ -69,23 +72,37 @@ run-client-bootstrap:  	  /usr/local/soledad/run-client-bootstrap.sh  ################################################# -# Run all trial tests inside a docker container # +# Run all tests inside a docker container       #  ################################################# -run-trial: +run-tox: +	name=$$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 5 | head -n 1); \ +	docker run -d --name $${name} leap/couchdb; \  	docker run -t -i \  	  --memory="$(MEMORY)" \  	  --env="SOLEDAD_REMOTE=$(SOLEDAD_REMOTE)" \  	  --env="SOLEDAD_BRANCH=$(SOLEDAD_BRANCH)" \ +	  --env="COUCH_URL=http://$${name}:5984" \ +	  --link $${name} \  	  $(IMAGE_NAME) \ -	  /usr/local/soledad/run-trial.sh +	  /usr/local/soledad/run-tox.sh  ############################################  # Performance tests and graphic generation #  ############################################ -run-perf-test: -	helper/run-test.sh perf +run-perf: +	name=$$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 5 | head -n 1); \ +	docker run -d --name $${name} leap/couchdb; \ +	docker run -t -i \ +	  --memory="$(MEMORY)" \ +	  --env="SOLEDAD_REMOTE=$(SOLEDAD_REMOTE)" \ +	  --env="SOLEDAD_BRANCH=$(SOLEDAD_BRANCH)" \ +	  --env="SOLEDAD_PRELOAD_NUM=$(SOLEDAD_PRELOAD_NUM)" \ +	  --env="COUCH_URL=http://$${name}:5984" \ +	  --link $${name} \ +	  $(IMAGE_NAME) \ +	  /usr/local/soledad/run-perf.sh  run-client-perf:  	@if [ -z "$(CONTAINER_ID_FILE)" ]; then \ @@ -123,7 +140,7 @@ cp-perf-result:  # Other helper targets #  ######################## -run-shell: image +run-shell: soledad-image  	docker run -t -i \  	  --memory="$(MEMORY)" \  	  $(IMAGE_NAME) \ diff --git a/scripts/docker/README.md b/scripts/docker/README.md index c4d7ac94..97b39f87 100644 --- a/scripts/docker/README.md +++ b/scripts/docker/README.md @@ -11,7 +11,20 @@ Check the `Dockerfile` for the steps for creating the docker image.  Check the `Makefile` for the rules for running containers. -Check the `helper/` directory for scripts that help running tests. + +Installation +------------ + +1. Install docker for your system: https://docs.docker.com/ +2. Build images by running `make` +3. Execute `make run-tox` and `make run-perf` to run tox tests and perf tests, +   respectivelly. +4. You may want to pass some variables to the `make` command to control +   parameters of execution, for example: + +      make run-perf SOLEDAD_PRELOAD_NUM=500 + +   See more variables below.  Environment variables for docker containers diff --git a/scripts/docker/TODO b/scripts/docker/TODO index 5185d754..90597637 100644 --- a/scripts/docker/TODO +++ b/scripts/docker/TODO @@ -1 +1,5 @@  - limit resources of containers (mem and cpu) +- allow running couchdb on another container +- use a config file to get defaults for running tests +- use the /builds directory as base of git repo +- save the test state to a directory to make it reproducible diff --git a/scripts/docker/couchdb/Dockerfile b/scripts/docker/couchdb/Dockerfile new file mode 100644 index 00000000..03448da5 --- /dev/null +++ b/scripts/docker/couchdb/Dockerfile @@ -0,0 +1,3 @@ +FROM couchdb:latest + +COPY local.ini /usr/local/etc/couchdb/ diff --git a/scripts/docker/couchdb/Makefile b/scripts/docker/couchdb/Makefile new file mode 100644 index 00000000..cf3ac966 --- /dev/null +++ b/scripts/docker/couchdb/Makefile @@ -0,0 +1,4 @@ +IMAGE_NAME ?= leap/couchdb + +image: +	docker build -t $(IMAGE_NAME) . diff --git a/scripts/docker/couchdb/README.rst b/scripts/docker/couchdb/README.rst new file mode 100644 index 00000000..31a791a8 --- /dev/null +++ b/scripts/docker/couchdb/README.rst @@ -0,0 +1,12 @@ +Couchdb Docker image +==================== + +This directory contains rules to build a custom couchdb docker image to be +provided as backend to soledad server. + +Type `make` to build the image. + +Differences between this image and the official one: + +  - add the "nodelay" socket option on the httpd section of the config file +    (see: https://leap.se/code/issues/8264). diff --git a/scripts/docker/couchdb/local.ini b/scripts/docker/couchdb/local.ini new file mode 100644 index 00000000..3650e0ed --- /dev/null +++ b/scripts/docker/couchdb/local.ini @@ -0,0 +1,2 @@ +[httpd] +socket_options = [{recbuf, 262144}, {sndbuf, 262144}, {nodelay, true}] diff --git a/scripts/docker/files/bin/run-perf.sh b/scripts/docker/files/bin/run-perf.sh new file mode 100755 index 00000000..72060230 --- /dev/null +++ b/scripts/docker/files/bin/run-perf.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +REPO=/builds/leap/soledad/testing +COUCH_URL="${COUCH_URL:-http://127.0.0.1:5984}" +SOLEDAD_PRELOAD_NUM="${SOLEDAD_PRELOAD_NUM:-100}" + +if [ ! -z "${SOLEDAD_REMOTE}" ]; then +  git -C ${REPO} remote set-url origin ${SOLEDAD_REMOTE} +  git -C ${REPO} fetch origin +fi + +if [ ! -z "${SOLEDAD_BRANCH}" ]; then +  git -C ${REPO} checkout ${SOLEDAD_BRANCH} +fi + +cd ${REPO} + +tox perf -- \ +	--durations 0 \ +	--couch-url ${COUCH_URL} \ +	--twisted \ +	--num-docs ${SOLEDAD_PRELOAD_NUM} diff --git a/scripts/docker/files/bin/run-tox.sh b/scripts/docker/files/bin/run-tox.sh new file mode 100755 index 00000000..74fde182 --- /dev/null +++ b/scripts/docker/files/bin/run-tox.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +REPO=/builds/leap/soledad/testing +COUCH_URL="${COUCH_URL:-http://127.0.0.1:5984}" + +if [ ! -z "${SOLEDAD_REMOTE}" ]; then +  git -C ${REPO} remote set-url origin ${SOLEDAD_REMOTE} +  git -C ${REPO} fetch origin +fi + +if [ ! -z "${SOLEDAD_BRANCH}" ]; then +  git -C ${REPO} checkout ${SOLEDAD_BRANCH} +fi + +cd ${REPO} + +tox -- --couch-url ${COUCH_URL} diff --git a/scripts/docker/files/bin/setup-test-env.py b/scripts/docker/files/bin/setup-test-env.py index 0f3ea6f4..4868fd56 100755 --- a/scripts/docker/files/bin/setup-test-env.py +++ b/scripts/docker/files/bin/setup-test-env.py @@ -194,12 +194,12 @@ def user_db_create(args):      url = 'http://localhost:%d/user-%s' % (args.port, args.uuid)      try:          CouchDatabase.open_database( -            url=url, create=False, replica_uid=None, ensure_ddocs=True) +            url=url, create=False, replica_uid=None)          print '[*] error: database "user-%s" already exists' % args.uuid          exit(1)      except DatabaseDoesNotExist:          CouchDatabase.open_database( -            url=url, create=True, replica_uid=None, ensure_ddocs=True) +            url=url, create=True, replica_uid=None)          print '[+] database created: user-%s' % args.uuid @@ -372,7 +372,10 @@ CERT_CONFIG_FILE = os.path.join(  def cert_create(args):      private_key = os.path.join(args.basedir, args.private_key)      cert_key = os.path.join(args.basedir, args.cert_key) -    os.mkdir(args.basedir) +    try: +        os.mkdir(args.basedir) +    except OSError: +        pass      call([          'openssl',          'req', @@ -389,8 +392,11 @@ def cert_create(args):  def cert_delete(args):      private_key = os.path.join(args.basedir, args.private_key)      cert_key = os.path.join(args.basedir, args.cert_key) -    os.unlink(private_key) -    os.unlink(cert_key) +    try: +        os.unlink(private_key) +        os.unlink(cert_key) +    except OSError: +        pass  # | 
