Explorar o código

Testing half close

Armon Dadgar %!s(int64=10) %!d(string=hai) anos
pai
achega
8b93e09332
Modificáronse 1 ficheiros con 53 adicións e 0 borrados
  1. 53 0
      session_test.go

+ 53 - 0
session_test.go

@@ -434,3 +434,56 @@ func TestManyStreams_PingPong(t *testing.T) {
 
 	wg.Wait()
 }
+
+func TestHalfClose(t *testing.T) {
+	client, server := testClientServer()
+	defer client.Close()
+	defer server.Close()
+
+	stream, err := client.Open()
+	if err != nil {
+		t.Fatalf("err: %v", err)
+	}
+	if _, err := stream.Write([]byte("a")); err != nil {
+		t.Fatalf("err: %v", err)
+	}
+
+	stream2, err := server.Accept()
+	if err != nil {
+		t.Fatalf("err: %v", err)
+	}
+	stream2.Close() // Half close
+
+	buf := make([]byte, 4)
+	n, err := stream2.Read(buf)
+	if err != nil {
+		t.Fatalf("err: %v", err)
+	}
+	if n != 1 {
+		t.Fatalf("bad: %v", n)
+	}
+
+	// Send more
+	if _, err := stream.Write([]byte("bcd")); err != nil {
+		t.Fatalf("err: %v", err)
+	}
+	stream.Close()
+
+	// Read after close
+	n, err = stream2.Read(buf)
+	if err != nil {
+		t.Fatalf("err: %v", err)
+	}
+	if n != 3 {
+		t.Fatalf("bad: %v", n)
+	}
+
+	// EOF after close
+	n, err = stream2.Read(buf)
+	if err != io.EOF {
+		t.Fatalf("err: %v", err)
+	}
+	if n != 0 {
+		t.Fatalf("bad: %v", n)
+	}
+}