Browse code

Add DockerCli tests

Signed-off-by: Tibor Vass <teabee89@gmail.com>

Tibor Vass authored on 2014/09/25 23:50:10
Showing 2 changed files
... ...
@@ -1,12 +1,18 @@
1 1
 package main
2 2
 
3 3
 import (
4
+	"bufio"
4 5
 	"fmt"
6
+	"io/ioutil"
7
+	"os"
5 8
 	"os/exec"
6 9
 	"strconv"
7 10
 	"strings"
8 11
 	"testing"
9 12
 	"time"
13
+	"unicode"
14
+
15
+	"github.com/kr/pty"
10 16
 )
11 17
 
12 18
 func TestEventsUntag(t *testing.T) {
... ...
@@ -166,3 +172,46 @@ func TestEventsImageUntagDelete(t *testing.T) {
166 166
 	}
167 167
 	logDone("events - image untag, delete is logged")
168 168
 }
169
+
170
+// #5979
171
+func TestEventsRedirectStdout(t *testing.T) {
172
+
173
+	since := time.Now().Unix()
174
+
175
+	cmd(t, "run", "busybox", "true")
176
+
177
+	defer deleteAllContainers()
178
+
179
+	file, err := ioutil.TempFile("", "")
180
+	if err != nil {
181
+		t.Fatalf("could not create temp file: %v", err)
182
+	}
183
+	defer os.Remove(file.Name())
184
+
185
+	command := fmt.Sprintf("%s events --since=%d --until=%d > %s", dockerBinary, since, time.Now().Unix(), file.Name())
186
+	_, tty, err := pty.Open()
187
+	if err != nil {
188
+		t.Fatalf("Could not open pty: %v", err)
189
+	}
190
+	cmd := exec.Command("sh", "-c", command)
191
+	cmd.Stdin = tty
192
+	cmd.Stdout = tty
193
+	cmd.Stderr = tty
194
+	if err := cmd.Run(); err != nil {
195
+		t.Fatalf("run err for command %q: %v", command, err)
196
+	}
197
+
198
+	scanner := bufio.NewScanner(file)
199
+	for scanner.Scan() {
200
+		for _, c := range scanner.Text() {
201
+			if unicode.IsControl(c) {
202
+				t.Fatalf("found control character %v", []byte(string(c)))
203
+			}
204
+		}
205
+	}
206
+	if err := scanner.Err(); err != nil {
207
+		t.Fatalf("Scan err for command %q: %v", command, err)
208
+	}
209
+
210
+	logDone("events - redirect stdout")
211
+}
... ...
@@ -19,6 +19,7 @@ import (
19 19
 
20 20
 	"github.com/docker/docker/pkg/mount"
21 21
 	"github.com/docker/docker/pkg/networkfs/resolvconf"
22
+	"github.com/kr/pty"
22 23
 )
23 24
 
24 25
 // "test123" should be printed by docker run
... ...
@@ -2162,3 +2163,41 @@ func TestRunExecDir(t *testing.T) {
2162 2162
 
2163 2163
 	logDone("run - check execdriver dir behavior")
2164 2164
 }
2165
+
2166
+// #6509
2167
+func TestRunRedirectStdout(t *testing.T) {
2168
+
2169
+	defer deleteAllContainers()
2170
+
2171
+	checkRedirect := func(command string) {
2172
+		_, tty, err := pty.Open()
2173
+		if err != nil {
2174
+			t.Fatalf("Could not open pty: %v", err)
2175
+		}
2176
+		cmd := exec.Command("sh", "-c", command)
2177
+		cmd.Stdin = tty
2178
+		cmd.Stdout = tty
2179
+		cmd.Stderr = tty
2180
+		ch := make(chan struct{})
2181
+		if err := cmd.Start(); err != nil {
2182
+			t.Fatalf("start err: %v", err)
2183
+		}
2184
+		go func() {
2185
+			if err := cmd.Wait(); err != nil {
2186
+				t.Fatalf("wait err=%v", err)
2187
+			}
2188
+			close(ch)
2189
+		}()
2190
+
2191
+		select {
2192
+		case <-time.After(time.Second):
2193
+			t.Fatal("command timeout")
2194
+		case <-ch:
2195
+		}
2196
+	}
2197
+
2198
+	checkRedirect(dockerBinary + " run -i busybox cat /etc/passwd | grep -q root")
2199
+	checkRedirect(dockerBinary + " run busybox cat /etc/passwd | grep -q root")
2200
+
2201
+	logDone("run - redirect stdout")
2202
+}