4949import io .grpc .LoadBalancer ;
5050import io .grpc .LoadBalancer .CreateSubchannelArgs ;
5151import io .grpc .LoadBalancer .Helper ;
52- import io .grpc .LoadBalancer .PickResult ;
5352import io .grpc .LoadBalancer .PickSubchannelArgs ;
5453import io .grpc .LoadBalancer .ResolvedAddresses ;
5554import io .grpc .LoadBalancer .Subchannel ;
@@ -148,8 +147,9 @@ public void tearDown() throws Exception {
148147 @ Test
149148 public void pickAfterResolved () throws Exception {
150149 final Subchannel readySubchannel = subchannels .values ().iterator ().next ();
151- loadBalancer .handleResolvedAddresses (
150+ boolean addressesAccepted = loadBalancer .acceptResolvedAddresses (
152151 ResolvedAddresses .newBuilder ().setAddresses (servers ).setAttributes (affinity ).build ());
152+ assertThat (addressesAccepted ).isTrue ();
153153 deliverSubchannelState (readySubchannel , ConnectivityStateInfo .forNonError (READY ));
154154
155155 verify (mockHelper , times (3 )).createSubchannel (createArgsCaptor .capture ());
@@ -199,9 +199,10 @@ public void pickAfterResolvedUpdatedHosts() throws Exception {
199199
200200 InOrder inOrder = inOrder (mockHelper );
201201
202- loadBalancer .handleResolvedAddresses (
202+ boolean addressesAccepted = loadBalancer .acceptResolvedAddresses (
203203 ResolvedAddresses .newBuilder ().setAddresses (currentServers ).setAttributes (affinity )
204204 .build ());
205+ assertThat (addressesAccepted ).isTrue ();
205206
206207 inOrder .verify (mockHelper ).updateBalancingState (eq (CONNECTING ), pickerCaptor .capture ());
207208
@@ -221,8 +222,9 @@ public void pickAfterResolvedUpdatedHosts() throws Exception {
221222 // This time with Attributes
222223 List <EquivalentAddressGroup > latestServers = Lists .newArrayList (oldEag2 , newEag );
223224
224- loadBalancer .handleResolvedAddresses (
225+ addressesAccepted = loadBalancer .acceptResolvedAddresses (
225226 ResolvedAddresses .newBuilder ().setAddresses (latestServers ).setAttributes (affinity ).build ());
227+ assertThat (addressesAccepted ).isTrue ();
226228
227229 verify (newSubchannel , times (1 )).requestConnection ();
228230 verify (oldSubchannel , times (1 )).updateAddresses (Arrays .asList (oldEag2 ));
@@ -240,25 +242,16 @@ public void pickAfterResolvedUpdatedHosts() throws Exception {
240242 picker = pickerCaptor .getValue ();
241243 assertThat (getList (picker )).containsExactly (oldSubchannel , newSubchannel );
242244
243- // test going from non-empty to empty
244- loadBalancer .handleResolvedAddresses (
245- ResolvedAddresses .newBuilder ()
246- .setAddresses (Collections .<EquivalentAddressGroup >emptyList ())
247- .setAttributes (affinity )
248- .build ());
249-
250- inOrder .verify (mockHelper ).updateBalancingState (eq (TRANSIENT_FAILURE ), pickerCaptor .capture ());
251- assertEquals (PickResult .withNoResult (), pickerCaptor .getValue ().pickSubchannel (mockArgs ));
252-
253245 verifyNoMoreInteractions (mockHelper );
254246 }
255247
256248 @ Test
257249 public void pickAfterStateChange () throws Exception {
258250 InOrder inOrder = inOrder (mockHelper );
259- loadBalancer .handleResolvedAddresses (
251+ boolean addressesAccepted = loadBalancer .acceptResolvedAddresses (
260252 ResolvedAddresses .newBuilder ().setAddresses (servers ).setAttributes (Attributes .EMPTY )
261253 .build ());
254+ assertThat (addressesAccepted ).isTrue ();
262255 Subchannel subchannel = loadBalancer .getSubchannels ().iterator ().next ();
263256 Ref <ConnectivityStateInfo > subchannelStateInfo = subchannel .getAttributes ().get (
264257 STATE_INFO );
@@ -296,9 +289,10 @@ public void pickAfterStateChange() throws Exception {
296289 @ Test
297290 public void ignoreShutdownSubchannelStateChange () {
298291 InOrder inOrder = inOrder (mockHelper );
299- loadBalancer .handleResolvedAddresses (
292+ boolean addressesAccepted = loadBalancer .acceptResolvedAddresses (
300293 ResolvedAddresses .newBuilder ().setAddresses (servers ).setAttributes (Attributes .EMPTY )
301294 .build ());
295+ assertThat (addressesAccepted ).isTrue ();
302296 inOrder .verify (mockHelper ).updateBalancingState (eq (CONNECTING ), isA (EmptyPicker .class ));
303297
304298 loadBalancer .shutdown ();
@@ -315,9 +309,10 @@ public void ignoreShutdownSubchannelStateChange() {
315309 @ Test
316310 public void stayTransientFailureUntilReady () {
317311 InOrder inOrder = inOrder (mockHelper );
318- loadBalancer .handleResolvedAddresses (
312+ boolean addressesAccepted = loadBalancer .acceptResolvedAddresses (
319313 ResolvedAddresses .newBuilder ().setAddresses (servers ).setAttributes (Attributes .EMPTY )
320314 .build ());
315+ assertThat (addressesAccepted ).isTrue ();
321316
322317 inOrder .verify (mockHelper ).updateBalancingState (eq (CONNECTING ), isA (EmptyPicker .class ));
323318
@@ -353,9 +348,10 @@ public void stayTransientFailureUntilReady() {
353348 @ Test
354349 public void refreshNameResolutionWhenSubchannelConnectionBroken () {
355350 InOrder inOrder = inOrder (mockHelper );
356- loadBalancer .handleResolvedAddresses (
351+ boolean addressesAccepted = loadBalancer .acceptResolvedAddresses (
357352 ResolvedAddresses .newBuilder ().setAddresses (servers ).setAttributes (Attributes .EMPTY )
358353 .build ());
354+ assertThat (addressesAccepted ).isTrue ();
359355
360356 verify (mockHelper , times (3 )).createSubchannel (any (CreateSubchannelArgs .class ));
361357 inOrder .verify (mockHelper ).updateBalancingState (eq (CONNECTING ), isA (EmptyPicker .class ));
@@ -420,8 +416,9 @@ public void nameResolutionErrorWithNoChannels() throws Exception {
420416 @ Test
421417 public void nameResolutionErrorWithActiveChannels () throws Exception {
422418 final Subchannel readySubchannel = subchannels .values ().iterator ().next ();
423- loadBalancer .handleResolvedAddresses (
419+ boolean addressesAccepted = loadBalancer .acceptResolvedAddresses (
424420 ResolvedAddresses .newBuilder ().setAddresses (servers ).setAttributes (affinity ).build ());
421+ assertThat (addressesAccepted ).isTrue ();
425422 deliverSubchannelState (readySubchannel , ConnectivityStateInfo .forNonError (READY ));
426423 loadBalancer .handleNameResolutionError (Status .NOT_FOUND .withDescription ("nameResolutionError" ));
427424
@@ -449,9 +446,10 @@ public void subchannelStateIsolation() throws Exception {
449446 Subchannel sc2 = subchannelIterator .next ();
450447 Subchannel sc3 = subchannelIterator .next ();
451448
452- loadBalancer .handleResolvedAddresses (
449+ boolean addressesAccepted = loadBalancer .acceptResolvedAddresses (
453450 ResolvedAddresses .newBuilder ().setAddresses (servers ).setAttributes (Attributes .EMPTY )
454451 .build ());
452+ assertThat (addressesAccepted ).isTrue ();
455453 verify (sc1 , times (1 )).requestConnection ();
456454 verify (sc2 , times (1 )).requestConnection ();
457455 verify (sc3 , times (1 )).requestConnection ();
@@ -522,6 +520,15 @@ public void internalPickerComparisons() {
522520 assertFalse (ready1 .isEquivalentTo (emptyOk1 ));
523521 }
524522
523+ @ Test
524+ public void emptyAddresses () {
525+ assertThat (loadBalancer .acceptResolvedAddresses (
526+ ResolvedAddresses .newBuilder ()
527+ .setAddresses (Collections .<EquivalentAddressGroup >emptyList ())
528+ .setAttributes (affinity )
529+ .build ())).isFalse ();
530+ }
531+
525532 private static List <Subchannel > getList (SubchannelPicker picker ) {
526533 return picker instanceof ReadyPicker ? ((ReadyPicker ) picker ).getList () :
527534 Collections .<Subchannel >emptyList ();
0 commit comments