From 429165cba765a3d6e4491fa31df3daf6b75718b3 Mon Sep 17 00:00:00 2001 From: Abhishek Ranjan Date: Fri, 10 May 2024 16:14:57 +0530 Subject: [PATCH 1/3] fix: Flaky test ClientSendsAGoAway --- test/goaway_test.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/goaway_test.go b/test/goaway_test.go index 61936008f0e5..2e193f4c52f4 100644 --- a/test/goaway_test.go +++ b/test/goaway_test.go @@ -800,6 +800,7 @@ func (s) TestClientSendsAGoAway(t *testing.T) { for { f, err := ct.fr.ReadFrame() if err != nil { + t.Logf("error reading frame: %v", err) return } switch fr := f.(type) { @@ -808,6 +809,7 @@ func (s) TestClientSendsAGoAway(t *testing.T) { if fr.ErrCode == http2.ErrCodeNo { t.Logf("GoAway received from client") close(goAwayReceived) + return } default: t.Errorf("server tester received unexpected frame type %T", f) @@ -816,6 +818,7 @@ func (s) TestClientSendsAGoAway(t *testing.T) { } } }() + cc.WaitForStateChange(ctx, connectivity.Connecting) cc.Close() defer ct.conn.Close() select { From 5740160c2a2ef3c7a2aa8c4b83ccdddf362b4d9b Mon Sep 17 00:00:00 2001 From: Abhishek Ranjan Date: Tue, 14 May 2024 13:11:43 +0530 Subject: [PATCH 2/3] resolve comments --- test/goaway_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/goaway_test.go b/test/goaway_test.go index 2e193f4c52f4..5bf3462310bd 100644 --- a/test/goaway_test.go +++ b/test/goaway_test.go @@ -800,7 +800,7 @@ func (s) TestClientSendsAGoAway(t *testing.T) { for { f, err := ct.fr.ReadFrame() if err != nil { - t.Logf("error reading frame: %v", err) + errCh <- fmt.Errorf("error reading frame: %v", err) return } switch fr := f.(type) { From 95b4c7f2595568f2fd80beaeff8968a048399b18 Mon Sep 17 00:00:00 2001 From: Abhishek Ranjan Date: Tue, 14 May 2024 13:21:52 +0530 Subject: [PATCH 3/3] refactor --- test/goaway_test.go | 38 +++++++++++++++----------------------- 1 file changed, 15 insertions(+), 23 deletions(-) diff --git a/test/goaway_test.go b/test/goaway_test.go index 5bf3462310bd..61446c1f7583 100644 --- a/test/goaway_test.go +++ b/test/goaway_test.go @@ -770,33 +770,16 @@ func (s) TestClientSendsAGoAway(t *testing.T) { if err != nil { t.Fatalf("error listening: %v", err) } - ctCh := testutils.NewChannel() + defer lis.Close() + goAwayReceived := make(chan struct{}) + errCh := make(chan error) go func() { conn, err := lis.Accept() if err != nil { t.Errorf("error in lis.Accept(): %v", err) } ct := newClientTester(t, conn) - ctCh.Send(ct) - }() - defer lis.Close() - - cc, err := grpc.Dial(lis.Addr().String(), grpc.WithTransportCredentials(insecure.NewCredentials())) - if err != nil { - t.Fatalf("error dialing: %v", err) - } - - ctx, cancel := context.WithTimeout(context.Background(), defaultTestTimeout) - defer cancel() - - val, err := ctCh.Receive(ctx) - if err != nil { - t.Fatalf("timeout waiting for client transport (should be given after http2 creation)") - } - ct := val.(*clientTester) - goAwayReceived := make(chan struct{}) - errCh := make(chan error) - go func() { + defer ct.conn.Close() for { f, err := ct.fr.ReadFrame() if err != nil { @@ -818,9 +801,18 @@ func (s) TestClientSendsAGoAway(t *testing.T) { } } }() - cc.WaitForStateChange(ctx, connectivity.Connecting) + + cc, err := grpc.NewClient(lis.Addr().String(), grpc.WithTransportCredentials(insecure.NewCredentials())) + if err != nil { + t.Fatalf("error dialing: %v", err) + } + cc.Connect() + + ctx, cancel := context.WithTimeout(context.Background(), defaultTestTimeout) + defer cancel() + + testutils.AwaitState(ctx, t, cc, connectivity.Ready) cc.Close() - defer ct.conn.Close() select { case <-goAwayReceived: case err := <-errCh: