diff --git a/.github/workflows/run-all-tests.yml b/.github/workflows/run-all-tests.yml index 7359f90..1872669 100644 --- a/.github/workflows/run-all-tests.yml +++ b/.github/workflows/run-all-tests.yml @@ -12,8 +12,9 @@ jobs: steps: - uses: actions/checkout@v1 - name: Build the docker-compose stack - env: - DUCKDNS_TOKEN: ${{ secrets.DUCKDNS_TOKEN }} run: docker-compose up -d --build - - name: Run test suite - run: test/run-all-tests.sh + test-alpine: + needs: build + steps: + - name: Run test suite on Alpine + run: test/run-test.sh alpine diff --git a/test/README-Testing.md b/test/README-Testing.md index 6132f34..3cd4b2c 100644 --- a/test/README-Testing.md +++ b/test/README-Testing.md @@ -10,28 +10,23 @@ For continuous integration testing we have the following: 2. Then runs the `bats` test scripts (all the files with a ".bats" extension) for each OS (alpine, centos6, debian, ubuntu) 3. Runs the `bats` test script against the staging server (using nn ubuntu docker image and duckdns.org) -## To run all the tests locally - -1. Start `pebble` and `challtestsrv` using ```docker-compose up -d --build``` -2. Run the test suite `run-all-tests.cmd` - ## To run all the tests on a single OS 1. Start `pebble` and `challtestsrv` using ```docker-compose up -d --build``` -2. Run the test suite ```run-test.cmd []``` -3. eg. `run-test.cmd ubuntu16` +2. Run the test suite ```run-test.sh []``` +3. eg. `run-test.sh ubuntu16` ## To run a single bats test on a single OS 1. Start `pebble` and `challtestsrv` using ```docker-compose up -d --build``` -2. ```run-test.cmd bats ``` -3. e.g. `run-test.cmd ubuntu bats /getssl/test/1-simple-http01.bats` +2. ```run-test.sh bats ``` +3. e.g. `run-test.sh ubuntu bats /getssl/test/1-simple-http01.bats` ## To debug a test 1. Start `pebble` and `challtestsrv` using ```docker-compose up -d --build``` -2. ```run-test.cmd /getssl/test/debug-test.sh ``` -3. e.g. `run-test.cmd ubuntu /getssl/test/debug-test.sh -d /getssl/test/test-config/getssl-http01-cfg` +2. ```run-test.sh /getssl/test/debug-test.sh ``` +3. e.g. `run-test.sh ubuntu /getssl/test/debug-test.sh -d /getssl/test/test-config/getssl-http01-cfg` ## TODO diff --git a/test/run-all-tests.cmd b/test/run-all-tests.cmd deleted file mode 100644 index 07a4e27..0000000 --- a/test/run-all-tests.cmd +++ /dev/null @@ -1,8 +0,0 @@ -echo %time% -run-test.cmd alpine /etc/nginx/conf.d/default.conf 10 -run-test.cmd centos6 /etc/nginx/conf.d/default.conf 11 -run-test.cmd debian /etc/nginx/sites-enabled/default 12 -run-test.cmd ubuntu /etc/nginx/sites-enabled/default 13 -run-test.cmd ubuntu16 /etc/nginx/sites-enabled/default 14 -run-test.cmd ubuntu18 /etc/nginx/sites-enabled/default 15 -run-test.cmd duckdns /etc/nginx/sites-enabled/default 16 getssl.duckdns.org diff --git a/test/run-all-tests.sh b/test/run-all-tests.sh deleted file mode 100755 index ee2f1db..0000000 --- a/test/run-all-tests.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -docker exec getssl-alpine bats /getssl/test -docker exec getssl-centos6 bats /getssl/test -docker exec getssl-debian bats /getssl/test -docker exec getssl-ubuntu bats /getssl/test -docker exec getssl-ubuntu18 bats /getssl/test -docker exec getssl-duckdns bats /getssl/test diff --git a/test/run-bats.sh b/test/run-bats.sh deleted file mode 100644 index 2cfc9c4..0000000 --- a/test/run-bats.sh +++ /dev/null @@ -1,9 +0,0 @@ -#! /usr/bin/env bash - -if [ "$GETSSL_HOST" = "alpine.getssl.test" ]; then - # start nginx in background - /usr/bin/supervisord -c /etc/supervisord.conf & - sleep 5 # to allow for initialization -fi - -bats /getssl/test diff --git a/test/run-test.cmd b/test/run-test.cmd index 3d6d788..afc324a 100644 --- a/test/run-test.cmd +++ b/test/run-test.cmd @@ -16,7 +16,8 @@ set OS=ubuntu GOTO CheckCommand :NoCmd -set COMMAND=/getssl/test/run-bats.sh +REM set COMMAND=/getssl/test/run-bats.sh +set COMMAND=bats /getssl/test GOTO CheckAlias :duckdns @@ -29,6 +30,7 @@ docker build --rm -f "test\Dockerfile-%OS%" -t getssl-%OS% . docker run -it ^ --env GETSSL_HOST=%OS%.getssl.test ^ -v %cd%:/getssl ^ + --rm ^ --network getssl-timkimber_acmenet ^ --network-alias %ALIAS% ^ --network-alias a.%OS%.getssl.test ^ @@ -42,5 +44,6 @@ docker run -it ^ --network-alias i.%OS%.getssl.test ^ --network-alias j.%OS%.getssl.test ^ --network-alias k.%OS%.getssl.test ^ + --name getssl-%OS% ^ getssl-%OS% ^ %COMMAND% diff --git a/test/run-test.sh b/test/run-test.sh new file mode 100644 index 0000000..c7d19e0 --- /dev/null +++ b/test/run-test.sh @@ -0,0 +1,43 @@ +#! /usr/bin/env bash + +if [ $# -eq 0 ]; then + echo "Usage: $(basename "$0") []" + echo "e.g. $(basename "$0") alpine bats /getssl/test" + exit 1 +fi +OS=$1 + +if [ $# -gt 1 ]; then + shift + COMMAND=$* +else + COMMAND="bats /getssl/test" +fi + +if [ "$OS" == "duckdns" ]; then + ALIAS="$OS.duckdns.org" +else + ALIAS="$OS.getssl.test" +fi + +docker build --rm -f "test\Dockerfile-$OS" -t "getssl-$OS" . +docker run -it \ + --env GETSSL_HOST="$OS.getssl.test" \ + -v .:/getssl \ + --rm \ + --network getssl-timkimber_acmenet \ + --network-alias $ALIAS \ + --network-alias "a.$OS.getssl.test" \ + --network-alias "b.$OS.getssl.test" \ + --network-alias "c.$OS.getssl.test" \ + --network-alias "d.$OS.getssl.test" \ + --network-alias "e.$OS.getssl.test" \ + --network-alias "f.$OS.getssl.test" \ + --network-alias "g.$OS.getssl.test" \ + --network-alias "h.$OS.getssl.test" \ + --network-alias "i.$OS.getssl.test" \ + --network-alias "j.$OS.getssl.test" \ + --network-alias "k.$OS.getssl.test" \ + --name "getssl-$OS" \ + "getssl-$OS" \ + $COMMAND diff --git a/test/test-config/alpine-supervisord.conf b/test/test-config/alpine-supervisord.conf index 8eec585..9759570 100644 --- a/test/test-config/alpine-supervisord.conf +++ b/test/test-config/alpine-supervisord.conf @@ -1,14 +1,14 @@ -[supervisord] -nodaemon=true -logfile=/tmp/supervisord.log -childlogdir=/tmp -pidfile = /tmp/supervisord.pid - -[program:nginx] -command=nginx -g 'daemon off;' -stdout_logfile=/dev/stdout -stdout_logfile_maxbytes=0 -stderr_logfile=/dev/stderr -stderr_logfile_maxbytes=0 -autorestart=false -startretries=0 +[supervisord] +nodaemon=false +logfile=/tmp/supervisord.log +childlogdir=/tmp +pidfile = /tmp/supervisord.pid + +[program:nginx] +command=nginx +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 +autorestart=false +startretries=0 diff --git a/test/test_helper.bash b/test/test_helper.bash index c9bc867..d151d5a 100644 --- a/test/test_helper.bash +++ b/test/test_helper.bash @@ -34,10 +34,15 @@ create_certificate() { run ${CODE_DIR}/getssl $1 "$GETSSL_HOST" } - +# start nginx in background on alpine via supervisord +if [[ -f /usr/bin/supervisord && -f /etc/supervisord.conf ]]; then + if [[ ! $(pgrep supervisord) ]]; then + /usr/bin/supervisord -c /etc/supervisord.conf >&3- + fi +fi # Find NGINX configuration directory for HTTP-01 testing (need to add SSL to config) -if [[ -d /etc/nginx/conf.d/default.conf ]]; then +if [[ -f /etc/nginx/conf.d/default.conf ]]; then export NGINX_CONFIG=/etc/nginx/conf.d/default.conf elif [[ -f /etc/nginx/sites-enabled/default ]]; then export NGINX_CONFIG=/etc/nginx/sites-enabled/default @@ -47,7 +52,8 @@ else fi # Find IP address -export GETSSL_IP=$(ip address | awk '/10.30.50/ { print $2 }' | awk -F/ '{ print $1 }') +GETSSL_IP=$(ip address | awk '/10.30.50/ { print $2 }' | awk -F/ '{ print $1 }') +export GETSSL_IP if [ ! -f ${INSTALL_DIR}/pebble.minica.pem ]; then wget --quiet --no-clobber https://raw.githubusercontent.com/letsencrypt/pebble/master/test/certs/pebble.minica.pem 2>&1