@@ -143,6 +143,58 @@ func (s) TestResolverAddressesToEndpoints(t *testing.T) {
143143 }
144144}
145145
146+ // Test ensures one Endpoint is created for each entry in
147+ // resolver.State.Addresses automatically. The test calls the deprecated
148+ // NewAddresses API to send a list of addresses to the channel.
149+ func (s ) TestResolverAddressesToEndpointsUsingNewAddresses (t * testing.T ) {
150+ ctx , cancel := context .WithTimeout (context .Background (), defaultTestTimeout )
151+ defer cancel ()
152+
153+ const scheme = "testresolveraddressestoendpoints"
154+ r := manual .NewBuilderWithScheme (scheme )
155+
156+ stateCh := make (chan balancer.ClientConnState , 1 )
157+ bf := stub.BalancerFuncs {
158+ UpdateClientConnState : func (_ * stub.BalancerData , ccs balancer.ClientConnState ) error {
159+ stateCh <- ccs
160+ return nil
161+ },
162+ }
163+ balancerName := "stub-balancer-" + scheme
164+ stub .Register (balancerName , bf )
165+
166+ a1 := attributes .New ("x" , "y" )
167+ a2 := attributes .New ("a" , "b" )
168+ addrs := []resolver.Address {
169+ {Addr : "addr1" , BalancerAttributes : a1 },
170+ {Addr : "addr2" , BalancerAttributes : a2 },
171+ }
172+
173+ cc , err := NewClient (r .Scheme ()+ ":///" ,
174+ WithTransportCredentials (insecure .NewCredentials ()),
175+ WithResolvers (r ),
176+ WithDefaultServiceConfig (fmt .Sprintf (`{"loadBalancingConfig": [{"%s":{}}]}` , balancerName )))
177+ if err != nil {
178+ t .Fatalf ("grpc.NewClient() failed: %v" , err )
179+ }
180+ cc .Connect ()
181+ defer cc .Close ()
182+ r .CC .NewAddress (addrs )
183+
184+ select {
185+ case got := <- stateCh :
186+ want := []resolver.Endpoint {
187+ {Addresses : []resolver.Address {{Addr : "addr1" }}, Attributes : a1 },
188+ {Addresses : []resolver.Address {{Addr : "addr2" }}, Attributes : a2 },
189+ }
190+ if diff := cmp .Diff (got .ResolverState .Endpoints , want ); diff != "" {
191+ t .Errorf ("Did not receive expected endpoints. Diff (-got +want):\n %v" , diff )
192+ }
193+ case <- ctx .Done ():
194+ t .Fatalf ("timed out waiting for endpoints" )
195+ }
196+ }
197+
146198// Test ensures that there is no panic if the attributes within
147199// resolver.State.Addresses contains a typed-nil value.
148200func (s ) TestResolverAddressesWithTypedNilAttribute (t * testing.T ) {
0 commit comments