From 466aa2a869a0f3f81262133f9ccd89bc2bbdfaff Mon Sep 17 00:00:00 2001 From: Frederik Ring Date: Mon, 9 Jun 2025 13:19:58 +0200 Subject: [PATCH] Consider manager status when checking for swarm related features --- cmd/backup/stop_restart.go | 2 +- cmd/backup/stop_restart_test.go | 15 ++++++++++++++- test/test.sh | 9 +++++---- 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/cmd/backup/stop_restart.go b/cmd/backup/stop_restart.go index cfb0352..5b95416 100644 --- a/cmd/backup/stop_restart.go +++ b/cmd/backup/stop_restart.go @@ -89,7 +89,7 @@ func isSwarm(c interface { if err != nil { return false, errwrap.Wrap(err, "error getting docker info") } - return info.Swarm.LocalNodeState != "" && info.Swarm.LocalNodeState != swarm.LocalNodeStateInactive, nil + return info.Swarm.LocalNodeState != "" && info.Swarm.LocalNodeState != swarm.LocalNodeStateInactive && info.Swarm.ControlAvailable, nil } // stopContainersAndServices stops all Docker containers that are marked as to being diff --git a/cmd/backup/stop_restart_test.go b/cmd/backup/stop_restart_test.go index 9e907bd..384ae33 100644 --- a/cmd/backup/stop_restart_test.go +++ b/cmd/backup/stop_restart_test.go @@ -30,13 +30,26 @@ func TestIsSwarm(t *testing.T) { &mockInfoClient{ result: system.Info{ Swarm: swarm.Info{ - LocalNodeState: swarm.LocalNodeStateActive, + LocalNodeState: swarm.LocalNodeStateActive, + ControlAvailable: true, }, }, }, true, false, }, + { + "worker", + &mockInfoClient{ + result: system.Info{ + Swarm: swarm.Info{ + LocalNodeState: swarm.LocalNodeStateActive, + }, + }, + }, + false, + false, + }, { "compose", &mockInfoClient{ diff --git a/test/test.sh b/test/test.sh index 6abdfcd..dc42cd0 100755 --- a/test/test.sh +++ b/test/test.sh @@ -45,13 +45,15 @@ for dir in $(find $find_args | sort); do fi docker compose --profile $compose_profile up -d --wait - test_context=manager + if [ -f "${dir}/.multinode" ]; then + test_context=$(cat $dir/.multinode) + fi + docker compose exec $test_context /bin/sh -c "docker load -i /cache/image.tar.gz" + if [ -f "${dir}/.swarm" ]; then docker compose exec manager docker swarm init elif [ -f "${dir}/.multinode" ]; then - test_context=$(cat $dir/.multinode) - 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) @@ -61,7 +63,6 @@ for dir in $(find $find_args | sort); do docker compose exec -w "/code/$dir" manager docker stack deploy --compose-file="docker-compose.yml" test_stack fi - docker compose exec $test_context /bin/sh -c "docker load -i /cache/image.tar.gz" docker compose exec -e TEST_VERSION=$IMAGE_TAG $test_context /bin/sh -c "/code/$test" docker compose --profile $compose_profile down