| ... | ... |
@@ -39,6 +39,117 @@ func TestIdFormat(t *testing.T) {
|
| 39 | 39 |
} |
| 40 | 40 |
} |
| 41 | 41 |
|
| 42 |
+func TestMultipleAttachRestart(t *testing.T) {
|
|
| 43 |
+ runtime, err := newTestRuntime() |
|
| 44 |
+ if err != nil {
|
|
| 45 |
+ t.Fatal(err) |
|
| 46 |
+ } |
|
| 47 |
+ defer nuke(runtime) |
|
| 48 |
+ container, err := runtime.Create( |
|
| 49 |
+ &Config{
|
|
| 50 |
+ Image: GetTestImage(runtime).Id, |
|
| 51 |
+ Cmd: []string{"/bin/sh", "-c",
|
|
| 52 |
+ "i=1; while [ $i -le 5 ]; do i=`expr $i + 1`; echo hello; done"}, |
|
| 53 |
+ Memory: 33554432, |
|
| 54 |
+ }, |
|
| 55 |
+ ) |
|
| 56 |
+ if err != nil {
|
|
| 57 |
+ t.Fatal(err) |
|
| 58 |
+ } |
|
| 59 |
+ defer runtime.Destroy(container) |
|
| 60 |
+ |
|
| 61 |
+ // Simulate 3 client attaching to the container and stop/restart |
|
| 62 |
+ |
|
| 63 |
+ stdout1, err := container.StdoutPipe() |
|
| 64 |
+ if err != nil {
|
|
| 65 |
+ t.Fatal(err) |
|
| 66 |
+ } |
|
| 67 |
+ stdout2, err := container.StdoutPipe() |
|
| 68 |
+ if err != nil {
|
|
| 69 |
+ t.Fatal(err) |
|
| 70 |
+ } |
|
| 71 |
+ stdout3, err := container.StdoutPipe() |
|
| 72 |
+ if err != nil {
|
|
| 73 |
+ t.Fatal(err) |
|
| 74 |
+ } |
|
| 75 |
+ if err := container.Start(); err != nil {
|
|
| 76 |
+ t.Fatal(err) |
|
| 77 |
+ } |
|
| 78 |
+ l1, err := bufio.NewReader(stdout1).ReadString('\n')
|
|
| 79 |
+ if err != nil {
|
|
| 80 |
+ t.Fatal(err) |
|
| 81 |
+ } |
|
| 82 |
+ if strings.Trim(l1, " \r\n") != "hello" {
|
|
| 83 |
+ t.Fatalf("Unexpected output. Expected [%s], received [%s]", "hello", l1)
|
|
| 84 |
+ } |
|
| 85 |
+ l2, err := bufio.NewReader(stdout2).ReadString('\n')
|
|
| 86 |
+ if err != nil {
|
|
| 87 |
+ t.Fatal(err) |
|
| 88 |
+ } |
|
| 89 |
+ if strings.Trim(l2, " \r\n") != "hello" {
|
|
| 90 |
+ t.Fatalf("Unexpected output. Expected [%s], received [%s]", "hello", l2)
|
|
| 91 |
+ } |
|
| 92 |
+ l3, err := bufio.NewReader(stdout3).ReadString('\n')
|
|
| 93 |
+ if err != nil {
|
|
| 94 |
+ t.Fatal(err) |
|
| 95 |
+ } |
|
| 96 |
+ if strings.Trim(l3, " \r\n") != "hello" {
|
|
| 97 |
+ t.Fatalf("Unexpected output. Expected [%s], received [%s]", "hello", l3)
|
|
| 98 |
+ } |
|
| 99 |
+ |
|
| 100 |
+ if err := container.Stop(); err != nil {
|
|
| 101 |
+ t.Fatal(err) |
|
| 102 |
+ } |
|
| 103 |
+ |
|
| 104 |
+ stdout1, err = container.StdoutPipe() |
|
| 105 |
+ if err != nil {
|
|
| 106 |
+ t.Fatal(err) |
|
| 107 |
+ } |
|
| 108 |
+ stdout2, err = container.StdoutPipe() |
|
| 109 |
+ if err != nil {
|
|
| 110 |
+ t.Fatal(err) |
|
| 111 |
+ } |
|
| 112 |
+ stdout3, err = container.StdoutPipe() |
|
| 113 |
+ if err != nil {
|
|
| 114 |
+ t.Fatal(err) |
|
| 115 |
+ } |
|
| 116 |
+ if err := container.Start(); err != nil {
|
|
| 117 |
+ t.Fatal(err) |
|
| 118 |
+ } |
|
| 119 |
+ timeout := make(chan bool) |
|
| 120 |
+ go func() {
|
|
| 121 |
+ l1, err = bufio.NewReader(stdout1).ReadString('\n')
|
|
| 122 |
+ if err != nil {
|
|
| 123 |
+ t.Fatal(err) |
|
| 124 |
+ } |
|
| 125 |
+ if strings.Trim(l1, " \r\n") != "hello" {
|
|
| 126 |
+ t.Fatalf("Unexpected output. Expected [%s], received [%s]", "hello", l1)
|
|
| 127 |
+ } |
|
| 128 |
+ l2, err = bufio.NewReader(stdout2).ReadString('\n')
|
|
| 129 |
+ if err != nil {
|
|
| 130 |
+ t.Fatal(err) |
|
| 131 |
+ } |
|
| 132 |
+ if strings.Trim(l2, " \r\n") != "hello" {
|
|
| 133 |
+ t.Fatalf("Unexpected output. Expected [%s], received [%s]", "hello", l2)
|
|
| 134 |
+ } |
|
| 135 |
+ l3, err = bufio.NewReader(stdout3).ReadString('\n')
|
|
| 136 |
+ if err != nil {
|
|
| 137 |
+ t.Fatal(err) |
|
| 138 |
+ } |
|
| 139 |
+ if strings.Trim(l3, " \r\n") != "hello" {
|
|
| 140 |
+ t.Fatalf("Unexpected output. Expected [%s], received [%s]", "hello", l3)
|
|
| 141 |
+ } |
|
| 142 |
+ timeout <- false |
|
| 143 |
+ }() |
|
| 144 |
+ go func() {
|
|
| 145 |
+ time.Sleep(3 * time.Second) |
|
| 146 |
+ timeout <- true |
|
| 147 |
+ }() |
|
| 148 |
+ if <-timeout {
|
|
| 149 |
+ t.Fatalf("Timeout reading from the process")
|
|
| 150 |
+ } |
|
| 151 |
+} |
|
| 152 |
+ |
|
| 42 | 153 |
func TestCommitRun(t *testing.T) {
|
| 43 | 154 |
runtime, err := newTestRuntime() |
| 44 | 155 |
if err != nil {
|
| ... | ... |
@@ -89,7 +200,6 @@ func TestCommitRun(t *testing.T) {
|
| 89 | 89 |
t.Fatal(err) |
| 90 | 90 |
} |
| 91 | 91 |
defer runtime.Destroy(container2) |
| 92 |
- |
|
| 93 | 92 |
stdout, err := container2.StdoutPipe() |
| 94 | 93 |
stderr, err := container2.StderrPipe() |
| 95 | 94 |
if err := container2.Start(); err != nil {
|