]> git.feebdaed.xyz Git - 0xmirror/grpc-go.git/commitdiff
transport: Ensure stream context is cancelled in test (#8647)
authorArjan Singh Bal <46515553+arjan-bal@users.noreply.github.com>
Tue, 14 Oct 2025 17:41:15 +0000 (23:11 +0530)
committerGitHub <noreply@github.com>
Tue, 14 Oct 2025 17:41:15 +0000 (23:11 +0530)
Fixes: #8646
The server stream's timer to monitor the deadline is closed when the
stream's cancel method is invoked.

https://github.com/grpc/grpc-go/blob/2d922719c02bb46f34482d592c35e72dc4a9ad92/internal/transport/http2_server.go#L623-L637

The cancel method is called when `closeStream` is called, just before it
calls `deleteStream`.

https://github.com/grpc/grpc-go/blob/2d922719c02bb46f34482d592c35e72dc4a9ad92/internal/transport/http2_server.go#L1347-L1357

The cancel method is not called in
[`deleteStream`](https://github.com/grpc/grpc-go/blob/2d922719c02bb46f34482d592c35e72dc4a9ad92/internal/transport/http2_server.go#L1302).

This change invokes `deleteStream` through `closeStream` in the flaking
test to ensure the stream is always cancelled to avoid leaking timers.

RELEASE NOTES: N/A

internal/transport/transport_test.go

index d704ab8fa0a714880976a84286543282f9da38ec..7fc5fa0791b375bcffac2ac4000e8a9193fde4b4 100644 (file)
@@ -3360,6 +3360,8 @@ func (s) TestClientTransport_Handle1xxHeaders(t *testing.T) {
 }
 
 func (s) TestDeleteStreamMetricsIncrementedOnlyOnce(t *testing.T) {
+       ctx, cancel := context.WithTimeout(context.Background(), defaultTestTimeout)
+       defer cancel()
        // Enable channelz for metrics collection
        defer internal.ChannelzTurnOffForTesting()
        if !channelz.IsOn() {
@@ -3386,9 +3388,6 @@ func (s) TestDeleteStreamMetricsIncrementedOnlyOnce(t *testing.T) {
                },
        } {
                t.Run(test.name, func(t *testing.T) {
-                       ctx, cancel := context.WithTimeout(context.Background(), defaultTestTimeout)
-                       defer cancel()
-
                        // Setup server configuration with channelz support
                        serverConfig := &ServerConfig{
                                ChannelzParent: channelz.RegisterServer(t.Name()),
@@ -3449,8 +3448,10 @@ func (s) TestDeleteStreamMetricsIncrementedOnlyOnce(t *testing.T) {
                                t.Fatalf("Server stream not found for client stream ID %d", clientStream.id)
                        }
 
-                       // First call to deleteStream should remove the stream from activeStreams and update metrics
-                       serverTransport.deleteStream(serverStream, test.eosReceived)
+                       // First call to closeStream should remove the stream from
+                       // the activeStreams and update metrics. closeStream will also
+                       // cancel the stream, stopping the deadline timer.
+                       serverTransport.closeStream(serverStream, false, 0, test.eosReceived)
 
                        // Check metrics after first deleteStream call
                        streamsSucceeded := serverTransport.channelz.SocketMetrics.StreamsSucceeded.Load()