Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions api/src/main/java/io/grpc/NameResolverRegistry.java
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,13 @@ public NameResolver newNameResolver(URI targetUri, NameResolver.Args args) {
return provider == null ? null : provider.newNameResolver(targetUri, args);
}

@Override
@Nullable
public NameResolver newNameResolver(io.grpc.Uri targetUri, NameResolver.Args args) {
NameResolverProvider provider = getProviderForScheme(targetUri.getScheme());
return provider == null ? null : provider.newNameResolver(targetUri, args);
}

@Override
public String getDefaultScheme() {
return NameResolverRegistry.this.getDefaultScheme();
Expand Down
165 changes: 122 additions & 43 deletions api/src/test/java/io/grpc/NameResolverRegistryTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,8 @@
/** Unit tests for {@link NameResolverRegistry}. */
@RunWith(JUnit4.class)
public class NameResolverRegistryTest {
private final URI uri = URI.create("dns:///localhost");
private final URI javaNetUri = URI.create("dns:///localhost");
private final Uri ioGrpcUri = Uri.create("dns:///localhost");
private final NameResolver.Args args = NameResolver.Args.newBuilder()
.setDefaultPort(8080)
.setProxyDetector(mock(ProxyDetector.class))
Expand Down Expand Up @@ -96,43 +97,80 @@ public void getDefaultScheme_noProvider() {
}

@Test
public void newNameResolver_providerReturnsNull() {
public void newNameResolver_providerReturnsNull_ioGrpcUri() {
NameResolverRegistry registry = new NameResolverRegistry();
registry.register(
new BaseProvider(true, 5, "noScheme") {
@Override
public NameResolver newNameResolver(URI passedUri, NameResolver.Args passedArgs) {
assertThat(passedUri).isSameInstanceAs(uri);
assertThat(passedUri).isSameInstanceAs(ioGrpcUri);
assertThat(passedArgs).isSameInstanceAs(args);
return null;
}
});
assertThat(registry.asFactory().newNameResolver(uri, args)).isNull();
assertThat(registry.asFactory().newNameResolver(ioGrpcUri, args)).isNull();
assertThat(registry.asFactory().getDefaultScheme()).isEqualTo("noScheme");
}

@Test
public void newNameResolver_providerReturnsNonNull() {
public void newNameResolver_providerReturnsNull_javaNetUri() {
NameResolverRegistry registry = new NameResolverRegistry();
registry.register(new BaseProvider(true, 5, uri.getScheme()) {
@Override
public NameResolver newNameResolver(URI passedUri, NameResolver.Args passedArgs) {
return null;
}
});
final NameResolver nr = new NameResolver() {
@Override public String getServiceAuthority() {
throw new UnsupportedOperationException();
}
registry.register(
new BaseProvider(true, 5, "noScheme") {
@Override
public NameResolver newNameResolver(URI passedUri, NameResolver.Args passedArgs) {
assertThat(passedUri).isSameInstanceAs(javaNetUri);
assertThat(passedArgs).isSameInstanceAs(args);
return null;
}
});
assertThat(registry.asFactory().newNameResolver(javaNetUri, args)).isNull();
assertThat(registry.asFactory().getDefaultScheme()).isEqualTo("noScheme");
}

@Override public void start(Listener2 listener) {
throw new UnsupportedOperationException();
}
@Test
public void newNameResolver_providerReturnsNonNull_ioGrpcUri() {
NameResolverRegistry registry = new NameResolverRegistry();
Uri uri = ioGrpcUri;
registry.register(
new BaseProvider(true, 5, uri.getScheme()) {
@Override
public NameResolver newNameResolver(Uri passedUri, NameResolver.Args passedArgs) {
return null;
}
});
final NameResolver nr = new DummyNameResolver();
registry.register(
new BaseProvider(true, 4, uri.getScheme()) {
@Override
public NameResolver newNameResolver(Uri passedUri, NameResolver.Args passedArgs) {
return nr;
}
});
registry.register(
new BaseProvider(true, 3, uri.getScheme()) {
@Override
public NameResolver newNameResolver(Uri passedUri, NameResolver.Args passedArgs) {
fail("Should not be called");
throw new AssertionError();
}
});
assertThat(registry.asFactory().newNameResolver(uri, args)).isNull();
assertThat(registry.asFactory().getDefaultScheme()).isEqualTo(uri.getScheme());
}

@Override public void shutdown() {
throw new UnsupportedOperationException();
}
};
@Test
public void newNameResolver_providerReturnsNonNull_javaNetUri() {
NameResolverRegistry registry = new NameResolverRegistry();
URI uri = javaNetUri;
registry.register(
new BaseProvider(true, 5, uri.getScheme()) {
@Override
public NameResolver newNameResolver(URI passedUri, NameResolver.Args passedArgs) {
return null;
}
});
final NameResolver nr = new DummyNameResolver();
registry.register(
new BaseProvider(true, 4, uri.getScheme()) {
@Override
Expand All @@ -153,27 +191,45 @@ public NameResolver newNameResolver(URI passedUri, NameResolver.Args passedArgs)
}

@Test
public void newNameResolver_multipleScheme() {
public void newNameResolver_multipleScheme_ioGrpcUri() {
NameResolverRegistry registry = new NameResolverRegistry();
registry.register(new BaseProvider(true, 5, uri.getScheme()) {
@Override
public NameResolver newNameResolver(URI passedUri, NameResolver.Args passedArgs) {
return null;
}
});
final NameResolver nr = new NameResolver() {
@Override public String getServiceAuthority() {
throw new UnsupportedOperationException();
}
Uri uri = ioGrpcUri;
registry.register(
new BaseProvider(true, 5, uri.getScheme()) {
@Override
public NameResolver newNameResolver(Uri passedUri, NameResolver.Args passedArgs) {
return null;
}
});
final NameResolver nr = new DummyNameResolver();
registry.register(
new BaseProvider(true, 4, "other") {
@Override
public NameResolver newNameResolver(Uri passedUri, NameResolver.Args passedArgs) {
return nr;
}
});

@Override public void start(Listener2 listener) {
throw new UnsupportedOperationException();
}
assertThat(registry.asFactory().newNameResolver(uri, args)).isNull();
assertThat(registry.asFactory().newNameResolver(Uri.create("other:///0.0.0.0:80"), args))
.isSameInstanceAs(nr);
assertThat(registry.asFactory().newNameResolver(Uri.create("OTHER:///0.0.0.0:80"), args))
.isSameInstanceAs(nr);
assertThat(registry.asFactory().getDefaultScheme()).isEqualTo("dns");
}

@Override public void shutdown() {
throw new UnsupportedOperationException();
}
};
@Test
public void newNameResolver_multipleScheme_javaNetUri() {
NameResolverRegistry registry = new NameResolverRegistry();
URI uri = javaNetUri;
registry.register(
new BaseProvider(true, 5, uri.getScheme()) {
@Override
public NameResolver newNameResolver(URI passedUri, NameResolver.Args passedArgs) {
return null;
}
});
final NameResolver nr = new DummyNameResolver();
registry.register(
new BaseProvider(true, 4, "other") {
@Override
Expand All @@ -186,16 +242,17 @@ public NameResolver newNameResolver(URI passedUri, NameResolver.Args passedArgs)
assertThat(registry.asFactory().newNameResolver(URI.create("/0.0.0.0:80"), args)).isNull();
assertThat(registry.asFactory().newNameResolver(URI.create("///0.0.0.0:80"), args)).isNull();
assertThat(registry.asFactory().newNameResolver(URI.create("other:///0.0.0.0:80"), args))
.isSameInstanceAs(nr);
.isSameInstanceAs(nr);
assertThat(registry.asFactory().newNameResolver(URI.create("OTHER:///0.0.0.0:80"), args))
.isSameInstanceAs(nr);
.isSameInstanceAs(nr);
assertThat(registry.asFactory().getDefaultScheme()).isEqualTo("dns");
}

@Test
public void newNameResolver_noProvider() {
NameResolver.Factory factory = new NameResolverRegistry().asFactory();
assertThat(factory.newNameResolver(uri, args)).isNull();
assertThat(factory.newNameResolver(javaNetUri, args)).isNull();
assertThat(factory.newNameResolver(ioGrpcUri, args)).isNull();
assertThat(factory.getDefaultScheme()).isEqualTo("unknown");
}

Expand Down Expand Up @@ -261,9 +318,31 @@ public NameResolver newNameResolver(URI targetUri, NameResolver.Args args) {
throw new UnsupportedOperationException();
}

@Override
public NameResolver newNameResolver(Uri targetUri, NameResolver.Args args) {
throw new UnsupportedOperationException();
}

@Override
public String getDefaultScheme() {
return scheme == null ? "scheme" + getClass().getSimpleName() : scheme;
}
}

private static class DummyNameResolver extends NameResolver {
@Override
public String getServiceAuthority() {
throw new UnsupportedOperationException();
}

@Override
public void start(Listener2 listener) {
throw new UnsupportedOperationException();
}

@Override
public void shutdown() {
throw new UnsupportedOperationException();
}
}
}