(t *testing.T, svcfg string)
| 1217 | } |
| 1218 | |
| 1219 | func 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...") |
no test coverage detected