| @ -0,0 +1,25 @@ | |||
| FROM ubuntu:latest | |||
| # Note this image uses mawk1.3 | |||
| ENV staging "true" | |||
| ENV DUCKDNS_TOKEN 1d616aa9-b8e4-4bb4-b312-3289de82badb | |||
| # Update and install required software | |||
| RUN apt-get update --fix-missing | |||
| RUN apt-get install -y git curl dnsutils wget nginx-light | |||
| RUN apt-get install -y vim dos2unix # for debugging | |||
| # TODO test with drill, dig, host | |||
| WORKDIR /root | |||
| # Prevent "Can't load /root/.rnd into RNG" error from openssl | |||
| RUN touch /root/.rnd | |||
| # BATS (Bash Automated Testings) | |||
| RUN git clone https://github.com/bats-core/bats-core.git /bats-core | |||
| RUN git clone https://github.com/jasonkarns/bats-support /bats-support | |||
| RUN git clone https://github.com/jasonkarns/bats-assert-1 /bats-assert | |||
| RUN /bats-core/install.sh /usr/local | |||
| # Run eternal loop - for testing | |||
| CMD tail -f /dev/null | |||
| @ -0,0 +1,35 @@ | |||
| # Testing | |||
| ## Continuous Integration | |||
| For continuous integration testing we have the following: | |||
| `gitactions` script which runs whenever a PR is pushed: | |||
| 1. Uses `docker-compose` to start `pebble` (letsencrypt test server) and `challtestsrv` (minimal dns client for pebble) | |||
| 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 on a single OS | |||
| 1. Start `pebble` and `challtestsrv` using ```docker-compose up -d --build``` | |||
| 2. Run the test suite ```run-test.sh [<os>]``` | |||
| 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.sh <os> bats <bats test script>``` | |||
| 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.sh <os> /getssl/test/debug-test.sh <getssl config file>``` | |||
| 3. e.g. `run-test.sh ubuntu /getssl/test/debug-test.sh -d /getssl/test/test-config/getssl-http01-cfg` | |||
| ## TODO | |||
| 1. Test wildcards | |||
| 2. Test SSH, SFTP, SCP | |||
| 3. Test change of key algorithm (should automatically delete and re-create account.key) | |||
| @ -1,40 +0,0 @@ | |||
| # Testing | |||
| This directory contains a simple test script which tests creating | |||
| certificates with Pebble (testing version of the LetsEncrypt server) | |||
| Start up pebble, the challdnstest server for DNS challenges | |||
| ```sh | |||
| docker-compose -f "docker-compose.yml" up -d --build | |||
| ``` | |||
| Run the tests | |||
| ```sh | |||
| test/run-all-tests.sh | |||
| ``` | |||
| Run individual test | |||
| ```sh | |||
| docker exec -it getssl bats /getssl/test/<filename.bats> | |||
| ``` | |||
| Debug (uses helper script to set `CURL_CA_BUNDLE` as pebble uses a local certificate, | |||
| otherwise you get a "unknown API version" error) | |||
| ```sh | |||
| docker exec -it getssl-<os> /getssl/test/debug-test.sh <config-file>` | |||
| eg. | |||
| ```sh | |||
| docker exec -it getssl-ubuntu18 /getssl/test/debug-test.sh getssl-http01.cfg | |||
| ``` | |||
| ## TODO | |||
| 1. Test wildcards | |||
| 2. Test SSH, SFTP, SCP | |||
| 3. Test change of key algorithm | |||
| @ -1,15 +0,0 @@ | |||
| echo %time% | |||
| docker exec -it getssl-alpine bats /getssl/test | |||
| echo %time% | |||
| docker exec -it getssl-centos6 bats /getssl/test | |||
| echo %time% | |||
| docker exec -it getssl-debian bats /getssl/test | |||
| echo %time% | |||
| docker exec -it getssl-ubuntu bats /getssl/test | |||
| echo %time% | |||
| docker exec -it getssl-ubuntu18 bats /getssl/test | |||
| echo %time% | |||
| docker exec -it getssl-ubuntu16 bats /getssl/test | |||
| echo %time% | |||
| docker exec -it getssl-duckdns bats /getssl/test | |||
| echo %time% | |||
| @ -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 | |||
| @ -0,0 +1,52 @@ | |||
| @echo off | |||
| IF %1.==. GOTO NoOS | |||
| set OS=%1 | |||
| :CheckCommand | |||
| IF %2.==. GOTO NoCmd | |||
| set COMMAND=%2 %3 | |||
| :CheckAlias | |||
| IF %OS%==duckdns GOTO duckdns | |||
| set ALIAS=%OS%.getssl.test | |||
| set STAGING= | |||
| GOTO Run | |||
| :NoOS | |||
| set OS=ubuntu | |||
| GOTO CheckCommand | |||
| :NoCmd | |||
| REM set COMMAND=/getssl/test/run-bats.sh | |||
| set COMMAND=bats /getssl/test | |||
| GOTO CheckAlias | |||
| :duckdns | |||
| set ALIAS=getssl.duckdns.org | |||
| set STAGING=--env STAGING=true | |||
| :Run | |||
| for %%I in (.) do set CurrDirName=%%~nxI | |||
| docker build --rm -f "test\Dockerfile-%OS%" -t getssl-%OS% . | |||
| @echo on | |||
| docker run -it ^ | |||
| --env GETSSL_HOST=%ALIAS% %STAGING% ^ | |||
| -v %cd%:/getssl ^ | |||
| --rm ^ | |||
| --network %CurrDirName%_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% | |||
| @ -0,0 +1,46 @@ | |||
| #! /usr/bin/env bash | |||
| if [ $# -eq 0 ]; then | |||
| echo "Usage: $(basename "$0") <os> [<command>]" | |||
| 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="getssl.duckdns.org" | |||
| STAGING="--env STAGING=true" | |||
| else | |||
| ALIAS="$OS.getssl.test" | |||
| STAGING="" | |||
| fi | |||
| docker build --rm -f "test/Dockerfile-$OS" -t "getssl-$OS" . | |||
| # shellcheck disable=SC2086 | |||
| docker run \ | |||
| --env GETSSL_HOST="$OS.getssl.test" $STAGING \ | |||
| -v "$(pwd)":/getssl \ | |||
| --rm \ | |||
| --network ${PWD##*/}_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 | |||