From 36bf0c458b6459a5f40798ccfa0acf709f7df280 Mon Sep 17 00:00:00 2001 From: Milas Bowman Date: Wed, 17 Apr 2024 10:52:01 -0400 Subject: [PATCH] chore(e2e): fix flaky cascade failure test This was racy with the sleep, so the Compose file has been tweaked to make it pass reliably. Now, there's 3 services: * `running` - sleeps forever * `exit` - exits _successfully_ immediately * depends on `running` started * `fail` - exits _with error_ immediately * depends on `exit` succeeding Now, the test can ensure that the containers are all run/ started in the expected order the assertions will be reliable. Before, it was possible for `fail` to run & exit before `exit`, for example. The `running` service also ensures there's always at least one other "running" container when we do an abort. Signed-off-by: Milas Bowman --- pkg/e2e/cascade_test.go | 7 +++++-- pkg/e2e/fixtures/cascade/compose.yaml | 13 ++++++++++++- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/pkg/e2e/cascade_test.go b/pkg/e2e/cascade_test.go index e1f86940e..e5b2ac141 100644 --- a/pkg/e2e/cascade_test.go +++ b/pkg/e2e/cascade_test.go @@ -36,6 +36,8 @@ func TestCascadeStop(t *testing.T) { res := c.RunDockerComposeCmd(t, "-f", "./fixtures/cascade/compose.yaml", "--project-name", projectName, "up", "--abort-on-container-exit") assert.Assert(t, strings.Contains(res.Combined(), "exit-1 exited with code 0"), res.Combined()) + // no --exit-code-from, so this is not an error + assert.Equal(t, res.ExitCode, 0) } func TestCascadeFail(t *testing.T) { @@ -48,6 +50,7 @@ func TestCascadeFail(t *testing.T) { res := c.RunDockerComposeCmdNoCheck(t, "-f", "./fixtures/cascade/compose.yaml", "--project-name", projectName, "up", "--abort-on-container-failure") assert.Assert(t, strings.Contains(res.Combined(), "exit-1 exited with code 0"), res.Combined()) - assert.Assert(t, strings.Contains(res.Combined(), "fail-1 exited with code 1"), res.Combined()) - assert.Equal(t, res.ExitCode, 1) + assert.Assert(t, strings.Contains(res.Combined(), "fail-1 exited with code 111"), res.Combined()) + // failing exit code should be propagated + assert.Equal(t, res.ExitCode, 111) } diff --git a/pkg/e2e/fixtures/cascade/compose.yaml b/pkg/e2e/fixtures/cascade/compose.yaml index 2e90d6981..fe79adb58 100644 --- a/pkg/e2e/fixtures/cascade/compose.yaml +++ b/pkg/e2e/fixtures/cascade/compose.yaml @@ -1,8 +1,19 @@ services: + running: + image: alpine + command: sleep infinity + init: true + exit: image: alpine command: /bin/true + depends_on: + running: + condition: service_started fail: image: alpine - command: sh -c "sleep 0.1 && /bin/false" + command: sh -c "return 111" + depends_on: + exit: + condition: service_completed_successfully