diff options
| -rw-r--r-- | scripts/docker/Dockerfile | 41 | ||||
| -rw-r--r-- | scripts/docker/Makefile | 18 | ||||
| -rw-r--r-- | scripts/docker/files/apt/leap.list (renamed from scripts/docker/files/leap.list) | 0 | ||||
| -rw-r--r-- | scripts/docker/files/bin/client_side_db.py (renamed from scripts/docker/files/client_side_db.py) | 0 | ||||
| -rw-r--r-- | scripts/docker/files/bin/conf/cert_default.conf (renamed from scripts/docker/files/conf/cert_default.conf) | 0 | ||||
| -rw-r--r-- | scripts/docker/files/bin/conf/couchdb_default.ini (renamed from scripts/docker/files/conf/couchdb_default.ini) | 0 | ||||
| -rw-r--r-- | scripts/docker/files/bin/conf/soledad-server_default.conf (renamed from scripts/docker/files/conf/soledad-server_default.conf) | 0 | ||||
| -rwxr-xr-x | scripts/docker/files/bin/run-client-bootstrap.sh (renamed from scripts/docker/files/start-client-test.sh) | 2 | ||||
| -rwxr-xr-x | scripts/docker/files/bin/run-client-perf.sh (renamed from scripts/docker/files/run-perf-test.sh) | 10 | ||||
| -rwxr-xr-x | scripts/docker/files/bin/run-server.sh (renamed from scripts/docker/files/start-server.sh) | 7 | ||||
| -rwxr-xr-x | scripts/docker/files/bin/run-trial.sh (renamed from scripts/docker/files/start-trial-test.sh) | 2 | ||||
| -rwxr-xr-x | scripts/docker/files/bin/setup-test-env.py (renamed from scripts/docker/files/test-env.py) | 0 | ||||
| -rw-r--r-- | scripts/docker/files/bin/util.py (renamed from scripts/docker/files/util.py) | 0 | ||||
| -rw-r--r-- | scripts/docker/files/bin/util.sh | 12 | ||||
| -rwxr-xr-x | scripts/docker/files/build/install-deps-from-repos.sh | 30 | ||||
| -rwxr-xr-x | scripts/docker/files/setup-env.sh | 55 | ||||
| -rwxr-xr-x | scripts/docker/helper/run-test.sh | 8 | ||||
| -rwxr-xr-x | scripts/docker/helper/run-until-error.sh | 12 | 
18 files changed, 102 insertions, 95 deletions
| diff --git a/scripts/docker/Dockerfile b/scripts/docker/Dockerfile index 36180633..915508ea 100644 --- a/scripts/docker/Dockerfile +++ b/scripts/docker/Dockerfile @@ -5,13 +5,18 @@ FROM debian  EXPOSE 2424  # install dependencies from debian repos -COPY files/leap.list /etc/apt/sources.list.d/ +COPY files/apt/leap.list /etc/apt/sources.list.d/  RUN apt-get update  RUN apt-get -y --force-yes install leap-archive-keyring  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  RUN apt-get -y install libpython2.7-dev  RUN apt-get -y install libffi-dev  RUN apt-get -y install libssl-dev @@ -23,30 +28,24 @@ RUN apt-get -y install python-scrypt  RUN apt-get -y install leap-keymanager  RUN apt-get -y install python-tz -# soledad-perf deps +RUN pip install -U pip +RUN pip install psutil + +# install soledad-perf deps  RUN pip install klein -RUN apt-get -y install gnuplot  RUN apt-get -y install curl  RUN apt-get -y install httperf -# debugging deps -RUN apt-get -y install vim -RUN apt-get -y install python-ipdb +# 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  # copy over files to help setup the environment and run soledad  RUN mkdir -p /usr/local/soledad -RUN mkdir -p /usr/local/soledad/conf - -# setup the enviroment for running soledad client and server -COPY files/setup-env.sh /usr/local/soledad/ -RUN /usr/local/soledad/setup-env.sh - -# copy runtime files for running server, client, tests, etc on a container -COPY files/client_side_db.py /usr/local/soledad/ -COPY files/start-client-test.sh /usr/local/soledad/ -COPY files/run-perf-test.sh /usr/local/soledad/ -COPY files/start-server.sh /usr/local/soledad/ -COPY files/start-trial-test.sh /usr/local/soledad/ -COPY files/test-env.py /usr/local/soledad/ -COPY files/util.py /usr/local/soledad/ -COPY files/conf/* /usr/local/soledad/conf/ + +COPY files/build/install-deps-from-repos.sh /usr/local/soledad/ +RUN /usr/local/soledad/install-deps-from-repos.sh + +COPY files/bin/ /usr/local/soledad/ diff --git a/scripts/docker/Makefile b/scripts/docker/Makefile index 080fd16c..9dbe9062 100644 --- a/scripts/docker/Makefile +++ b/scripts/docker/Makefile @@ -10,7 +10,7 @@  # Example usage:  #  #   make run-server CONTAINER_ID_FILE=/tmp/container-id.txt -#   make run-client-test CONTAINER_ID_FILE=/tmp/container-id.txt +#   make run-client-perf CONTAINER_ID_FILE=/tmp/container-id.txt  #####################################################################  # Some configurations you might override when calling this makefile # @@ -50,9 +50,9 @@ run-server:  	  --cidfile=$(CONTAINER_ID_FILE) \  	  --detach \  	  $(IMAGE_NAME) \ -	  /usr/local/soledad/start-server.sh +	  /usr/local/soledad/run-server.sh # --drop-to-shell -run-client-test: +run-client-bootstrap:  	@if [ -z "$(CONTAINER_ID_FILE)" ]; then \  	  echo "Error: you have to pass a value to CONTAINER_ID_FILE."; \  	  exit 2; \ @@ -65,28 +65,28 @@ run-client-test:  	  --env="SOLEDAD_BRANCH=$(SOLEDAD_BRANCH)" \  	  --env="SOLEDAD_SERVER_URL=http://$${server_ip}:2424" \  	  $(IMAGE_NAME) \ -	  /usr/local/soledad/start-client-test.sh +	  /usr/local/soledad/run-client-bootstrap.sh  #################################################  # Run all trial tests inside a docker container #  ################################################# -run-trial-test: +run-trial:  	docker run -t -i \  	  --memory="$(MEMORY)" \  	  --env="SOLEDAD_REMOTE=$(SOLEDAD_REMOTE)" \  	  --env="SOLEDAD_BRANCH=$(SOLEDAD_BRANCH)" \  	  $(IMAGE_NAME) \ -	  /usr/local/soledad/start-trial-test.sh +	  /usr/local/soledad/run-trial.sh  ############################################  # Performance tests and graphic generation #  ############################################ -run-perf: +run-perf-test:  	helper/run-test.sh perf -run-perf-test: +run-client-perf:  	@if [ -z "$(CONTAINER_ID_FILE)" ]; then \  	  echo "Error: you have to pass a value to CONTAINER_ID_FILE."; \  	  exit 2; \ @@ -105,7 +105,7 @@ run-perf-test:  	  --env="SOLEDAD_STATS=1" \  	  --env="SOLEDAD_SERVER_URL=http://$${server_ip}:2424" \  	  $(IMAGE_NAME) \ -	  /usr/local/soledad/run-perf-test.sh +	  /usr/local/soledad/run-client-perf.sh # --drop-to-shell  cp-perf-result:  	@if [ -z "$(CONTAINER_ID_FILE)" ]; then \ diff --git a/scripts/docker/files/leap.list b/scripts/docker/files/apt/leap.list index 7eb474d8..7eb474d8 100644 --- a/scripts/docker/files/leap.list +++ b/scripts/docker/files/apt/leap.list diff --git a/scripts/docker/files/client_side_db.py b/scripts/docker/files/bin/client_side_db.py index 4be33d13..4be33d13 100644 --- a/scripts/docker/files/client_side_db.py +++ b/scripts/docker/files/bin/client_side_db.py diff --git a/scripts/docker/files/conf/cert_default.conf b/scripts/docker/files/bin/conf/cert_default.conf index 8043cea3..8043cea3 100644 --- a/scripts/docker/files/conf/cert_default.conf +++ b/scripts/docker/files/bin/conf/cert_default.conf diff --git a/scripts/docker/files/conf/couchdb_default.ini b/scripts/docker/files/bin/conf/couchdb_default.ini index 5ab72d7b..5ab72d7b 100644 --- a/scripts/docker/files/conf/couchdb_default.ini +++ b/scripts/docker/files/bin/conf/couchdb_default.ini diff --git a/scripts/docker/files/conf/soledad-server_default.conf b/scripts/docker/files/bin/conf/soledad-server_default.conf index 5e286374..5e286374 100644 --- a/scripts/docker/files/conf/soledad-server_default.conf +++ b/scripts/docker/files/bin/conf/soledad-server_default.conf diff --git a/scripts/docker/files/start-client-test.sh b/scripts/docker/files/bin/run-client-bootstrap.sh index 9dec3371..fbbb42e8 100755 --- a/scripts/docker/files/start-client-test.sh +++ b/scripts/docker/files/bin/run-client-bootstrap.sh @@ -5,7 +5,7 @@  # This script is meant to be copied to the docker container and run upon  # container start. -CMD="/usr/local/soledad/test-env.py" +CMD="/usr/local/soledad/setup-test-env.py"  REPO="/var/local/soledad"  if [ ! -z "${SOLEDAD_REMOTE}" ]; then diff --git a/scripts/docker/files/run-perf-test.sh b/scripts/docker/files/bin/run-client-perf.sh index ebd54d23..01b27b98 100755 --- a/scripts/docker/files/run-perf-test.sh +++ b/scripts/docker/files/bin/run-client-perf.sh @@ -23,7 +23,7 @@  # This script is meant to be copied to the docker container and run upon  # container start. -CMD="/usr/local/soledad/test-env.py" +CMD="/usr/local/soledad/setup-test-env.py"  REPO="/var/local/soledad"  TIMEOUT=20 @@ -74,6 +74,11 @@ auth_token = an-auth-token  stats_file = ./out/stats.json  EOF +if [ "${1}" = "--drop-to-shell" ]; then +  /bin/bash +  exit 0 +fi +  #-----------------------------------------------------------------------------  # start the local server and wait for it to come up  #----------------------------------------------------------------------------- @@ -109,7 +114,7 @@ fi  # create docs and run test  #----------------------------------------------------------------------------- -#set -e +set -e  # create documents in client  make trigger-create-docs @@ -121,4 +126,3 @@ sleep 5  # wait a bit for some data points  # run a sync and generate a graph  make trigger-sync  make trigger-stop -make graph-image diff --git a/scripts/docker/files/start-server.sh b/scripts/docker/files/bin/run-server.sh index 0980d352..feedee7e 100755 --- a/scripts/docker/files/start-server.sh +++ b/scripts/docker/files/bin/run-server.sh @@ -18,7 +18,7 @@  # This script is meant to be copied to the docker container and run upon  # container start. -CMD="/usr/local/soledad/test-env.py" +CMD="/usr/local/soledad/setup-test-env.py"  #---------------------------------------------------------------------------  # eventually checkout a specific branch from a specific remote @@ -80,5 +80,10 @@ fi  # actually run the server  #--------------------------------------------------------------------------- +if [ "${1}" = "--drop-to-shell" ]; then +  /bin/bash +  exit 0 +fi +  echo "Starting soledad server..."  ${CMD} soledad-server start --no-daemonize diff --git a/scripts/docker/files/start-trial-test.sh b/scripts/docker/files/bin/run-trial.sh index ad139288..f38f3124 100755 --- a/scripts/docker/files/start-trial-test.sh +++ b/scripts/docker/files/bin/run-trial.sh @@ -5,7 +5,7 @@  # This script is meant to be copied to the docker container and run upon  # container start. -CMD="/usr/local/soledad/test-env.py" +CMD="/usr/local/soledad/setup-test-env.py"  REPO="/var/local/soledad"  if [ ! -z "${SOLEDAD_REMOTE}" ]; then diff --git a/scripts/docker/files/test-env.py b/scripts/docker/files/bin/setup-test-env.py index 0569b65d..0569b65d 100755 --- a/scripts/docker/files/test-env.py +++ b/scripts/docker/files/bin/setup-test-env.py diff --git a/scripts/docker/files/util.py b/scripts/docker/files/bin/util.py index e7e2ef9a..e7e2ef9a 100644 --- a/scripts/docker/files/util.py +++ b/scripts/docker/files/bin/util.py diff --git a/scripts/docker/files/bin/util.sh b/scripts/docker/files/bin/util.sh new file mode 100644 index 00000000..77287d0d --- /dev/null +++ b/scripts/docker/files/bin/util.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +configure_soledad_repos() { +  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 +} diff --git a/scripts/docker/files/build/install-deps-from-repos.sh b/scripts/docker/files/build/install-deps-from-repos.sh new file mode 100755 index 00000000..46530c86 --- /dev/null +++ b/scripts/docker/files/build/install-deps-from-repos.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +# Install dependencies needed to run client and server in a test environment. +# +# In details, this script does the following: +# +#   - install dependencies for packages in /var/local from their requirements +#     files in each of the repositories, using python wheels when possible. +# +#   - install the python packages in development mode +# +# This script is meant to be copied to the docker container during container +# build and run after system dependencies have been installed. + +BASEDIR="/var/local" + +# install dependencies and packages +install_script="pkg/pip_install_requirements.sh" +opts="--use-leap-wheels" +pkgs="leap_pycommon soledad/common soledad/client soledad/server" + +for pkg in ${pkgs}; do +  pkgdir=${BASEDIR}/${pkg} +  testing="" +  if [ -f ${pkgdir}/pkg/requirements-testing.pip ]; then +    testing="--testing" +  fi +  (cd ${pkgdir} && ${install_script} ${testing} ${opts}) +  (cd ${pkgdir} && python setup.py develop) +done diff --git a/scripts/docker/files/setup-env.sh b/scripts/docker/files/setup-env.sh deleted file mode 100755 index d5aeab7d..00000000 --- a/scripts/docker/files/setup-env.sh +++ /dev/null @@ -1,55 +0,0 @@ -#!/bin/bash - -# Clone soledad repository and install soledad dependencies needed to run -# client and server in a test environment. -# -# In details, this script does the following: -# -#   - clone a series of python package repositories into /var/local/soledad. -#   - install dependencies for those packages from the requirements files in -#     each of the repositories, using python wheels when possible. -#   - install the python packages in development mode -# -# The cloned git repositories might have a remote configured and a branch -# checked out on runtime, before a server, client or test instance is actually -# run. Check the other scripts in this directory. -# -# This script is meant to be copied to the docker container and run after -# system dependencies have been installed. - -BASEDIR="/var/local" -BASEURL="https://github.com/leapcode" - -mkdir -p ${BASEDIR} - -# clone repositories -repos="soledad leap_pycommon soledad-perf" - -for repo in ${repos}; do -  repodir=${BASEDIR}/${repo} -  if [ ! -d ${repodir} ]; then -    git clone ${BASEURL}/${repo} ${repodir} -    git -C ${repodir} fetch origin -  fi -done - -# use latest pip because the version available in debian jessie doesn't -# support wheels -pip install -U pip - -pip install psutil - -# install dependencies and packages -install_script="pkg/pip_install_requirements.sh" -opts="--use-leap-wheels" -pkgs="leap_pycommon soledad/common soledad/client soledad/server" - -for pkg in ${pkgs}; do -  pkgdir=${BASEDIR}/${pkg} -  testing="" -  if [ -f ${pkgdir}/pkg/requirements-testing.pip ]; then -    testing="--testing" -  fi -  (cd ${pkgdir} && ${install_script} ${testing} ${opts}) -  (cd ${pkgdir} && python setup.py develop) -done diff --git a/scripts/docker/helper/run-test.sh b/scripts/docker/helper/run-test.sh index 1b0e3db7..c3bdd00c 100755 --- a/scripts/docker/helper/run-test.sh +++ b/scripts/docker/helper/run-test.sh @@ -16,14 +16,14 @@ TIMEOUT=20  # parse command  if [ ${#} -ne 1 ]; then -  echo "Usage: ${0} perf|connect" +  echo "Usage: ${0} perf|bootstrap"    exit 1  fi  test=${1} -if [ "${1}" != "perf" -a "${1}" != "perf" ]; then -  echo "Usage: ${0} perf|connect" +if [ "${test}" != "perf" -a "${test}" != "bootstrap" ]; then +  echo "Usage: ${0} perf|bootstrap"    exit 1  fi @@ -67,5 +67,5 @@ fi  set -e  # run the test -make run-${test}-test CONTAINER_ID_FILE=${tempfile} +make run-client-${test} CONTAINER_ID_FILE=${tempfile}  rm -r ${tempfile} diff --git a/scripts/docker/helper/run-until-error.sh b/scripts/docker/helper/run-until-error.sh new file mode 100755 index 00000000..a4cab6ec --- /dev/null +++ b/scripts/docker/helper/run-until-error.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +status=0 +runs=10 + +while [ ${status} -eq 0 -a ${runs} -gt 0 ]; do +  echo "=== RUN ${runs}" +  make rm-all-containers +  make run-perf-test +  status=${?} +  runs=`expr ${runs} - 1` +done | 
