MCPcopy
hub / github.com/grpc/grpc-go / TestGoAwayThenClose

Method TestGoAwayThenClose

test/goaway_test.go:542–652  ·  view source on GitHub ↗

Proxies typically send GO_AWAY followed by connection closure a minute or so later. This test ensures that the connection is re-created after GO_AWAY and not affected by the subsequent (old) connection closure.

(t *testing.T)

Source from the content-addressed store, hash-verified

540// test ensures that the connection is re-created after GO_AWAY and not affected by the
541// subsequent (old) connection closure.
542func (s) TestGoAwayThenClose(t *testing.T) {
543 ctx, cancel := context.WithTimeout(context.Background(), defaultTestTimeout)
544 defer cancel()
545
546 lis1, err := testutils.LocalTCPListener()
547 if err != nil {
548 t.Fatalf("Error while listening. Err: %v", err)
549 }
550
551 unaryCallF := func(context.Context, *testpb.SimpleRequest) (*testpb.SimpleResponse, error) {
552 return &testpb.SimpleResponse{}, nil
553 }
554 fullDuplexCallF := func(stream testgrpc.TestService_FullDuplexCallServer) error {
555 if err := stream.Send(&testpb.StreamingOutputCallResponse{}); err != nil {
556 t.Errorf("Unexpected error from send: %v", err)
557 return err
558 }
559 // Wait until a message is received from client
560 _, err := stream.Recv()
561 if err == nil {
562 t.Error("Expected to never receive any message")
563 }
564 return err
565 }
566 ss1 := &stubserver.StubServer{
567 Listener: lis1,
568 UnaryCallF: unaryCallF,
569 FullDuplexCallF: fullDuplexCallF,
570 S: grpc.NewServer(),
571 }
572 stubserver.StartTestService(t, ss1)
573 defer ss1.S.Stop()
574
575 conn2Established := grpcsync.NewEvent()
576 lis2, err := listenWithNotifyingListener("tcp", "localhost:0", conn2Established)
577 if err != nil {
578 t.Fatalf("Error while listening. Err: %v", err)
579 }
580 ss2 := &stubserver.StubServer{
581 Listener: lis2,
582 UnaryCallF: unaryCallF,
583 FullDuplexCallF: fullDuplexCallF,
584 S: grpc.NewServer(),
585 }
586 stubserver.StartTestService(t, ss2)
587 defer ss2.S.Stop()
588
589 r := manual.NewBuilderWithScheme("whatever")
590 r.InitialState(resolver.State{Addresses: []resolver.Address{
591 {Addr: lis1.Addr().String()},
592 {Addr: lis2.Addr().String()},
593 }})
594 cc, err := grpc.NewClient(r.Scheme()+":///", grpc.WithResolvers(r), grpc.WithTransportCredentials(insecure.NewCredentials()))
595 if err != nil {
596 t.Fatalf("Error creating client: %v", err)
597 }
598 defer cc.Close()
599

Callers

nothing calls this directly

Calls 15

FullDuplexCallMethod · 0.95
UnaryCallMethod · 0.95
DoneMethod · 0.95
LocalTCPListenerFunction · 0.92
NewServerFunction · 0.92
StartTestServiceFunction · 0.92
NewEventFunction · 0.92
NewBuilderWithSchemeFunction · 0.92
NewClientFunction · 0.92
WithResolversFunction · 0.92
WithTransportCredentialsFunction · 0.92
NewCredentialsFunction · 0.92

Tested by

no test coverage detected