Skip to content

Commit 9903488

Browse files
authored
api: Update NameResolverRegistry for io.grpc.Uri (#12609)
1 parent 50c18f1 commit 9903488

File tree

2 files changed

+129
-43
lines changed

2 files changed

+129
-43
lines changed

api/src/main/java/io/grpc/NameResolverRegistry.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,13 @@ public NameResolver newNameResolver(URI targetUri, NameResolver.Args args) {
182182
return provider == null ? null : provider.newNameResolver(targetUri, args);
183183
}
184184

185+
@Override
186+
@Nullable
187+
public NameResolver newNameResolver(io.grpc.Uri targetUri, NameResolver.Args args) {
188+
NameResolverProvider provider = getProviderForScheme(targetUri.getScheme());
189+
return provider == null ? null : provider.newNameResolver(targetUri, args);
190+
}
191+
185192
@Override
186193
public String getDefaultScheme() {
187194
return NameResolverRegistry.this.getDefaultScheme();

api/src/test/java/io/grpc/NameResolverRegistryTest.java

Lines changed: 122 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@
3333
/** Unit tests for {@link NameResolverRegistry}. */
3434
@RunWith(JUnit4.class)
3535
public class NameResolverRegistryTest {
36-
private final URI uri = URI.create("dns:///localhost");
36+
private final URI javaNetUri = URI.create("dns:///localhost");
37+
private final Uri ioGrpcUri = Uri.create("dns:///localhost");
3738
private final NameResolver.Args args = NameResolver.Args.newBuilder()
3839
.setDefaultPort(8080)
3940
.setProxyDetector(mock(ProxyDetector.class))
@@ -96,43 +97,80 @@ public void getDefaultScheme_noProvider() {
9697
}
9798

9899
@Test
99-
public void newNameResolver_providerReturnsNull() {
100+
public void newNameResolver_providerReturnsNull_ioGrpcUri() {
100101
NameResolverRegistry registry = new NameResolverRegistry();
101102
registry.register(
102103
new BaseProvider(true, 5, "noScheme") {
103104
@Override
104105
public NameResolver newNameResolver(URI passedUri, NameResolver.Args passedArgs) {
105-
assertThat(passedUri).isSameInstanceAs(uri);
106+
assertThat(passedUri).isSameInstanceAs(ioGrpcUri);
106107
assertThat(passedArgs).isSameInstanceAs(args);
107108
return null;
108109
}
109110
});
110-
assertThat(registry.asFactory().newNameResolver(uri, args)).isNull();
111+
assertThat(registry.asFactory().newNameResolver(ioGrpcUri, args)).isNull();
111112
assertThat(registry.asFactory().getDefaultScheme()).isEqualTo("noScheme");
112113
}
113114

114115
@Test
115-
public void newNameResolver_providerReturnsNonNull() {
116+
public void newNameResolver_providerReturnsNull_javaNetUri() {
116117
NameResolverRegistry registry = new NameResolverRegistry();
117-
registry.register(new BaseProvider(true, 5, uri.getScheme()) {
118-
@Override
119-
public NameResolver newNameResolver(URI passedUri, NameResolver.Args passedArgs) {
120-
return null;
121-
}
122-
});
123-
final NameResolver nr = new NameResolver() {
124-
@Override public String getServiceAuthority() {
125-
throw new UnsupportedOperationException();
126-
}
118+
registry.register(
119+
new BaseProvider(true, 5, "noScheme") {
120+
@Override
121+
public NameResolver newNameResolver(URI passedUri, NameResolver.Args passedArgs) {
122+
assertThat(passedUri).isSameInstanceAs(javaNetUri);
123+
assertThat(passedArgs).isSameInstanceAs(args);
124+
return null;
125+
}
126+
});
127+
assertThat(registry.asFactory().newNameResolver(javaNetUri, args)).isNull();
128+
assertThat(registry.asFactory().getDefaultScheme()).isEqualTo("noScheme");
129+
}
127130

128-
@Override public void start(Listener2 listener) {
129-
throw new UnsupportedOperationException();
130-
}
131+
@Test
132+
public void newNameResolver_providerReturnsNonNull_ioGrpcUri() {
133+
NameResolverRegistry registry = new NameResolverRegistry();
134+
Uri uri = ioGrpcUri;
135+
registry.register(
136+
new BaseProvider(true, 5, uri.getScheme()) {
137+
@Override
138+
public NameResolver newNameResolver(Uri passedUri, NameResolver.Args passedArgs) {
139+
return null;
140+
}
141+
});
142+
final NameResolver nr = new DummyNameResolver();
143+
registry.register(
144+
new BaseProvider(true, 4, uri.getScheme()) {
145+
@Override
146+
public NameResolver newNameResolver(Uri passedUri, NameResolver.Args passedArgs) {
147+
return nr;
148+
}
149+
});
150+
registry.register(
151+
new BaseProvider(true, 3, uri.getScheme()) {
152+
@Override
153+
public NameResolver newNameResolver(Uri passedUri, NameResolver.Args passedArgs) {
154+
fail("Should not be called");
155+
throw new AssertionError();
156+
}
157+
});
158+
assertThat(registry.asFactory().newNameResolver(uri, args)).isNull();
159+
assertThat(registry.asFactory().getDefaultScheme()).isEqualTo(uri.getScheme());
160+
}
131161

132-
@Override public void shutdown() {
133-
throw new UnsupportedOperationException();
134-
}
135-
};
162+
@Test
163+
public void newNameResolver_providerReturnsNonNull_javaNetUri() {
164+
NameResolverRegistry registry = new NameResolverRegistry();
165+
URI uri = javaNetUri;
166+
registry.register(
167+
new BaseProvider(true, 5, uri.getScheme()) {
168+
@Override
169+
public NameResolver newNameResolver(URI passedUri, NameResolver.Args passedArgs) {
170+
return null;
171+
}
172+
});
173+
final NameResolver nr = new DummyNameResolver();
136174
registry.register(
137175
new BaseProvider(true, 4, uri.getScheme()) {
138176
@Override
@@ -153,27 +191,45 @@ public NameResolver newNameResolver(URI passedUri, NameResolver.Args passedArgs)
153191
}
154192

155193
@Test
156-
public void newNameResolver_multipleScheme() {
194+
public void newNameResolver_multipleScheme_ioGrpcUri() {
157195
NameResolverRegistry registry = new NameResolverRegistry();
158-
registry.register(new BaseProvider(true, 5, uri.getScheme()) {
159-
@Override
160-
public NameResolver newNameResolver(URI passedUri, NameResolver.Args passedArgs) {
161-
return null;
162-
}
163-
});
164-
final NameResolver nr = new NameResolver() {
165-
@Override public String getServiceAuthority() {
166-
throw new UnsupportedOperationException();
167-
}
196+
Uri uri = ioGrpcUri;
197+
registry.register(
198+
new BaseProvider(true, 5, uri.getScheme()) {
199+
@Override
200+
public NameResolver newNameResolver(Uri passedUri, NameResolver.Args passedArgs) {
201+
return null;
202+
}
203+
});
204+
final NameResolver nr = new DummyNameResolver();
205+
registry.register(
206+
new BaseProvider(true, 4, "other") {
207+
@Override
208+
public NameResolver newNameResolver(Uri passedUri, NameResolver.Args passedArgs) {
209+
return nr;
210+
}
211+
});
168212

169-
@Override public void start(Listener2 listener) {
170-
throw new UnsupportedOperationException();
171-
}
213+
assertThat(registry.asFactory().newNameResolver(uri, args)).isNull();
214+
assertThat(registry.asFactory().newNameResolver(Uri.create("other:///0.0.0.0:80"), args))
215+
.isSameInstanceAs(nr);
216+
assertThat(registry.asFactory().newNameResolver(Uri.create("OTHER:///0.0.0.0:80"), args))
217+
.isSameInstanceAs(nr);
218+
assertThat(registry.asFactory().getDefaultScheme()).isEqualTo("dns");
219+
}
172220

173-
@Override public void shutdown() {
174-
throw new UnsupportedOperationException();
175-
}
176-
};
221+
@Test
222+
public void newNameResolver_multipleScheme_javaNetUri() {
223+
NameResolverRegistry registry = new NameResolverRegistry();
224+
URI uri = javaNetUri;
225+
registry.register(
226+
new BaseProvider(true, 5, uri.getScheme()) {
227+
@Override
228+
public NameResolver newNameResolver(URI passedUri, NameResolver.Args passedArgs) {
229+
return null;
230+
}
231+
});
232+
final NameResolver nr = new DummyNameResolver();
177233
registry.register(
178234
new BaseProvider(true, 4, "other") {
179235
@Override
@@ -186,16 +242,17 @@ public NameResolver newNameResolver(URI passedUri, NameResolver.Args passedArgs)
186242
assertThat(registry.asFactory().newNameResolver(URI.create("/0.0.0.0:80"), args)).isNull();
187243
assertThat(registry.asFactory().newNameResolver(URI.create("///0.0.0.0:80"), args)).isNull();
188244
assertThat(registry.asFactory().newNameResolver(URI.create("other:///0.0.0.0:80"), args))
189-
.isSameInstanceAs(nr);
245+
.isSameInstanceAs(nr);
190246
assertThat(registry.asFactory().newNameResolver(URI.create("OTHER:///0.0.0.0:80"), args))
191-
.isSameInstanceAs(nr);
247+
.isSameInstanceAs(nr);
192248
assertThat(registry.asFactory().getDefaultScheme()).isEqualTo("dns");
193249
}
194250

195251
@Test
196252
public void newNameResolver_noProvider() {
197253
NameResolver.Factory factory = new NameResolverRegistry().asFactory();
198-
assertThat(factory.newNameResolver(uri, args)).isNull();
254+
assertThat(factory.newNameResolver(javaNetUri, args)).isNull();
255+
assertThat(factory.newNameResolver(ioGrpcUri, args)).isNull();
199256
assertThat(factory.getDefaultScheme()).isEqualTo("unknown");
200257
}
201258

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

321+
@Override
322+
public NameResolver newNameResolver(Uri targetUri, NameResolver.Args args) {
323+
throw new UnsupportedOperationException();
324+
}
325+
264326
@Override
265327
public String getDefaultScheme() {
266328
return scheme == null ? "scheme" + getClass().getSimpleName() : scheme;
267329
}
268330
}
331+
332+
private static class DummyNameResolver extends NameResolver {
333+
@Override
334+
public String getServiceAuthority() {
335+
throw new UnsupportedOperationException();
336+
}
337+
338+
@Override
339+
public void start(Listener2 listener) {
340+
throw new UnsupportedOperationException();
341+
}
342+
343+
@Override
344+
public void shutdown() {
345+
throw new UnsupportedOperationException();
346+
}
347+
}
269348
}

0 commit comments

Comments
 (0)