Forráskód Böngészése

fix flaky test TestImportFileWithMessage

Signed-off-by: Shijiang Wei <mountkin@gmail.com>
Shijiang Wei 9 éve
szülő
commit
9d6989bbb6

+ 8 - 3
cmd/dockerd/hack/malformed_host_override.go

@@ -48,13 +48,18 @@ func (l *MalformedHostHeaderOverrideConn) Read(b []byte) (n int, err error) {
 			firstLineFeed = -1
 			firstLineFeed = -1
 			buf           []byte
 			buf           []byte
 		)
 		)
-		for i, bb := range b[:c] {
-			if bb == '\n' && firstLineFeed == -1 {
+		for i := 0; i <= c-1-7; i++ {
+			if b[i] == '\n' && firstLineFeed == -1 {
 				firstLineFeed = i
 				firstLineFeed = i
 			}
 			}
-			if bb != '\n' {
+			if b[i] != '\n' {
 				continue
 				continue
 			}
 			}
+
+			if b[i+1] == '\r' && b[i+2] == '\n' {
+				return c, nil
+			}
+
 			if b[i+1] != 'H' {
 			if b[i+1] != 'H' {
 				continue
 				continue
 			}
 			}

+ 20 - 11
cmd/dockerd/hack/malformed_host_override_test.go

@@ -10,8 +10,16 @@ import (
 	"testing"
 	"testing"
 )
 )
 
 
+type bufConn struct {
+	net.Conn
+	buf *bytes.Buffer
+}
+
+func (bc *bufConn) Read(b []byte) (int, error) {
+	return bc.buf.Read(b)
+}
+
 func TestHeaderOverrideHack(t *testing.T) {
 func TestHeaderOverrideHack(t *testing.T) {
-	client, srv := net.Pipe()
 	tests := [][2][]byte{
 	tests := [][2][]byte{
 		{
 		{
 			[]byte("GET /foo\nHost: /var/run/docker.sock\nUser-Agent: Docker\r\n\r\n"),
 			[]byte("GET /foo\nHost: /var/run/docker.sock\nUser-Agent: Docker\r\n\r\n"),
@@ -34,13 +42,19 @@ func TestHeaderOverrideHack(t *testing.T) {
 			[]byte("GET /foo\nFoo: Bar\nHost: /var/run/docker.sock\nUser-Agent: Docker\r\n\r\n"),
 			[]byte("GET /foo\nFoo: Bar\nHost: /var/run/docker.sock\nUser-Agent: Docker\r\n\r\n"),
 		},
 		},
 	}
 	}
-	l := MalformedHostHeaderOverrideConn{client, true}
-	read := make([]byte, 4096)
+
+	// Test for https://github.com/docker/docker/issues/23045
+	h0 := "GET /foo\nUser-Agent: Docker\r\n\r\n"
+	h0 = h0 + strings.Repeat("a", 4096-len(h0)-1) + "\n"
+	tests = append(tests, [2][]byte{[]byte(h0), []byte(h0)})
 
 
 	for _, pair := range tests {
 	for _, pair := range tests {
-		go func(x []byte) {
-			srv.Write(x)
-		}(pair[0])
+		read := make([]byte, 4096)
+		client := &bufConn{
+			buf: bytes.NewBuffer(pair[0]),
+		}
+		l := MalformedHostHeaderOverrideConn{client, true}
+
 		n, err := l.Read(read)
 		n, err := l.Read(read)
 		if err != nil && err != io.EOF {
 		if err != nil && err != io.EOF {
 			t.Fatalf("read: %d - %d, err: %v\n%s", n, len(pair[0]), err, string(read[:n]))
 			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) {
 		if !bytes.Equal(read[:n], pair[1][:n]) {
 		if !bytes.Equal(read[:n], pair[1][:n]) {
 			t.Fatalf("\n%s\n%s\n", read[:n], pair[1][:n])
 			t.Fatalf("\n%s\n%s\n", read[:n], pair[1][:n])
 		}
 		}
-		l.first = true
-		// clean out the slice
-		read = read[:0]
 	}
 	}
-	srv.Close()
-	l.Close()
 }
 }
 
 
 func BenchmarkWithHack(b *testing.B) {
 func BenchmarkWithHack(b *testing.B) {