(t *testing.T, drop bool, statsChan chan *lbpb.ClientStats, runRPCs func(*grpc.ClientConn), statsWant *rpcStats)
| 1394 | } |
| 1395 | |
| 1396 | func runAndCheckStats(t *testing.T, drop bool, statsChan chan *lbpb.ClientStats, runRPCs func(*grpc.ClientConn), statsWant *rpcStats) error { |
| 1397 | r := manual.NewBuilderWithScheme("whatever") |
| 1398 | |
| 1399 | tss, cleanup, err := startBackendsAndRemoteLoadBalancer(t, 1, "", statsChan) |
| 1400 | if err != nil { |
| 1401 | t.Fatalf("failed to create new load balancer: %v", err) |
| 1402 | } |
| 1403 | defer cleanup() |
| 1404 | servers := []*lbpb.Server{{ |
| 1405 | IpAddress: tss.beIPs[0].AsSlice(), |
| 1406 | Port: int32(tss.bePorts[0]), |
| 1407 | LoadBalanceToken: lbToken, |
| 1408 | }} |
| 1409 | if drop { |
| 1410 | servers = append(servers, &lbpb.Server{ |
| 1411 | LoadBalanceToken: lbToken, |
| 1412 | Drop: drop, |
| 1413 | }) |
| 1414 | } |
| 1415 | tss.ls.sls <- &lbpb.ServerList{Servers: servers} |
| 1416 | tss.ls.statsDura = 100 * time.Millisecond |
| 1417 | creds := serverNameCheckCreds{} |
| 1418 | |
| 1419 | cc, err := grpc.NewClient(r.Scheme()+":///"+beServerName, grpc.WithResolvers(r), |
| 1420 | grpc.WithTransportCredentials(&creds), |
| 1421 | grpc.WithPerRPCCredentials(failPreRPCCred{}), |
| 1422 | grpc.WithContextDialer(fakeNameDialer)) |
| 1423 | if err != nil { |
| 1424 | t.Fatalf("Failed to create a client for the backend %v", err) |
| 1425 | } |
| 1426 | cc.Connect() |
| 1427 | defer cc.Close() |
| 1428 | |
| 1429 | rstate := resolver.State{ServiceConfig: r.CC().ParseServiceConfig(grpclbConfig)} |
| 1430 | r.UpdateState(grpclbstate.Set(rstate, &grpclbstate.State{BalancerAddresses: []resolver.Address{{ |
| 1431 | Addr: tss.lbAddr, |
| 1432 | ServerName: lbServerName, |
| 1433 | }}})) |
| 1434 | |
| 1435 | runRPCs(cc) |
| 1436 | end := time.Now().Add(time.Second) |
| 1437 | for time.Now().Before(end) { |
| 1438 | if err := checkStats(tss.ls.stats, statsWant); err == nil { |
| 1439 | time.Sleep(200 * time.Millisecond) // sleep for two intervals to make sure no new stats are reported. |
| 1440 | break |
| 1441 | } |
| 1442 | } |
| 1443 | return checkStats(tss.ls.stats, statsWant) |
| 1444 | } |
| 1445 | |
| 1446 | const ( |
| 1447 | countRPC = 40 |
no test coverage detected