25
25
import java .lang .Thread .UncaughtExceptionHandler ;
26
26
import java .net .URI ;
27
27
import java .util .List ;
28
+ import java .util .Map ;
28
29
import org .junit .Test ;
29
30
import org .junit .runner .RunWith ;
30
31
import org .junit .runners .JUnit4 ;
@@ -59,12 +60,16 @@ public void deregister() {
59
60
NameResolverProvider p1 = new BaseProvider (true , 5 );
60
61
NameResolverProvider p2 = new BaseProvider (true , 5 );
61
62
NameResolverProvider p3 = new BaseProvider (true , 5 );
63
+ String sameScheme = p1 .getDefaultScheme ();
62
64
reg .register (p1 );
63
65
reg .register (p2 );
64
66
reg .register (p3 );
65
- assertThat (reg .providers ()). containsExactly ( p1 , p2 , p3 ). inOrder ( );
67
+ assertThat (reg .providers (). get ( sameScheme )). isSameInstanceAs ( p1 );
66
68
reg .deregister (p2 );
67
- assertThat (reg .providers ()).containsExactly (p1 , p3 ).inOrder ();
69
+ assertThat (reg .providers ().get (sameScheme )).isSameInstanceAs (p1 );
70
+ reg .deregister (p1 );
71
+ assertThat (reg .providers ().get (sameScheme )).isSameInstanceAs (p3 );
72
+
68
73
}
69
74
70
75
@ Test
@@ -75,12 +80,13 @@ public void provider_sorted() {
75
80
NameResolverProvider p3 = new BaseProvider (true , 8 );
76
81
NameResolverProvider p4 = new BaseProvider (true , 3 );
77
82
NameResolverProvider p5 = new BaseProvider (true , 8 );
83
+ String sameScheme = p1 .getDefaultScheme ();
78
84
reg .register (p1 );
79
85
reg .register (p2 );
80
86
reg .register (p3 );
81
87
reg .register (p4 );
82
88
reg .register (p5 );
83
- assertThat (reg .providers ()). containsExactly ( p3 , p5 , p1 , p2 , p4 ). inOrder ( );
89
+ assertThat (reg .providers (). get ( sameScheme )). isSameInstanceAs ( p3 );
84
90
}
85
91
86
92
@ Test
@@ -93,7 +99,7 @@ public void getDefaultScheme_noProvider() {
93
99
public void newNameResolver_providerReturnsNull () {
94
100
NameResolverRegistry registry = new NameResolverRegistry ();
95
101
registry .register (
96
- new BaseProvider (true , 5 ) {
102
+ new BaseProvider (true , 5 , "noScheme" ) {
97
103
@ Override
98
104
public NameResolver newNameResolver (URI passedUri , NameResolver .Args passedArgs ) {
99
105
assertThat (passedUri ).isSameInstanceAs (uri );
@@ -102,12 +108,13 @@ public NameResolver newNameResolver(URI passedUri, NameResolver.Args passedArgs)
102
108
}
103
109
});
104
110
assertThat (registry .asFactory ().newNameResolver (uri , args )).isNull ();
111
+ assertThat (registry .asFactory ().getDefaultScheme ()).isEqualTo ("noScheme" );
105
112
}
106
113
107
114
@ Test
108
115
public void newNameResolver_providerReturnsNonNull () {
109
116
NameResolverRegistry registry = new NameResolverRegistry ();
110
- registry .register (new BaseProvider (true , 5 ) {
117
+ registry .register (new BaseProvider (true , 5 , uri . getScheme () ) {
111
118
@ Override
112
119
public NameResolver newNameResolver (URI passedUri , NameResolver .Args passedArgs ) {
113
120
return null ;
@@ -127,38 +134,75 @@ public NameResolver newNameResolver(URI passedUri, NameResolver.Args passedArgs)
127
134
}
128
135
};
129
136
registry .register (
130
- new BaseProvider (true , 4 ) {
137
+ new BaseProvider (true , 4 , uri . getScheme () ) {
131
138
@ Override
132
139
public NameResolver newNameResolver (URI passedUri , NameResolver .Args passedArgs ) {
133
140
return nr ;
134
141
}
135
142
});
136
143
registry .register (
137
- new BaseProvider (true , 3 ) {
144
+ new BaseProvider (true , 3 , uri . getScheme () ) {
138
145
@ Override
139
146
public NameResolver newNameResolver (URI passedUri , NameResolver .Args passedArgs ) {
140
147
fail ("Should not be called" );
141
148
throw new AssertionError ();
142
149
}
143
150
});
144
- assertThat (registry .asFactory ().newNameResolver (uri , args )).isSameInstanceAs (nr );
151
+ assertThat (registry .asFactory ().newNameResolver (uri , args )).isNull ();
152
+ assertThat (registry .asFactory ().getDefaultScheme ()).isEqualTo (uri .getScheme ());
153
+ }
154
+
155
+ @ Test
156
+ public void newNameResolver_multipleScheme () {
157
+ 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
+ }
168
+
169
+ @ Override public void start (Listener2 listener ) {
170
+ throw new UnsupportedOperationException ();
171
+ }
172
+
173
+ @ Override public void shutdown () {
174
+ throw new UnsupportedOperationException ();
175
+ }
176
+ };
177
+ registry .register (
178
+ new BaseProvider (true , 4 , "other" ) {
179
+ @ Override
180
+ public NameResolver newNameResolver (URI passedUri , NameResolver .Args passedArgs ) {
181
+ return nr ;
182
+ }
183
+ });
184
+
185
+ assertThat (registry .asFactory ().newNameResolver (uri , args )).isNull ();
186
+ assertThat (registry .asFactory ().newNameResolver (URI .create ("other:///0.0.0.0:80" ), args ))
187
+ .isSameInstanceAs (nr );
188
+ assertThat (registry .asFactory ().getDefaultScheme ()).isEqualTo ("dns" );
145
189
}
146
190
147
191
@ Test
148
192
public void newNameResolver_noProvider () {
149
193
NameResolver .Factory factory = new NameResolverRegistry ().asFactory ();
150
194
assertThat (factory .newNameResolver (uri , args )).isNull ();
195
+ assertThat (factory .getDefaultScheme ()).isEqualTo ("unknown" );
151
196
}
152
197
153
198
@ Test
154
199
public void baseProviders () {
155
- List <NameResolverProvider > providers = NameResolverRegistry .getDefaultRegistry ().providers ();
156
- assertThat (providers ).hasSize (2 );
157
- // 2 name resolvers from grpclb and core, ordered with decreasing priorities.
158
- assertThat (providers .get (0 ).getClass ().getName ())
200
+ Map <String , NameResolverProvider > providers =
201
+ NameResolverRegistry .getDefaultRegistry ().providers ();
202
+ assertThat (providers ).hasSize (1 );
203
+ // 2 name resolvers from grpclb and core, higher priority one is returned.
204
+ assertThat (providers .get ("dns" ).getClass ().getName ())
159
205
.isEqualTo ("io.grpc.grpclb.SecretGrpclbNameResolverProvider$Provider" );
160
- assertThat (providers .get (1 ).getClass ().getName ())
161
- .isEqualTo ("io.grpc.internal.DnsNameResolverProvider" );
162
206
assertThat (NameResolverRegistry .getDefaultRegistry ().asFactory ().getDefaultScheme ())
163
207
.isEqualTo ("dns" );
164
208
}
@@ -184,10 +228,18 @@ NameResolverProvider.class, getClass().getClassLoader())) {
184
228
private static class BaseProvider extends NameResolverProvider {
185
229
private final boolean isAvailable ;
186
230
private final int priority ;
231
+ private final String scheme ;
187
232
188
233
public BaseProvider (boolean isAvailable , int priority ) {
189
234
this .isAvailable = isAvailable ;
190
235
this .priority = priority ;
236
+ this .scheme = null ;
237
+ }
238
+
239
+ public BaseProvider (boolean isAvailable , int priority , String scheme ) {
240
+ this .isAvailable = isAvailable ;
241
+ this .priority = priority ;
242
+ this .scheme = scheme ;
191
243
}
192
244
193
245
@ Override
@@ -207,7 +259,7 @@ public NameResolver newNameResolver(URI targetUri, NameResolver.Args args) {
207
259
208
260
@ Override
209
261
public String getDefaultScheme () {
210
- return "scheme" + getClass ().getSimpleName ();
262
+ return scheme == null ? "scheme" + getClass ().getSimpleName () : scheme ;
211
263
}
212
264
}
213
265
}
0 commit comments