Browse code

fix flaky test TestImportFileWithMessage

Signed-off-by: Shijiang Wei <mountkin@gmail.com>

Shijiang Wei authored on 2016/05/27 17:06:15
Showing 2 changed files
... ...
@@ -48,13 +48,18 @@ func (l *MalformedHostHeaderOverrideConn) Read(b []byte) (n int, err error) {
48 48
 			firstLineFeed = -1
49 49
 			buf           []byte
50 50
 		)
51
-		for i, bb := range b[:c] {
52
-			if bb == '\n' && firstLineFeed == -1 {
51
+		for i := 0; i <= c-1-7; i++ {
52
+			if b[i] == '\n' && firstLineFeed == -1 {
53 53
 				firstLineFeed = i
54 54
 			}
55
-			if bb != '\n' {
55
+			if b[i] != '\n' {
56 56
 				continue
57 57
 			}
58
+
59
+			if b[i+1] == '\r' && b[i+2] == '\n' {
60
+				return c, nil
61
+			}
62
+
58 63
 			if b[i+1] != 'H' {
59 64
 				continue
60 65
 			}
... ...
@@ -10,8 +10,16 @@ import (
10 10
 	"testing"
11 11
 )
12 12
 
13
+type bufConn struct {
14
+	net.Conn
15
+	buf *bytes.Buffer
16
+}
17
+
18
+func (bc *bufConn) Read(b []byte) (int, error) {
19
+	return bc.buf.Read(b)
20
+}
21
+
13 22
 func TestHeaderOverrideHack(t *testing.T) {
14
-	client, srv := net.Pipe()
15 23
 	tests := [][2][]byte{
16 24
 		{
17 25
 			[]byte("GET /foo\nHost: /var/run/docker.sock\nUser-Agent: Docker\r\n\r\n"),
... ...
@@ -34,13 +42,19 @@ func TestHeaderOverrideHack(t *testing.T) {
34 34
 			[]byte("GET /foo\nFoo: Bar\nHost: /var/run/docker.sock\nUser-Agent: Docker\r\n\r\n"),
35 35
 		},
36 36
 	}
37
-	l := MalformedHostHeaderOverrideConn{client, true}
38
-	read := make([]byte, 4096)
37
+
38
+	// Test for https://github.com/docker/docker/issues/23045
39
+	h0 := "GET /foo\nUser-Agent: Docker\r\n\r\n"
40
+	h0 = h0 + strings.Repeat("a", 4096-len(h0)-1) + "\n"
41
+	tests = append(tests, [2][]byte{[]byte(h0), []byte(h0)})
39 42
 
40 43
 	for _, pair := range tests {
41
-		go func(x []byte) {
42
-			srv.Write(x)
43
-		}(pair[0])
44
+		read := make([]byte, 4096)
45
+		client := &bufConn{
46
+			buf: bytes.NewBuffer(pair[0]),
47
+		}
48
+		l := MalformedHostHeaderOverrideConn{client, true}
49
+
44 50
 		n, err := l.Read(read)
45 51
 		if err != nil && err != io.EOF {
46 52
 			t.Fatalf("read: %d - %d, err: %v\n%s", n, len(pair[0]), err, string(read[:n]))
... ...
@@ -48,12 +62,7 @@ func TestHeaderOverrideHack(t *testing.T) {
48 48
 		if !bytes.Equal(read[:n], pair[1][:n]) {
49 49
 			t.Fatalf("\n%s\n%s\n", read[:n], pair[1][:n])
50 50
 		}
51
-		l.first = true
52
-		// clean out the slice
53
-		read = read[:0]
54 51
 	}
55
-	srv.Close()
56
-	l.Close()
57 52
 }
58 53
 
59 54
 func BenchmarkWithHack(b *testing.B) {