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

Function testGRPCLBEmptyServerList

balancer/grpclb/grpclb_test.go:1219–1281  ·  view source on GitHub ↗
(t *testing.T, svcfg string)

Source from the content-addressed store, hash-verified

1217}
1218
1219func testGRPCLBEmptyServerList(t *testing.T, svcfg string) {
1220 tss, cleanup, err := startBackendsAndRemoteLoadBalancer(t, 1, "", nil)
1221 if err != nil {
1222 t.Fatalf("failed to create new load balancer: %v", err)
1223 }
1224 defer cleanup()
1225
1226 beServers := []*lbpb.Server{{
1227 IpAddress: tss.beIPs[0].AsSlice(),
1228 Port: int32(tss.bePorts[0]),
1229 LoadBalanceToken: lbToken,
1230 }}
1231
1232 ctx, cancel := context.WithTimeout(context.Background(), defaultTestTimeout)
1233 defer cancel()
1234 r := manual.NewBuilderWithScheme("whatever")
1235 dopts := []grpc.DialOption{
1236 grpc.WithResolvers(r),
1237 grpc.WithTransportCredentials(&serverNameCheckCreds{}),
1238 grpc.WithContextDialer(fakeNameDialer),
1239 }
1240 cc, err := grpc.NewClient(r.Scheme()+":///"+beServerName, dopts...)
1241 if err != nil {
1242 t.Fatalf("Failed to create a client for the backend %v", err)
1243 }
1244 cc.Connect()
1245 defer cc.Close()
1246 testC := testgrpc.NewTestServiceClient(cc)
1247
1248 tss.ls.sls <- &lbpb.ServerList{Servers: beServers}
1249
1250 s := &grpclbstate.State{
1251 BalancerAddresses: []resolver.Address{
1252 {
1253 Addr: tss.lbAddr,
1254 ServerName: lbServerName,
1255 },
1256 },
1257 }
1258 rs := grpclbstate.Set(resolver.State{ServiceConfig: r.CC().ParseServiceConfig(svcfg)}, s)
1259 r.UpdateState(rs)
1260 t.Log("Perform an initial RPC and expect it to succeed...")
1261 if _, err := testC.EmptyCall(ctx, &testpb.Empty{}, grpc.WaitForReady(true)); err != nil {
1262 t.Fatalf("Initial _.EmptyCall(_, _) = _, %v, want _, <nil>", err)
1263 }
1264 t.Log("Now send an empty server list. Wait until we see an RPC failure to make sure the client got it...")
1265 tss.ls.sls <- &lbpb.ServerList{}
1266 gotError := false
1267 for ; ctx.Err() == nil; <-time.After(time.Millisecond) {
1268 if _, err := testC.EmptyCall(ctx, &testpb.Empty{}); err != nil {
1269 gotError = true
1270 break
1271 }
1272 }
1273 if !gotError {
1274 t.Fatalf("Expected to eventually see an RPC fail after the grpclb sends an empty server list, but none did.")
1275 }
1276 t.Log("Now send a non-empty server list. A wait-for-ready RPC should now succeed...")

Calls 15

EmptyCallMethod · 0.95
NewBuilderWithSchemeFunction · 0.92
WithResolversFunction · 0.92
WithTransportCredentialsFunction · 0.92
WithContextDialerFunction · 0.92
NewClientFunction · 0.92
WaitForReadyFunction · 0.92
CCMethod · 0.80
ErrMethod · 0.80
FatalfMethod · 0.65
SchemeMethod · 0.65

Tested by

no test coverage detected