Created
August 2, 2024 23:30
-
-
Save schmichael/eae76f127aa31475fde152a47ef4a38b to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// TestRead_Interrupted asserts that blocked reads without a deadline are | |
// interrupted when a session is closed. | |
func TestRead_Interrupted(t *testing.T) { | |
client, server := testClientServer() | |
defer client.Close() | |
defer server.Close() | |
stream, err := client.Open() | |
if err != nil { | |
t.Fatalf("unexpected error opening a new stream: %v", err) | |
} | |
defer stream.Close() | |
stream2, err := server.Accept() | |
if err != nil { | |
t.Fatalf("unexpected error accepting a new connection: %v", err) | |
} | |
defer stream2.Close() | |
errCh := make(chan error, 1) | |
go func() { | |
buf := make([]byte, 1) | |
_, err := stream.Read(buf) | |
errCh <- err | |
}() | |
// Let Read block | |
time.Sleep(100 * time.Millisecond) | |
// Close the server to interrupt the waiting Read | |
if err := server.Close(); err != nil { | |
t.Fatalf("unexpected error closing server: %v", err) | |
} | |
select { | |
case err := <-errCh: | |
if err == nil { | |
t.Fatalf("no error from waiting Read; expected EOF") | |
} | |
if !errors.Is(err, io.EOF) { | |
t.Fatalf("unexpected error from waiting Read; expected EOF but got: %v", err) | |
} | |
case <-time.After(10 * time.Second): | |
t.Fatalf("timed out waiting for blocked Read to unblock") | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment