Skip to content

Commit a639c40

Browse files
authored
test: fix flaky test ClientSendsAGoAway (#7224)
1 parent c822adf commit a639c40

File tree

1 file changed

+17
-22
lines changed

1 file changed

+17
-22
lines changed

test/goaway_test.go

Lines changed: 17 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -770,36 +770,20 @@ func (s) TestClientSendsAGoAway(t *testing.T) {
770770
if err != nil {
771771
t.Fatalf("error listening: %v", err)
772772
}
773-
ctCh := testutils.NewChannel()
773+
defer lis.Close()
774+
goAwayReceived := make(chan struct{})
775+
errCh := make(chan error)
774776
go func() {
775777
conn, err := lis.Accept()
776778
if err != nil {
777779
t.Errorf("error in lis.Accept(): %v", err)
778780
}
779781
ct := newClientTester(t, conn)
780-
ctCh.Send(ct)
781-
}()
782-
defer lis.Close()
783-
784-
cc, err := grpc.Dial(lis.Addr().String(), grpc.WithTransportCredentials(insecure.NewCredentials()))
785-
if err != nil {
786-
t.Fatalf("error dialing: %v", err)
787-
}
788-
789-
ctx, cancel := context.WithTimeout(context.Background(), defaultTestTimeout)
790-
defer cancel()
791-
792-
val, err := ctCh.Receive(ctx)
793-
if err != nil {
794-
t.Fatalf("timeout waiting for client transport (should be given after http2 creation)")
795-
}
796-
ct := val.(*clientTester)
797-
goAwayReceived := make(chan struct{})
798-
errCh := make(chan error)
799-
go func() {
782+
defer ct.conn.Close()
800783
for {
801784
f, err := ct.fr.ReadFrame()
802785
if err != nil {
786+
errCh <- fmt.Errorf("error reading frame: %v", err)
803787
return
804788
}
805789
switch fr := f.(type) {
@@ -808,6 +792,7 @@ func (s) TestClientSendsAGoAway(t *testing.T) {
808792
if fr.ErrCode == http2.ErrCodeNo {
809793
t.Logf("GoAway received from client")
810794
close(goAwayReceived)
795+
return
811796
}
812797
default:
813798
t.Errorf("server tester received unexpected frame type %T", f)
@@ -816,8 +801,18 @@ func (s) TestClientSendsAGoAway(t *testing.T) {
816801
}
817802
}
818803
}()
804+
805+
cc, err := grpc.NewClient(lis.Addr().String(), grpc.WithTransportCredentials(insecure.NewCredentials()))
806+
if err != nil {
807+
t.Fatalf("error dialing: %v", err)
808+
}
809+
cc.Connect()
810+
811+
ctx, cancel := context.WithTimeout(context.Background(), defaultTestTimeout)
812+
defer cancel()
813+
814+
testutils.AwaitState(ctx, t, cc, connectivity.Ready)
819815
cc.Close()
820-
defer ct.conn.Close()
821816
select {
822817
case <-goAwayReceived:
823818
case err := <-errCh:

0 commit comments

Comments
 (0)