From fd5005db0af215dfe28e8784856a005de5a5fcc9 Mon Sep 17 00:00:00 2001 From: Andy Wang Date: Tue, 22 Dec 2020 20:16:47 +0000 Subject: [PATCH] Fix a timing sensitive test on reading data after actively closing a stream --- internal/multiplex/stream_test.go | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/internal/multiplex/stream_test.go b/internal/multiplex/stream_test.go index 6ce16d9..84e8982 100644 --- a/internal/multiplex/stream_test.go +++ b/internal/multiplex/stream_test.go @@ -151,6 +151,16 @@ func TestStream_Close(t *testing.T) { t.Error("failed to accept stream", err) return } + + // we read something to wait for the test frame to reach our recvBuffer. + // if it's empty by the point we call stream.Close(), the incoming + // frame will be dropped + readBuf := make([]byte, len(testPayload)) + _, err = io.ReadFull(stream, readBuf[:1]) + if err != nil { + t.Errorf("can't read any data before active closing") + } + err = stream.Close() if err != nil { t.Error("failed to actively close stream", err) @@ -162,8 +172,7 @@ func TestStream_Close(t *testing.T) { return } - readBuf := make([]byte, len(testPayload)) - _, err = io.ReadFull(stream, readBuf) + _, err = io.ReadFull(stream, readBuf[1:]) if err != nil { t.Errorf("can't read residual data %v", err) }