Skip to content

Commit

Permalink
e2e test covering multi-service rebuild with common resources
Browse files Browse the repository at this point in the history
Signed-off-by: Nicolas De Loof <[email protected]>
  • Loading branch information
ndeloof authored and glours committed Jan 22, 2025
1 parent ed10804 commit d04b3f4
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 3 deletions.
5 changes: 2 additions & 3 deletions pkg/e2e/compose_run_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ func TestLocalComposeRun(t *testing.T) {
})

t.Run("--quiet-pull", func(t *testing.T) {
res := c.RunDockerComposeCmd(t, "-f", "./fixtures/run-test/quiet-pull.yaml", "down", "--rmi", "all")
res := c.RunDockerComposeCmd(t, "-f", "./fixtures/run-test/quiet-pull.yaml", "down", "--remove-orphans", "--rmi", "all")
res.Assert(t, icmd.Success)

res = c.RunDockerComposeCmd(t, "-f", "./fixtures/run-test/quiet-pull.yaml", "run", "--quiet-pull", "backend")
Expand All @@ -171,12 +171,11 @@ func TestLocalComposeRun(t *testing.T) {
})

t.Run("--pull", func(t *testing.T) {
res := c.RunDockerComposeCmd(t, "-f", "./fixtures/run-test/pull.yaml", "down", "--rmi", "all")
res := c.RunDockerComposeCmd(t, "-f", "./fixtures/run-test/pull.yaml", "down", "--remove-orphans", "--rmi", "all")
res.Assert(t, icmd.Success)

res = c.RunDockerComposeCmd(t, "-f", "./fixtures/run-test/pull.yaml", "run", "--pull", "always", "backend")
assert.Assert(t, strings.Contains(res.Combined(), "backend Pulling"), res.Combined())
assert.Assert(t, strings.Contains(res.Combined(), "Download complete"), res.Combined())
assert.Assert(t, strings.Contains(res.Combined(), "backend Pulled"), res.Combined())
})
}
31 changes: 31 additions & 0 deletions pkg/e2e/fixtures/watch/rebuild.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
services:
a:
build:
dockerfile_inline: |
FROM nginx
RUN mkdir /data
COPY test /data/a
develop:
watch:
- path: test
action: rebuild
b:
build:
dockerfile_inline: |
FROM nginx
RUN mkdir /data
COPY test /data/b
develop:
watch:
- path: test
action: rebuild
c:
build:
dockerfile_inline: |
FROM nginx
RUN mkdir /data
COPY test /data/c
develop:
watch:
- path: test
action: rebuild
46 changes: 46 additions & 0 deletions pkg/e2e/watch_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -322,3 +322,49 @@ func TestWatchExec(t *testing.T) {
})
c.RunDockerComposeCmdNoCheck(t, "-p", projectName, "kill", "-s", "9")
}

func TestWatchMultiServices(t *testing.T) {
c := NewCLI(t)
const projectName = "test_watch_rebuild"

defer c.cleanupWithDown(t, projectName)

tmpdir := t.TempDir()
composeFilePath := filepath.Join(tmpdir, "compose.yaml")
CopyFile(t, filepath.Join("fixtures", "watch", "rebuild.yaml"), composeFilePath)

testFile := filepath.Join(tmpdir, "test")
require.NoError(t, os.WriteFile(testFile, []byte("test"), 0o600))

cmd := c.NewDockerComposeCmd(t, "-p", projectName, "-f", composeFilePath, "up", "--watch")
buffer := bytes.NewBuffer(nil)
cmd.Stdout = buffer
watch := icmd.StartCmd(cmd)

poll.WaitOn(t, func(l poll.LogT) poll.Result {
if strings.Contains(watch.Stdout(), "Attaching to ") {
return poll.Success()
}
return poll.Continue("%v", watch.Stdout())
})

waitRebuild := func(service string, expected string) {
poll.WaitOn(t, func(l poll.LogT) poll.Result {
cat := c.RunDockerComposeCmdNoCheck(t, "-p", projectName, "exec", service, "cat", "/data/"+service)
if strings.Contains(cat.Stdout(), expected) {
return poll.Success()
}
return poll.Continue("%v", cat.Combined())
})
}
waitRebuild("a", "test")
waitRebuild("b", "test")
waitRebuild("c", "test")

require.NoError(t, os.WriteFile(testFile, []byte("updated"), 0o600))
waitRebuild("a", "updated")
waitRebuild("b", "updated")
waitRebuild("c", "updated")

c.RunDockerComposeCmdNoCheck(t, "-p", projectName, "kill", "-s", "9")
}

0 comments on commit d04b3f4

Please sign in to comment.