@@ -198,6 +198,7 @@ public XdsClient returnObject(Object object) {
198198 private ArgumentCaptor <SubchannelPicker > pickerCaptor ;
199199 private int xdsClientRefs ;
200200 private ClusterResolverLoadBalancer loadBalancer ;
201+ private NameResolverProvider fakeNameResolverProvider ;
201202
202203 @ Before
203204 public void setUp () throws URISyntaxException {
@@ -214,7 +215,8 @@ public void setUp() throws URISyntaxException {
214215 .setServiceConfigParser (mock (ServiceConfigParser .class ))
215216 .setChannelLogger (mock (ChannelLogger .class ))
216217 .build ();
217- nsRegistry .register (new FakeNameResolverProvider ());
218+ fakeNameResolverProvider = new FakeNameResolverProvider (false );
219+ nsRegistry .register (fakeNameResolverProvider );
218220 when (helper .getNameResolverRegistry ()).thenReturn (nsRegistry );
219221 when (helper .getNameResolverArgs ()).thenReturn (args );
220222 when (helper .getSynchronizationContext ()).thenReturn (syncContext );
@@ -715,6 +717,17 @@ public void handleEdsResource_noHealthyEndpoint() {
715717
716718 @ Test
717719 public void onlyLogicalDnsCluster_endpointsResolved () {
720+ do_onlyLogicalDnsCluster_endpointsResolved ();
721+ }
722+
723+ @ Test
724+ public void oldListenerCallback_onlyLogicalDnsCluster_endpointsResolved () {
725+ nsRegistry .deregister (fakeNameResolverProvider );
726+ nsRegistry .register (new FakeNameResolverProvider (true ));
727+ do_onlyLogicalDnsCluster_endpointsResolved ();
728+ }
729+
730+ void do_onlyLogicalDnsCluster_endpointsResolved () {
718731 ClusterResolverConfig config = new ClusterResolverConfig (
719732 Collections .singletonList (logicalDnsDiscoveryMechanism ), roundRobin );
720733 deliverLbConfig (config );
@@ -743,7 +756,6 @@ public void onlyLogicalDnsCluster_endpointsResolved() {
743756 .get (XdsAttributes .ATTR_ADDRESS_NAME )).isEqualTo (DNS_HOST_NAME );
744757 assertThat (childBalancer .addresses .get (1 ).getAttributes ()
745758 .get (XdsAttributes .ATTR_ADDRESS_NAME )).isEqualTo (DNS_HOST_NAME );
746-
747759 }
748760
749761 @ Test
@@ -763,37 +775,48 @@ public void onlyLogicalDnsCluster_handleRefreshNameResolution() {
763775 }
764776
765777 @ Test
766- public void onlyLogicalDnsCluster_resolutionError_backoffAndRefresh () {
778+ public void resolutionError_backoffAndRefresh () {
779+ do_onlyLogicalDnsCluster_resolutionError_backoffAndRefresh ();
780+ }
781+
782+ @ Test
783+ public void oldListenerCallback_resolutionError_backoffAndRefresh () {
784+ nsRegistry .deregister (fakeNameResolverProvider );
785+ nsRegistry .register (new FakeNameResolverProvider (true ));
786+ do_onlyLogicalDnsCluster_resolutionError_backoffAndRefresh ();
787+ }
788+
789+ void do_onlyLogicalDnsCluster_resolutionError_backoffAndRefresh () {
767790 InOrder inOrder = Mockito .inOrder (helper , backoffPolicyProvider ,
768- backoffPolicy1 , backoffPolicy2 );
791+ backoffPolicy1 , backoffPolicy2 );
769792 ClusterResolverConfig config = new ClusterResolverConfig (
770- Collections .singletonList (logicalDnsDiscoveryMechanism ), roundRobin );
793+ Collections .singletonList (logicalDnsDiscoveryMechanism ), roundRobin );
771794 deliverLbConfig (config );
772795 FakeNameResolver resolver = assertResolverCreated ("/" + DNS_HOST_NAME );
773796 assertThat (childBalancers ).isEmpty ();
774797 Status error = Status .UNAVAILABLE .withDescription ("cannot reach DNS server" );
775798 resolver .deliverError (error );
776799 inOrder .verify (helper ).updateBalancingState (
777- eq (ConnectivityState .TRANSIENT_FAILURE ), pickerCaptor .capture ());
800+ eq (ConnectivityState .TRANSIENT_FAILURE ), pickerCaptor .capture ());
778801 assertPicker (pickerCaptor .getValue (), error , null );
779802 assertThat (resolver .refreshCount ).isEqualTo (0 );
780803 inOrder .verify (backoffPolicyProvider ).get ();
781804 inOrder .verify (backoffPolicy1 ).nextBackoffNanos ();
782805 assertThat (fakeClock .getPendingTasks ()).hasSize (1 );
783806 assertThat (Iterables .getOnlyElement (fakeClock .getPendingTasks ()).getDelay (TimeUnit .SECONDS ))
784- .isEqualTo (1L );
807+ .isEqualTo (1L );
785808 fakeClock .forwardTime (1L , TimeUnit .SECONDS );
786809 assertThat (resolver .refreshCount ).isEqualTo (1 );
787810
788811 error = Status .UNKNOWN .withDescription ("I am lost" );
789812 resolver .deliverError (error );
790813 inOrder .verify (helper ).updateBalancingState (
791- eq (ConnectivityState .TRANSIENT_FAILURE ), pickerCaptor .capture ());
814+ eq (ConnectivityState .TRANSIENT_FAILURE ), pickerCaptor .capture ());
792815 inOrder .verify (backoffPolicy1 ).nextBackoffNanos ();
793816 assertPicker (pickerCaptor .getValue (), error , null );
794817 assertThat (fakeClock .getPendingTasks ()).hasSize (1 );
795818 assertThat (Iterables .getOnlyElement (fakeClock .getPendingTasks ()).getDelay (TimeUnit .SECONDS ))
796- .isEqualTo (10L );
819+ .isEqualTo (10L );
797820 fakeClock .forwardTime (10L , TimeUnit .SECONDS );
798821 assertThat (resolver .refreshCount ).isEqualTo (2 );
799822
@@ -803,7 +826,7 @@ public void onlyLogicalDnsCluster_resolutionError_backoffAndRefresh() {
803826 resolver .deliverEndpointAddresses (Arrays .asList (endpoint1 , endpoint2 ));
804827 assertThat (childBalancers ).hasSize (1 );
805828 assertAddressesEqual (Arrays .asList (endpoint1 , endpoint2 ),
806- Iterables .getOnlyElement (childBalancers ).addresses );
829+ Iterables .getOnlyElement (childBalancers ).addresses );
807830
808831 assertThat (fakeClock .getPendingTasks ()).isEmpty ();
809832 inOrder .verifyNoMoreInteractions ();
@@ -1204,10 +1227,18 @@ void deliverError(Status error) {
12041227 }
12051228
12061229 private class FakeNameResolverProvider extends NameResolverProvider {
1230+ private final boolean useOldListenerCallback ;
1231+
1232+ private FakeNameResolverProvider (boolean useOldListenerCallback ) {
1233+ this .useOldListenerCallback = useOldListenerCallback ;
1234+ }
1235+
12071236 @ Override
12081237 public NameResolver newNameResolver (URI targetUri , NameResolver .Args args ) {
12091238 assertThat (targetUri .getScheme ()).isEqualTo ("dns" );
1210- FakeNameResolver resolver = new FakeNameResolver (targetUri );
1239+ FakeNameResolver resolver = useOldListenerCallback
1240+ ? new FakeNameResolverUsingOldListenerCallback (targetUri )
1241+ : new FakeNameResolver (targetUri );
12111242 resolvers .add (resolver );
12121243 return resolver ;
12131244 }
@@ -1228,9 +1259,10 @@ protected int priority() {
12281259 }
12291260 }
12301261
1262+
12311263 private class FakeNameResolver extends NameResolver {
12321264 private final URI targetUri ;
1233- private Listener2 listener ;
1265+ protected Listener2 listener ;
12341266 private int refreshCount ;
12351267
12361268 private FakeNameResolver (URI targetUri ) {
@@ -1257,12 +1289,33 @@ public void shutdown() {
12571289 resolvers .remove (this );
12581290 }
12591291
1260- private void deliverEndpointAddresses (List <EquivalentAddressGroup > addresses ) {
1292+ protected void deliverEndpointAddresses (List <EquivalentAddressGroup > addresses ) {
1293+ syncContext .execute (() -> {
1294+ Status ret = listener .onResult2 (ResolutionResult .newBuilder ()
1295+ .setAddressesOrError (StatusOr .fromValue (addresses )).build ());
1296+ assertThat (ret .getCode ()).isEqualTo (Status .Code .OK );
1297+ });
1298+ }
1299+
1300+ protected void deliverError (Status error ) {
1301+ syncContext .execute (() -> listener .onResult2 (ResolutionResult .newBuilder ()
1302+ .setAddressesOrError (StatusOr .fromStatus (error )).build ()));
1303+ }
1304+ }
1305+
1306+ private class FakeNameResolverUsingOldListenerCallback extends FakeNameResolver {
1307+ private FakeNameResolverUsingOldListenerCallback (URI targetUri ) {
1308+ super (targetUri );
1309+ }
1310+
1311+ @ Override
1312+ protected void deliverEndpointAddresses (List <EquivalentAddressGroup > addresses ) {
12611313 listener .onResult (ResolutionResult .newBuilder ()
1262- .setAddressesOrError (StatusOr .fromValue (addresses )).build ());
1314+ .setAddressesOrError (StatusOr .fromValue (addresses )).build ());
12631315 }
12641316
1265- private void deliverError (Status error ) {
1317+ @ Override
1318+ protected void deliverError (Status error ) {
12661319 listener .onError (error );
12671320 }
12681321 }
0 commit comments