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

Method TestNewClientWithMultipleBackendsNotSendingServerPreface

clientconn_test.go:68–123  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

66}
67
68func (s) TestNewClientWithMultipleBackendsNotSendingServerPreface(t *testing.T) {
69 lis1, err := net.Listen("tcp", "localhost:0")
70 if err != nil {
71 t.Fatalf("Error while listening. Err: %v", err)
72 }
73 defer lis1.Close()
74 lis1Addr := resolver.Address{Addr: lis1.Addr().String()}
75 lis1Done := make(chan struct{})
76 // 1st listener accepts the connection and immediately closes it.
77 go func() {
78 defer close(lis1Done)
79 conn, err := lis1.Accept()
80 if err != nil {
81 t.Errorf("Error while accepting. Err: %v", err)
82 return
83 }
84 conn.Close()
85 }()
86
87 lis2, err := net.Listen("tcp", "localhost:0")
88 if err != nil {
89 t.Fatalf("Error while listening. Err: %v", err)
90 }
91 defer lis2.Close()
92 lis2Done := make(chan struct{})
93 lis2Addr := resolver.Address{Addr: lis2.Addr().String()}
94 // 2nd listener should get a connection attempt since the first one failed.
95 go func() {
96 defer close(lis2Done)
97 _, err := lis2.Accept() // Closing the client will clean up this conn.
98 if err != nil {
99 t.Errorf("Error while accepting. Err: %v", err)
100 return
101 }
102 }()
103
104 r := manual.NewBuilderWithScheme("whatever")
105 r.InitialState(resolver.State{Addresses: []resolver.Address{lis1Addr, lis2Addr}})
106 client, err := NewClient(r.Scheme()+":///test.server", WithTransportCredentials(insecure.NewCredentials()), WithResolvers(r))
107 if err != nil {
108 t.Fatalf("grpc.NewClient() failed: %v", err)
109 }
110 client.Connect()
111 defer client.Close()
112 timeout := time.After(5 * time.Second)
113 select {
114 case <-timeout:
115 t.Fatal("timed out waiting for server 1 to finish")
116 case <-lis1Done:
117 }
118 select {
119 case <-timeout:
120 t.Fatal("timed out waiting for server 2 to finish")
121 case <-lis2Done:
122 }
123}
124
125// 1. Client connects to a server that doesn't send preface.

Callers

nothing calls this directly

Calls 15

NewBuilderWithSchemeFunction · 0.92
NewCredentialsFunction · 0.92
WithTransportCredentialsFunction · 0.85
WithResolversFunction · 0.85
InitialStateMethod · 0.80
NewClientFunction · 0.70
FatalfMethod · 0.65
CloseMethod · 0.65
StringMethod · 0.65
ErrorfMethod · 0.65
SchemeMethod · 0.65
ConnectMethod · 0.65

Tested by

no test coverage detected