@@ -200,6 +200,7 @@ public XdsClient returnObject(Object object) {
200
200
private ArgumentCaptor <SubchannelPicker > pickerCaptor ;
201
201
private int xdsClientRefs ;
202
202
private ClusterResolverLoadBalancer loadBalancer ;
203
+ private NameResolverProvider fakeNameResolverProvider ;
203
204
204
205
@ Before
205
206
public void setUp () throws URISyntaxException {
@@ -216,7 +217,8 @@ public void setUp() throws URISyntaxException {
216
217
.setServiceConfigParser (mock (ServiceConfigParser .class ))
217
218
.setChannelLogger (mock (ChannelLogger .class ))
218
219
.build ();
219
- nsRegistry .register (new FakeNameResolverProvider ());
220
+ fakeNameResolverProvider = new FakeNameResolverProvider (false );
221
+ nsRegistry .register (fakeNameResolverProvider );
220
222
when (helper .getNameResolverRegistry ()).thenReturn (nsRegistry );
221
223
when (helper .getNameResolverArgs ()).thenReturn (args );
222
224
when (helper .getSynchronizationContext ()).thenReturn (syncContext );
@@ -826,6 +828,17 @@ public void handleEdsResource_noHealthyEndpoint() {
826
828
827
829
@ Test
828
830
public void onlyLogicalDnsCluster_endpointsResolved () {
831
+ do_onlyLogicalDnsCluster_endpointsResolved ();
832
+ }
833
+
834
+ @ Test
835
+ public void oldListenerCallback_onlyLogicalDnsCluster_endpointsResolved () {
836
+ nsRegistry .deregister (fakeNameResolverProvider );
837
+ nsRegistry .register (new FakeNameResolverProvider (true ));
838
+ do_onlyLogicalDnsCluster_endpointsResolved ();
839
+ }
840
+
841
+ void do_onlyLogicalDnsCluster_endpointsResolved () {
829
842
ClusterResolverConfig config = new ClusterResolverConfig (
830
843
Collections .singletonList (logicalDnsDiscoveryMechanism ), roundRobin , false );
831
844
deliverLbConfig (config );
@@ -854,7 +867,6 @@ public void onlyLogicalDnsCluster_endpointsResolved() {
854
867
.get (XdsAttributes .ATTR_ADDRESS_NAME )).isEqualTo (DNS_HOST_NAME );
855
868
assertThat (childBalancer .addresses .get (1 ).getAttributes ()
856
869
.get (XdsAttributes .ATTR_ADDRESS_NAME )).isEqualTo (DNS_HOST_NAME );
857
-
858
870
}
859
871
860
872
@ Test
@@ -874,37 +886,48 @@ public void onlyLogicalDnsCluster_handleRefreshNameResolution() {
874
886
}
875
887
876
888
@ Test
877
- public void onlyLogicalDnsCluster_resolutionError_backoffAndRefresh () {
889
+ public void resolutionError_backoffAndRefresh () {
890
+ do_onlyLogicalDnsCluster_resolutionError_backoffAndRefresh ();
891
+ }
892
+
893
+ @ Test
894
+ public void oldListenerCallback_resolutionError_backoffAndRefresh () {
895
+ nsRegistry .deregister (fakeNameResolverProvider );
896
+ nsRegistry .register (new FakeNameResolverProvider (true ));
897
+ do_onlyLogicalDnsCluster_resolutionError_backoffAndRefresh ();
898
+ }
899
+
900
+ void do_onlyLogicalDnsCluster_resolutionError_backoffAndRefresh () {
878
901
InOrder inOrder = Mockito .inOrder (helper , backoffPolicyProvider ,
879
- backoffPolicy1 , backoffPolicy2 );
902
+ backoffPolicy1 , backoffPolicy2 );
880
903
ClusterResolverConfig config = new ClusterResolverConfig (
881
- Collections .singletonList (logicalDnsDiscoveryMechanism ), roundRobin , false );
904
+ Collections .singletonList (logicalDnsDiscoveryMechanism ), roundRobin , false );
882
905
deliverLbConfig (config );
883
906
FakeNameResolver resolver = assertResolverCreated ("/" + DNS_HOST_NAME );
884
907
assertThat (childBalancers ).isEmpty ();
885
908
Status error = Status .UNAVAILABLE .withDescription ("cannot reach DNS server" );
886
909
resolver .deliverError (error );
887
910
inOrder .verify (helper ).updateBalancingState (
888
- eq (ConnectivityState .TRANSIENT_FAILURE ), pickerCaptor .capture ());
911
+ eq (ConnectivityState .TRANSIENT_FAILURE ), pickerCaptor .capture ());
889
912
assertPicker (pickerCaptor .getValue (), error , null );
890
913
assertThat (resolver .refreshCount ).isEqualTo (0 );
891
914
inOrder .verify (backoffPolicyProvider ).get ();
892
915
inOrder .verify (backoffPolicy1 ).nextBackoffNanos ();
893
916
assertThat (fakeClock .getPendingTasks ()).hasSize (1 );
894
917
assertThat (Iterables .getOnlyElement (fakeClock .getPendingTasks ()).getDelay (TimeUnit .SECONDS ))
895
- .isEqualTo (1L );
918
+ .isEqualTo (1L );
896
919
fakeClock .forwardTime (1L , TimeUnit .SECONDS );
897
920
assertThat (resolver .refreshCount ).isEqualTo (1 );
898
921
899
922
error = Status .UNKNOWN .withDescription ("I am lost" );
900
923
resolver .deliverError (error );
901
924
inOrder .verify (helper ).updateBalancingState (
902
- eq (ConnectivityState .TRANSIENT_FAILURE ), pickerCaptor .capture ());
925
+ eq (ConnectivityState .TRANSIENT_FAILURE ), pickerCaptor .capture ());
903
926
inOrder .verify (backoffPolicy1 ).nextBackoffNanos ();
904
927
assertPicker (pickerCaptor .getValue (), error , null );
905
928
assertThat (fakeClock .getPendingTasks ()).hasSize (1 );
906
929
assertThat (Iterables .getOnlyElement (fakeClock .getPendingTasks ()).getDelay (TimeUnit .SECONDS ))
907
- .isEqualTo (10L );
930
+ .isEqualTo (10L );
908
931
fakeClock .forwardTime (10L , TimeUnit .SECONDS );
909
932
assertThat (resolver .refreshCount ).isEqualTo (2 );
910
933
@@ -914,7 +937,7 @@ public void onlyLogicalDnsCluster_resolutionError_backoffAndRefresh() {
914
937
resolver .deliverEndpointAddresses (Arrays .asList (endpoint1 , endpoint2 ));
915
938
assertThat (childBalancers ).hasSize (1 );
916
939
assertAddressesEqual (Arrays .asList (endpoint1 , endpoint2 ),
917
- Iterables .getOnlyElement (childBalancers ).addresses );
940
+ Iterables .getOnlyElement (childBalancers ).addresses );
918
941
919
942
assertThat (fakeClock .getPendingTasks ()).isEmpty ();
920
943
inOrder .verifyNoMoreInteractions ();
@@ -1319,10 +1342,18 @@ void deliverError(Status error) {
1319
1342
}
1320
1343
1321
1344
private class FakeNameResolverProvider extends NameResolverProvider {
1345
+ private final boolean useOldListenerCallback ;
1346
+
1347
+ private FakeNameResolverProvider (boolean useOldListenerCallback ) {
1348
+ this .useOldListenerCallback = useOldListenerCallback ;
1349
+ }
1350
+
1322
1351
@ Override
1323
1352
public NameResolver newNameResolver (URI targetUri , NameResolver .Args args ) {
1324
1353
assertThat (targetUri .getScheme ()).isEqualTo ("dns" );
1325
- FakeNameResolver resolver = new FakeNameResolver (targetUri );
1354
+ FakeNameResolver resolver = useOldListenerCallback
1355
+ ? new FakeNameResolverUsingOldListenerCallback (targetUri )
1356
+ : new FakeNameResolver (targetUri );
1326
1357
resolvers .add (resolver );
1327
1358
return resolver ;
1328
1359
}
@@ -1343,9 +1374,10 @@ protected int priority() {
1343
1374
}
1344
1375
}
1345
1376
1377
+
1346
1378
private class FakeNameResolver extends NameResolver {
1347
1379
private final URI targetUri ;
1348
- private Listener2 listener ;
1380
+ protected Listener2 listener ;
1349
1381
private int refreshCount ;
1350
1382
1351
1383
private FakeNameResolver (URI targetUri ) {
@@ -1372,12 +1404,33 @@ public void shutdown() {
1372
1404
resolvers .remove (this );
1373
1405
}
1374
1406
1375
- private void deliverEndpointAddresses (List <EquivalentAddressGroup > addresses ) {
1407
+ protected void deliverEndpointAddresses (List <EquivalentAddressGroup > addresses ) {
1408
+ syncContext .execute (() -> {
1409
+ Status ret = listener .onResult2 (ResolutionResult .newBuilder ()
1410
+ .setAddressesOrError (StatusOr .fromValue (addresses )).build ());
1411
+ assertThat (ret .getCode ()).isEqualTo (Status .Code .OK );
1412
+ });
1413
+ }
1414
+
1415
+ protected void deliverError (Status error ) {
1416
+ syncContext .execute (() -> listener .onResult2 (ResolutionResult .newBuilder ()
1417
+ .setAddressesOrError (StatusOr .fromStatus (error )).build ()));
1418
+ }
1419
+ }
1420
+
1421
+ private class FakeNameResolverUsingOldListenerCallback extends FakeNameResolver {
1422
+ private FakeNameResolverUsingOldListenerCallback (URI targetUri ) {
1423
+ super (targetUri );
1424
+ }
1425
+
1426
+ @ Override
1427
+ protected void deliverEndpointAddresses (List <EquivalentAddressGroup > addresses ) {
1376
1428
listener .onResult (ResolutionResult .newBuilder ()
1377
- .setAddressesOrError (StatusOr .fromValue (addresses )).build ());
1429
+ .setAddressesOrError (StatusOr .fromValue (addresses )).build ());
1378
1430
}
1379
1431
1380
- private void deliverError (Status error ) {
1432
+ @ Override
1433
+ protected void deliverError (Status error ) {
1381
1434
listener .onError (error );
1382
1435
}
1383
1436
}
0 commit comments