Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 7 additions & 8 deletions test/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,14 +39,6 @@ Setting this value lets you run tests against different existing images, so you
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.

```sh
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
Expand All @@ -68,3 +60,10 @@ cd "$(dirname "$0")"
. ../util.sh
current_test=$(basename $(pwd))
```

### Running tests in swarm mode

A test case can signal it wants to run in swarm mode by placing an empty `.swarm` file inside the directory.
In case the swarm setup should be compose of multiple nodes, a `.multinode` file can be used.

A multinode setup will contain one manager (`manager`) and two worker nodes (`worker1` and `worker2`).
Empty file added test/collision/.swarm
Empty file.
2 changes: 0 additions & 2 deletions test/collision/run.sh
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,6 @@ current_test=$(basename $(pwd))

export LOCAL_DIR=$(mktemp -d)

docker swarm init

docker stack deploy --compose-file=docker-compose.yml test_stack

while [ -z $(docker ps -q -f name=backup) ]; do
Expand Down
27 changes: 27 additions & 0 deletions test/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
services:
manager: &node
privileged: true
image: offen/docker-volume-backup:test-sandbox
healthcheck:
test: ["CMD", "docker", "info"]
interval: 1s
timeout: 5s
retries: 50
volumes:
- $SOURCE:/code
- $TARBALL:/cache/image.tar.gz
- docker_volume_backup_test_sandbox_image:/var/lib/docker/image
- docker_volume_backup_test_sandbox_overlay2:/var/lib/docker/overlay2

worker1:
<<: *node
profiles:
- multinode
worker2:
<<: *node
profiles:
- multinode

volumes:
docker_volume_backup_test_sandbox_image:
docker_volume_backup_test_sandbox_overlay2:
Empty file added test/secrets/.swarm
Empty file.
2 changes: 0 additions & 2 deletions test/secrets/run.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@ cd $(dirname $0)
. ../util.sh
current_test=$(basename $(pwd))

docker swarm init

printf "test" | docker secret create minio_root_user -
printf "GMusLtUmILge2by+z890kQ" | docker secret create minio_root_password -

Expand Down
Empty file added test/services/.swarm
Empty file.
2 changes: 0 additions & 2 deletions test/services/run.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@ cd $(dirname $0)
. ../util.sh
current_test=$(basename $(pwd))

docker swarm init

docker stack deploy --compose-file=docker-compose.yml test_stack

while [ -z $(docker ps -q -f name=backup) ]; do
Expand Down
Empty file added test/swarm/.swarm
Empty file.
2 changes: 0 additions & 2 deletions test/swarm/run.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@ cd $(dirname $0)
. ../util.sh
current_test=$(basename $(pwd))

docker swarm init

docker stack deploy --compose-file=docker-compose.yml test_stack

while [ -z $(docker ps -q -f name=backup) ]; do
Expand Down
56 changes: 20 additions & 36 deletions test/test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,13 @@ IMAGE_TAG=${IMAGE_TAG:-canary}

sandbox="docker_volume_backup_test_sandbox"
tarball="$(mktemp -d)/image.tar.gz"
compose_profile="default"

trap finish EXIT INT TERM

finish () {
rm -rf $(dirname $tarball)
if [ ! -z $(docker ps -aq --filter=name=$sandbox) ]; then
docker rm -f $(docker stop $sandbox)
fi
if [ ! -z $(docker volume ls -q --filter=name="^${sandbox}\$") ]; then
docker volume rm $sandbox
fi
docker compose --profile $compose_profile down
}

docker build -t offen/docker-volume-backup:test-sandbox .
Expand All @@ -41,41 +37,29 @@ for dir in $(find $find_args | sort); do
echo ""

test="${dir}/run.sh"
docker_run_args="--name "$sandbox" --detach \
--privileged \
-v $(dirname $(pwd)):/code \
-v $tarball:/cache/image.tar.gz \
-v $sandbox:/var/lib/docker"

if [ -z "$NO_IMAGE_CACHE" ]; then
docker_run_args="$docker_run_args \
-v "${sandbox}_image":/var/lib/docker/image \
-v "${sandbox}_overlay2":/var/lib/docker/overlay2"
fi
export TARBALL=$tarball
export SOURCE=$(dirname $(pwd))

docker run $docker_run_args offen/docker-volume-backup:test-sandbox

retry_counter=0
until timeout 5 docker exec $sandbox /bin/sh -c 'docker info' > /dev/null 2>&1; do
if [ $retry_counter -gt 20 ]; then
echo "Gave up waiting for Docker daemon to become ready after 20 attempts"
exit 1
fi
if [ -f ${dir}/.multinode ]; then
compose_profile="multinode"
fi

if [ "$(docker inspect $sandbox --format '{{ .State.Running }}')" = "false" ]; then
docker rm $sandbox
docker run $docker_run_args offen/docker-volume-backup:test-sandbox
fi
docker compose --profile $compose_profile up -d --wait

sleep 0.5
retry_counter=$((retry_counter+1))
done
if [ -f "${dir}/.swarm" ]; then
docker compose exec manager docker swarm init
elif [ -f "${dir}/.multinode" ]; then
docker compose exec manager docker swarm init
manager_ip=$(docker compose exec manager docker node inspect $(docker compose exec manager docker node ls -q) --format '{{ .Status.Addr }}')
token=$(docker compose exec manager docker swarm join-token -q worker)
docker compose exec worker1 docker swarm join --token $token $manager_ip:2377
docker compose exec worker2 docker swarm join --token $token $manager_ip:2377
fi

docker exec $sandbox /bin/sh -c "docker load -i /cache/image.tar.gz"
docker exec -e TEST_VERSION=$IMAGE_TAG $sandbox /bin/sh -c "/code/test/$test"
docker compose exec manager /bin/sh -c "docker load -i /cache/image.tar.gz"
docker compose exec -e TEST_VERSION=$IMAGE_TAG manager /bin/sh -c "/code/test/$test"

docker rm $(docker stop $sandbox)
docker volume rm $sandbox
docker compose --profile $compose_profile down
echo ""
echo "$test passed"
echo ""
Expand Down
Loading