package main import ( "os/exec" "strings" "sync" "testing" "time" ) func TestMultipleAttachRestart(t *testing.T) { cmd := exec.Command(dockerBinary, "run", "--name", "attacher", "-d", "busybox", "/bin/sh", "-c", "sleep 1 && echo hello") group := sync.WaitGroup{} group.Add(4) go func() { defer group.Done() out, _, err := runCommandWithOutput(cmd) if err != nil { t.Fatal(err, out) } }() time.Sleep(500 * time.Millisecond) for i := 0; i < 3; i++ { go func() { defer group.Done() c := exec.Command(dockerBinary, "attach", "attacher") out, _, err := runCommandWithOutput(c) if err != nil { t.Fatal(err, out) } if actual := strings.Trim(out, "\r\n"); actual != "hello" { t.Fatalf("unexpected output %s expected hello", actual) } }() } group.Wait() cmd = exec.Command(dockerBinary, "kill", "attacher") if _, err := runCommand(cmd); err != nil { t.Fatal(err) } deleteAllContainers() logDone("run - multiple attach") }