TestResolverBalancerInteraction tests: 1. resolver.Builder.Build() -> 2. resolver.ClientConn.UpdateState() -> 3. balancer.Balancer.UpdateClientConnState() -> 4. balancer.ClientConn.ResolveNow() -> 5. resolver.Resolver.ResolveNow() ->
(t *testing.T)
| 51 | // 4. balancer.ClientConn.ResolveNow() -> |
| 52 | // 5. resolver.Resolver.ResolveNow() -> |
| 53 | func (s) TestResolverBalancerInteraction(t *testing.T) { |
| 54 | name := strings.ReplaceAll(strings.ToLower(t.Name()), "/", "") |
| 55 | bf := stub.BalancerFuncs{ |
| 56 | UpdateClientConnState: func(bd *stub.BalancerData, _ balancer.ClientConnState) error { |
| 57 | bd.ClientConn.ResolveNow(resolver.ResolveNowOptions{}) |
| 58 | return nil |
| 59 | }, |
| 60 | } |
| 61 | stub.Register(name, bf) |
| 62 | |
| 63 | rb := manual.NewBuilderWithScheme(name) |
| 64 | rb.BuildCallback = func(_ resolver.Target, cc resolver.ClientConn, _ resolver.BuildOptions) { |
| 65 | sc := cc.ParseServiceConfig(`{"loadBalancingConfig": [{"` + name + `":{}}]}`) |
| 66 | cc.UpdateState(resolver.State{ |
| 67 | Addresses: []resolver.Address{{Addr: "test"}}, |
| 68 | ServiceConfig: sc, |
| 69 | }) |
| 70 | } |
| 71 | rnCh := make(chan struct{}) |
| 72 | rb.ResolveNowCallback = func(resolver.ResolveNowOptions) { close(rnCh) } |
| 73 | resolver.Register(rb) |
| 74 | |
| 75 | cc, err := grpc.NewClient(name+":///", grpc.WithTransportCredentials(insecure.NewCredentials())) |
| 76 | if err != nil { |
| 77 | t.Fatalf("grpc.NewClient error: %v", err) |
| 78 | } |
| 79 | defer cc.Close() |
| 80 | cc.Connect() |
| 81 | select { |
| 82 | case <-rnCh: |
| 83 | case <-time.After(defaultTestTimeout): |
| 84 | t.Fatalf("timed out waiting for resolver.ResolveNow") |
| 85 | } |
| 86 | } |
| 87 | |
| 88 | type resolverBuilderWithErr struct { |
| 89 | resolver.Resolver |
nothing calls this directly
no test coverage detected