@@ -155,8 +155,9 @@ public void tearDown() throws Exception {
155
155
@ Test
156
156
public void pickAfterResolved () throws Exception {
157
157
final Subchannel readySubchannel = subchannels .values ().iterator ().next ();
158
- loadBalancer .handleResolvedAddresses (
158
+ boolean addressesAccepted = loadBalancer .acceptResolvedAddresses (
159
159
ResolvedAddresses .newBuilder ().setAddresses (servers ).setAttributes (affinity ).build ());
160
+ assertThat (addressesAccepted ).isTrue ();
160
161
deliverSubchannelState (readySubchannel , ConnectivityStateInfo .forNonError (READY ));
161
162
162
163
verify (mockHelper , times (3 )).createSubchannel (createArgsCaptor .capture ());
@@ -206,9 +207,10 @@ public void pickAfterResolvedUpdatedHosts() throws Exception {
206
207
207
208
InOrder inOrder = inOrder (mockHelper );
208
209
209
- loadBalancer .handleResolvedAddresses (
210
+ boolean addressesAccepted = loadBalancer .acceptResolvedAddresses (
210
211
ResolvedAddresses .newBuilder ().setAddresses (currentServers ).setAttributes (affinity )
211
212
.build ());
213
+ assertThat (addressesAccepted ).isTrue ();
212
214
213
215
inOrder .verify (mockHelper ).updateBalancingState (eq (CONNECTING ), pickerCaptor .capture ());
214
216
@@ -228,8 +230,9 @@ public void pickAfterResolvedUpdatedHosts() throws Exception {
228
230
// This time with Attributes
229
231
List <EquivalentAddressGroup > latestServers = Lists .newArrayList (oldEag2 , newEag );
230
232
231
- loadBalancer .handleResolvedAddresses (
233
+ addressesAccepted = loadBalancer .acceptResolvedAddresses (
232
234
ResolvedAddresses .newBuilder ().setAddresses (latestServers ).setAttributes (affinity ).build ());
235
+ assertThat (addressesAccepted ).isTrue ();
233
236
234
237
verify (newSubchannel , times (1 )).requestConnection ();
235
238
verify (oldSubchannel , times (1 )).updateAddresses (Arrays .asList (oldEag2 ));
@@ -247,25 +250,16 @@ public void pickAfterResolvedUpdatedHosts() throws Exception {
247
250
picker = pickerCaptor .getValue ();
248
251
assertThat (getList (picker )).containsExactly (oldSubchannel , newSubchannel );
249
252
250
- // test going from non-empty to empty
251
- loadBalancer .handleResolvedAddresses (
252
- ResolvedAddresses .newBuilder ()
253
- .setAddresses (Collections .<EquivalentAddressGroup >emptyList ())
254
- .setAttributes (affinity )
255
- .build ());
256
-
257
- inOrder .verify (mockHelper ).updateBalancingState (eq (TRANSIENT_FAILURE ), pickerCaptor .capture ());
258
- assertEquals (PickResult .withNoResult (), pickerCaptor .getValue ().pickSubchannel (mockArgs ));
259
-
260
253
verifyNoMoreInteractions (mockHelper );
261
254
}
262
255
263
256
@ Test
264
257
public void pickAfterStateChange () throws Exception {
265
258
InOrder inOrder = inOrder (mockHelper );
266
- loadBalancer .handleResolvedAddresses (
259
+ boolean addressesAccepted = loadBalancer .acceptResolvedAddresses (
267
260
ResolvedAddresses .newBuilder ().setAddresses (servers ).setAttributes (Attributes .EMPTY )
268
261
.build ());
262
+ assertThat (addressesAccepted ).isTrue ();
269
263
Subchannel subchannel = loadBalancer .getSubchannels ().iterator ().next ();
270
264
Ref <ConnectivityStateInfo > subchannelStateInfo = subchannel .getAttributes ().get (
271
265
STATE_INFO );
@@ -305,9 +299,10 @@ public void pickAfterConfigChange() {
305
299
final LeastRequestConfig oldConfig = new LeastRequestConfig (4 );
306
300
final LeastRequestConfig newConfig = new LeastRequestConfig (6 );
307
301
final Subchannel readySubchannel = subchannels .values ().iterator ().next ();
308
- loadBalancer .handleResolvedAddresses (
302
+ boolean addressesAccepted = loadBalancer .acceptResolvedAddresses (
309
303
ResolvedAddresses .newBuilder ().setAddresses (servers ).setAttributes (affinity )
310
304
.setLoadBalancingPolicyConfig (oldConfig ).build ());
305
+ assertThat (addressesAccepted ).isTrue ();
311
306
deliverSubchannelState (readySubchannel , ConnectivityStateInfo .forNonError (READY ));
312
307
verify (mockHelper , times (3 )).createSubchannel (any (CreateSubchannelArgs .class ));
313
308
verify (mockHelper , times (2 ))
@@ -317,9 +312,10 @@ public void pickAfterConfigChange() {
317
312
pickerCaptor .getValue ().pickSubchannel (mockArgs );
318
313
verify (mockRandom , times (oldConfig .choiceCount )).nextInt (1 );
319
314
320
- loadBalancer .handleResolvedAddresses (
315
+ addressesAccepted = loadBalancer .acceptResolvedAddresses (
321
316
ResolvedAddresses .newBuilder ().setAddresses (servers ).setAttributes (affinity )
322
317
.setLoadBalancingPolicyConfig (newConfig ).build ());
318
+ assertThat (addressesAccepted ).isTrue ();
323
319
verify (mockHelper , times (3 ))
324
320
.updateBalancingState (any (ConnectivityState .class ), pickerCaptor .capture ());
325
321
@@ -332,9 +328,10 @@ public void pickAfterConfigChange() {
332
328
@ Test
333
329
public void ignoreShutdownSubchannelStateChange () {
334
330
InOrder inOrder = inOrder (mockHelper );
335
- loadBalancer .handleResolvedAddresses (
331
+ boolean addressesAccepted = loadBalancer .acceptResolvedAddresses (
336
332
ResolvedAddresses .newBuilder ().setAddresses (servers ).setAttributes (Attributes .EMPTY )
337
333
.build ());
334
+ assertThat (addressesAccepted ).isTrue ();
338
335
inOrder .verify (mockHelper ).updateBalancingState (eq (CONNECTING ), isA (EmptyPicker .class ));
339
336
340
337
loadBalancer .shutdown ();
@@ -351,9 +348,10 @@ public void ignoreShutdownSubchannelStateChange() {
351
348
@ Test
352
349
public void stayTransientFailureUntilReady () {
353
350
InOrder inOrder = inOrder (mockHelper );
354
- loadBalancer .handleResolvedAddresses (
351
+ boolean addressesAccepted = loadBalancer .acceptResolvedAddresses (
355
352
ResolvedAddresses .newBuilder ().setAddresses (servers ).setAttributes (Attributes .EMPTY )
356
353
.build ());
354
+ assertThat (addressesAccepted ).isTrue ();
357
355
358
356
inOrder .verify (mockHelper ).updateBalancingState (eq (CONNECTING ), isA (EmptyPicker .class ));
359
357
@@ -389,9 +387,10 @@ public void stayTransientFailureUntilReady() {
389
387
@ Test
390
388
public void refreshNameResolutionWhenSubchannelConnectionBroken () {
391
389
InOrder inOrder = inOrder (mockHelper );
392
- loadBalancer .handleResolvedAddresses (
390
+ boolean addressesAccepted = loadBalancer .acceptResolvedAddresses (
393
391
ResolvedAddresses .newBuilder ().setAddresses (servers ).setAttributes (Attributes .EMPTY )
394
392
.build ());
393
+ assertThat (addressesAccepted ).isTrue ();
395
394
396
395
verify (mockHelper , times (3 )).createSubchannel (any (CreateSubchannelArgs .class ));
397
396
inOrder .verify (mockHelper ).updateBalancingState (eq (CONNECTING ), isA (EmptyPicker .class ));
@@ -419,10 +418,11 @@ public void refreshNameResolutionWhenSubchannelConnectionBroken() {
419
418
public void pickerLeastRequest () throws Exception {
420
419
int choiceCount = 2 ;
421
420
// This should add inFlight counters to all subchannels.
422
- loadBalancer .handleResolvedAddresses (
421
+ boolean addressesAccepted = loadBalancer .acceptResolvedAddresses (
423
422
ResolvedAddresses .newBuilder ().setAddresses (servers ).setAttributes (Attributes .EMPTY )
424
423
.setLoadBalancingPolicyConfig (new LeastRequestConfig (choiceCount ))
425
424
.build ());
425
+ assertThat (addressesAccepted ).isTrue ();
426
426
427
427
assertEquals (3 , loadBalancer .getSubchannels ().size ());
428
428
@@ -505,10 +505,11 @@ public void nameResolutionErrorWithNoChannels() throws Exception {
505
505
public void nameResolutionErrorWithActiveChannels () throws Exception {
506
506
int choiceCount = 8 ;
507
507
final Subchannel readySubchannel = subchannels .values ().iterator ().next ();
508
- loadBalancer .handleResolvedAddresses (
508
+ boolean addressesAccepted = loadBalancer .acceptResolvedAddresses (
509
509
ResolvedAddresses .newBuilder ()
510
510
.setLoadBalancingPolicyConfig (new LeastRequestConfig (choiceCount ))
511
511
.setAddresses (servers ).setAttributes (affinity ).build ());
512
+ assertThat (addressesAccepted ).isTrue ();
512
513
deliverSubchannelState (readySubchannel , ConnectivityStateInfo .forNonError (READY ));
513
514
loadBalancer .handleNameResolutionError (Status .NOT_FOUND .withDescription ("nameResolutionError" ));
514
515
@@ -538,9 +539,10 @@ public void subchannelStateIsolation() throws Exception {
538
539
Subchannel sc2 = subchannelIterator .next ();
539
540
Subchannel sc3 = subchannelIterator .next ();
540
541
541
- loadBalancer .handleResolvedAddresses (
542
+ boolean addressesAccepted = loadBalancer .acceptResolvedAddresses (
542
543
ResolvedAddresses .newBuilder ().setAddresses (servers ).setAttributes (Attributes .EMPTY )
543
544
.build ());
545
+ assertThat (addressesAccepted ).isTrue ();
544
546
verify (sc1 , times (1 )).requestConnection ();
545
547
verify (sc2 , times (1 )).requestConnection ();
546
548
verify (sc3 , times (1 )).requestConnection ();
@@ -613,6 +615,15 @@ public void internalPickerComparisons() {
613
615
assertFalse (ready5 .isEquivalentTo (ready6 ));
614
616
}
615
617
618
+ @ Test
619
+ public void emptyAddresses () {
620
+ assertThat (loadBalancer .acceptResolvedAddresses (
621
+ ResolvedAddresses .newBuilder ()
622
+ .setAddresses (Collections .<EquivalentAddressGroup >emptyList ())
623
+ .setAttributes (affinity )
624
+ .build ())).isFalse ();
625
+ }
626
+
616
627
private static List <Subchannel > getList (SubchannelPicker picker ) {
617
628
return picker instanceof ReadyPicker ? ((ReadyPicker ) picker ).getList () :
618
629
Collections .<Subchannel >emptyList ();
0 commit comments