@@ -143,6 +143,58 @@ func (s) TestResolverAddressesToEndpoints(t *testing.T) {
143
143
}
144
144
}
145
145
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
+
146
198
// Test ensures that there is no panic if the attributes within
147
199
// resolver.State.Addresses contains a typed-nil value.
148
200
func (s ) TestResolverAddressesWithTypedNilAttribute (t * testing.T ) {
0 commit comments