2929import io .grpc .NameResolverProvider ;
3030import io .grpc .NameResolverRegistry ;
3131import io .grpc .SynchronizationContext ;
32+ import io .grpc .Uri ;
3233import io .grpc .internal .FakeClock ;
3334import io .grpc .internal .GrpcUtil ;
3435import java .net .URI ;
36+ import java .util .Arrays ;
3537import java .util .Collections ;
3638import java .util .HashMap ;
3739import java .util .Map ;
3840import org .junit .Test ;
3941import org .junit .runner .RunWith ;
40- import org .junit .runners .JUnit4 ;
42+ import org .junit .runners .Parameterized ;
43+ import org .junit .runners .Parameterized .Parameter ;
44+ import org .junit .runners .Parameterized .Parameters ;
4145
4246/** Unit tests for {@link XdsNameResolverProvider}. */
43- @ RunWith (JUnit4 .class )
47+ @ RunWith (Parameterized .class )
4448public class XdsNameResolverProviderTest {
4549 private final SynchronizationContext syncContext = new SynchronizationContext (
4650 new Thread .UncaughtExceptionHandler () {
@@ -63,6 +67,13 @@ public void uncaughtException(Thread t, Throwable e) {
6367
6468 private XdsNameResolverProvider provider = new XdsNameResolverProvider ();
6569
70+ @ Parameters (name = "enableRfc3986UrisParam={0}" )
71+ public static Iterable <Object []> data () {
72+ return Arrays .asList (new Object [][] {{true }, {false }});
73+ }
74+
75+ @ Parameter public boolean enableRfc3986UrisParam ;
76+
6677 @ Test
6778 public void provided () {
6879 for (NameResolverProvider current
@@ -81,48 +92,46 @@ public void isAvailable() {
8192 }
8293
8394 @ Test
84- public void newNameResolver () {
85- assertThat (
86- provider .newNameResolver (URI .create ("xds://1.1.1.1/foo.googleapis.com" ), args ))
95+ public void newNameResolver_returnsExpectedType () {
96+ assertThat (newNameResolver (provider , "xds://1.1.1.1/foo.googleapis.com" , args ))
8797 .isInstanceOf (XdsNameResolver .class );
88- assertThat (
89- provider .newNameResolver (URI .create ("xds:///foo.googleapis.com" ), args ))
98+ assertThat (newNameResolver (provider , "xds:///foo.googleapis.com" , args ))
9099 .isInstanceOf (XdsNameResolver .class );
91- assertThat (
92- provider .newNameResolver (URI .create ("notxds://1.1.1.1/foo.googleapis.com" ),
93- args ))
94- .isNull ();
100+ }
101+
102+ @ Test
103+ public void newNameResolver_matchesExpectedScheme () {
104+ assertThat (newNameResolver (provider , "notxds://1.1.1.1/foo.googleapis.com" , args )).isNull ();
95105 }
96106
97107 @ Test
98108 public void validName_withAuthority () {
99- XdsNameResolver resolver =
100- provider .newNameResolver (
101- URI .create ("xds://trafficdirector.google.com/foo.googleapis.com" ), args );
109+ NameResolver resolver =
110+ newNameResolver (provider , "xds://trafficdirector.google.com/foo.googleapis.com" , args );
102111 assertThat (resolver ).isNotNull ();
103112 assertThat (resolver .getServiceAuthority ()).isEqualTo ("foo.googleapis.com" );
104113 }
105114
106115 @ Test
107116 public void validName_noAuthority () {
108- XdsNameResolver resolver =
109- provider .newNameResolver (URI .create ("xds:///foo.googleapis.com" ), args );
117+ NameResolver resolver = newNameResolver (provider , "xds:///foo.googleapis.com" , args );
110118 assertThat (resolver ).isNotNull ();
111119 assertThat (resolver .getServiceAuthority ()).isEqualTo ("foo.googleapis.com" );
112120 }
113121
114122 @ Test
115123 public void validName_urlExtractedAuthorityInvalidWithoutEncoding () {
116- XdsNameResolver resolver =
117- provider . newNameResolver (URI . create ( "xds:///1234/path/foo.googleapis.com:8080" ) , args );
124+ NameResolver resolver =
125+ newNameResolver (provider , "xds:///1234/path/foo.googleapis.com:8080" , args );
118126 assertThat (resolver ).isNotNull ();
119127 assertThat (resolver .getServiceAuthority ()).isEqualTo ("1234%2Fpath%2Ffoo.googleapis.com:8080" );
120128 }
121129
122130 @ Test
123131 public void validName_urlwithTargetAuthorityAndExtractedAuthorityInvalidWithoutEncoding () {
124- XdsNameResolver resolver = provider .newNameResolver (URI .create (
125- "xds://trafficdirector.google.com/1234/path/foo.googleapis.com:8080" ), args );
132+ NameResolver resolver =
133+ newNameResolver (
134+ provider , "xds://trafficdirector.google.com/1234/path/foo.googleapis.com:8080" , args );
126135 assertThat (resolver ).isNotNull ();
127136 assertThat (resolver .getServiceAuthority ()).isEqualTo ("1234%2Fpath%2Ffoo.googleapis.com:8080" );
128137 }
@@ -135,18 +144,14 @@ public void newProvider_multipleScheme() {
135144 XdsNameResolverProvider provider1 = XdsNameResolverProvider .createForTest ("new-xds-scheme" ,
136145 new HashMap <String , String >());
137146 registry .register (provider1 );
138- assertThat (registry .asFactory ()
139- .newNameResolver (URI .create ("xds:///localhost" ), args )).isNotNull ();
140- assertThat (registry .asFactory ()
141- .newNameResolver (URI .create ("new-xds-scheme:///localhost" ), args )).isNotNull ();
142- assertThat (registry .asFactory ()
143- .newNameResolver (URI .create ("no-scheme:///localhost" ), args )).isNotNull ();
147+ assertThat (newNameResolver (registry .asFactory (), "xds:///localhost" , args )).isNotNull ();
148+ assertThat (newNameResolver (registry .asFactory (), "new-xds-scheme:///localhost" , args ))
149+ .isNotNull ();
150+ assertThat (newNameResolver (registry .asFactory (), "no-scheme:///localhost" , args )).isNotNull ();
144151 registry .deregister (provider1 );
145- assertThat (registry .asFactory ()
146- .newNameResolver (URI .create ("new-xds-scheme:///localhost" ), args )).isNull ();
152+ assertThat (newNameResolver (registry .asFactory (), "new-xds-scheme:///localhost" , args )).isNull ();
147153 registry .deregister (provider0 );
148- assertThat (registry .asFactory ()
149- .newNameResolver (URI .create ("xds:///localhost" ), args )).isNotNull ();
154+ assertThat (newNameResolver (registry .asFactory (), "xds:///localhost" , args )).isNotNull ();
150155 }
151156
152157 @ Test
@@ -176,4 +181,11 @@ public void newProvider_overrideBootstrap() {
176181 resolver .shutdown ();
177182 registry .deregister (provider );
178183 }
184+
185+ private NameResolver newNameResolver (
186+ NameResolver .Factory factory , String uriString , NameResolver .Args args ) {
187+ return enableRfc3986UrisParam
188+ ? factory .newNameResolver (Uri .create (uriString ), args )
189+ : factory .newNameResolver (URI .create (uriString ), args );
190+ }
179191}
0 commit comments