1717package io .grpc .internal ;
1818
1919import static com .google .common .truth .Truth .assertThat ;
20+ import static com .google .common .truth .TruthJUnit .assume ;
2021import static org .junit .Assert .assertTrue ;
2122import static org .mockito .Mockito .mock ;
2223
2324import io .grpc .ChannelLogger ;
2425import io .grpc .NameResolver ;
2526import io .grpc .NameResolver .ServiceConfigParser ;
2627import io .grpc .SynchronizationContext ;
28+ import io .grpc .Uri ;
2729import java .net .URI ;
30+ import java .util .Arrays ;
2831import org .junit .Test ;
2932import org .junit .runner .RunWith ;
30- import org .junit .runners .JUnit4 ;
33+ import org .junit .runners .Parameterized ;
34+ import org .junit .runners .Parameterized .Parameter ;
35+ import org .junit .runners .Parameterized .Parameters ;
3136
3237/** Unit tests for {@link DnsNameResolverProvider}. */
33- @ RunWith (JUnit4 .class )
38+ @ RunWith (Parameterized .class )
3439public class DnsNameResolverProviderTest {
3540 private final FakeClock fakeClock = new FakeClock ();
3641
42+ @ Parameters (name = "enableRfc3986UrisParam={0}" )
43+ public static Iterable <Object []> data () {
44+ return Arrays .asList (new Object [][] {{true }, {false }});
45+ }
46+
47+ @ Parameter public boolean enableRfc3986UrisParam ;
48+
3749 private final SynchronizationContext syncContext = new SynchronizationContext (
3850 new Thread .UncaughtExceptionHandler () {
3951 @ Override
@@ -59,34 +71,47 @@ public void isAvailable() {
5971
6072 @ Test
6173 public void newNameResolver_acceptsHostAndPort () {
62- NameResolver nameResolver = provider .newNameResolver (URI .create ("dns:///localhost:443" ), args );
74+ DnsNameResolver nameResolver = newNameResolver ("dns:///localhost:443" , args );
75+ assertThat (nameResolver ).isNotNull ();
76+ assertThat (nameResolver .getClass ()).isSameInstanceAs (DnsNameResolver .class );
77+ assertThat (nameResolver .getServiceAuthority ()).isEqualTo ("localhost:443" );
78+ }
79+
80+ @ Test
81+ public void newNameResolver_acceptsRootless () {
82+ assume ().that (enableRfc3986UrisParam ).isTrue ();
83+ DnsNameResolver nameResolver = newNameResolver ("dns:localhost:443" , args );
6384 assertThat (nameResolver ).isNotNull ();
6485 assertThat (nameResolver .getClass ()).isSameInstanceAs (DnsNameResolver .class );
6586 assertThat (nameResolver .getServiceAuthority ()).isEqualTo ("localhost:443" );
6687 }
6788
6889 @ Test
6990 public void newNameResolver_rejectsNonDnsScheme () {
70- NameResolver nameResolver =
71- provider .newNameResolver (URI .create ("notdns:///localhost:443" ), args );
91+ DnsNameResolver nameResolver = newNameResolver ("notdns:///localhost:443" , args );
7292 assertThat (nameResolver ).isNull ();
7393 }
7494
7595 @ Test
7696 public void newNameResolver_toleratesTrailingPathSegments () {
77- NameResolver nameResolver =
78- provider .newNameResolver (URI .create ("dns:///foo.googleapis.com/ig/nor/ed" ), args );
97+ DnsNameResolver nameResolver = newNameResolver ("dns:///foo.googleapis.com/ig/nor/ed" , args );
7998 assertThat (nameResolver ).isNotNull ();
8099 assertThat (nameResolver .getClass ()).isSameInstanceAs (DnsNameResolver .class );
81100 assertThat (nameResolver .getServiceAuthority ()).isEqualTo ("foo.googleapis.com" );
82101 }
83102
84103 @ Test
85104 public void newNameResolver_toleratesAuthority () {
86- NameResolver nameResolver =
87- provider .newNameResolver (URI .create ("dns://8.8.8.8/foo.googleapis.com" ), args );
105+ DnsNameResolver nameResolver = newNameResolver ("dns://8.8.8.8/foo.googleapis.com" , args );
88106 assertThat (nameResolver ).isNotNull ();
89107 assertThat (nameResolver .getClass ()).isSameInstanceAs (DnsNameResolver .class );
90108 assertThat (nameResolver .getServiceAuthority ()).isEqualTo ("foo.googleapis.com" );
91109 }
110+
111+ private DnsNameResolver newNameResolver (String uriString , NameResolver .Args args ) {
112+ return (DnsNameResolver )
113+ (enableRfc3986UrisParam
114+ ? provider .newNameResolver (Uri .create (uriString ), args )
115+ : provider .newNameResolver (URI .create (uriString ), args ));
116+ }
92117}
0 commit comments