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