docker-volume-backup/test
Frederik Ring c3daeacecb
Improve Swarm support (#333)
* Query for labeled services as well

* Try scaling down services

* Scale services back up

* Use progress tool from Docker CLI

* In test, label both services

* Clean up error and log messages

* Document scale-up/down approach in docs

* Downgrade Docker CLI to match client

* Document services stats

* Do not rely on PreviousSpec for storing desired replica count

* Log warnings from Docker when updating services

* Check whether container and service labels collide

* Document script behavior on label collision

* Add additional check if all containers have been removed

* Scale services concurrently

* Move docker interaction code into own file

* Factor out code for service updating

* Time out after five minutes of not reaching desired container count

* Inline handling of in-swarm container level restart

* Timer is more suitable for timeout race

* Timeout when scaling down services should be configurable

* Choose better filename

* Reflect changes in naming

* Rename and deprecate BACKUP_STOP_CONTAINER_LABEL

* Improve logging

* Further simplify logging
2024-01-31 12:17:41 +01:00
..
azure Run tests Docker in Docker (#261) 2023-09-02 15:17:46 +02:00
certs Run tests Docker in Docker (#261) 2023-09-02 15:17:46 +02:00
cli Exclude specific backends from pruning (#262) 2023-08-27 19:19:11 +02:00
collision Improve Swarm support (#333) 2024-01-31 12:17:41 +01:00
commands Run tests Docker in Docker (#261) 2023-09-02 15:17:46 +02:00
confd Run tests Docker in Docker (#261) 2023-09-02 15:17:46 +02:00
dropbox Pruning method logs nonsensical configuration values (#301) 2023-11-04 12:19:44 +01:00
extend Run tests Docker in Docker (#261) 2023-09-02 15:17:46 +02:00
gpg Run tests Docker in Docker (#261) 2023-09-02 15:17:46 +02:00
ignore Run tests Docker in Docker (#261) 2023-09-02 15:17:46 +02:00
local Run tests Docker in Docker (#261) 2023-09-02 15:17:46 +02:00
notifications Run tests Docker in Docker (#261) 2023-09-02 15:17:46 +02:00
ownership Run tests Docker in Docker (#261) 2023-09-02 15:17:46 +02:00
pgzip Replace Gzip with PGzip (#266) 2023-09-03 16:49:52 +02:00
pruning Retry creation of sandbox container (#276) 2023-09-19 14:45:09 +02:00
s3 Run tests Docker in Docker (#261) 2023-09-02 15:17:46 +02:00
secrets Run tests Docker in Docker (#261) 2023-09-02 15:17:46 +02:00
services Improve Swarm support (#333) 2024-01-31 12:17:41 +01:00
ssh Run tests Docker in Docker (#261) 2023-09-02 15:17:46 +02:00
swarm Run tests Docker in Docker (#261) 2023-09-02 15:17:46 +02:00
user Run tests Docker in Docker (#261) 2023-09-02 15:17:46 +02:00
webdav Run tests Docker in Docker (#261) 2023-09-02 15:17:46 +02:00
zstd Run tests Docker in Docker (#261) 2023-09-02 15:17:46 +02:00
Dockerfile Run tests Docker in Docker (#261) 2023-09-02 15:17:46 +02:00
README.md Run tests Docker in Docker (#261) 2023-09-02 15:17:46 +02:00
test.sh Guard DinD docker info call with timeout (#315) 2023-12-12 20:28:13 +01:00
util.sh Replace Gzip with PGzip (#266) 2023-09-03 16:49:52 +02:00

Integration Tests

Running tests

The main entry point for running tests is the ./test.sh script. It can be used to run the entire test suite, or just a single test case.

Run all tests

./test.sh

Run a single test case

./test.sh <directory-name>

Configuring a test run

In addition to the match pattern, which can be given as the first positional argument, certain behavior can be changed by setting environment variables:

BUILD_IMAGE

When set, the test script will build an up-to-date docker-volume-backup image from the current state of your source tree, and run the tests against it.

BUILD_IMAGE=1 ./test.sh

The default behavior is not to build an image, and instead look for a version on your host system.

IMAGE_TAG

Setting this value lets you run tests against different existing images, so you can compare behavior:

IMAGE_TAG=v2.30.0 ./test.sh

NO_IMAGE_CACHE

When set, images from remote registries will not be cached and shared between sandbox containers.

NO_IMAGE_CACHE=1 ./test.sh

By default, two local images are created that persist the image data and provide it to containers at runtime.

Understanding the test setup

The test setup runs each test case in an isolated Docker container, which itself is running an otherwise unused Docker daemon. This means, tests can rely on noone else using that daemon, making expectations about the number of running containers and so forth. As the sandbox container is also expected to be torn down post test, the scripts do not need to do any clean up or similar.

Anatomy of a test case

The test.sh script looks for an exectuable file called run.sh in each directory. When found, it is executed and signals success by returning a 0 exit code. Any other exit code is considered a failure and will halt execution of further tests.

There is an util.sh file containing a few commonly used helpers which can be used by putting the following prelude to a new test case:

cd "$(dirname "$0")"
. ../util.sh
current_test=$(basename $(pwd))