|
|
@@ -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")
|
|
|
+}
|