45
45
import com .google .re2j .Pattern ;
46
46
import io .grpc .CallOptions ;
47
47
import io .grpc .Channel ;
48
+ import io .grpc .ChannelLogger ;
48
49
import io .grpc .ClientCall ;
49
50
import io .grpc .ClientInterceptor ;
50
51
import io .grpc .ClientInterceptors ;
69
70
import io .grpc .SynchronizationContext ;
70
71
import io .grpc .internal .AutoConfiguredLoadBalancerFactory ;
71
72
import io .grpc .internal .FakeClock ;
73
+ import io .grpc .internal .GrpcUtil ;
72
74
import io .grpc .internal .JsonParser ;
73
75
import io .grpc .internal .JsonUtil ;
74
76
import io .grpc .internal .ObjectPool ;
114
116
import java .util .concurrent .ScheduledExecutorService ;
115
117
import java .util .concurrent .TimeUnit ;
116
118
import java .util .concurrent .atomic .AtomicLong ;
117
- import java .util .stream .Collectors ;
118
119
import javax .annotation .Nullable ;
119
120
import org .junit .After ;
120
121
import org .junit .Before ;
@@ -182,6 +183,15 @@ public ConfigOrError parseServiceConfig(Map<String, ?> rawServiceConfig) {
182
183
private TestCall <?, ?> testCall ;
183
184
private boolean originalEnableTimeout ;
184
185
private URI targetUri ;
186
+ private final NameResolver .Args nameResolverArgs = NameResolver .Args .newBuilder ()
187
+ .setDefaultPort (8080 )
188
+ .setProxyDetector (GrpcUtil .DEFAULT_PROXY_DETECTOR )
189
+ .setSynchronizationContext (syncContext )
190
+ .setServiceConfigParser (mock (NameResolver .ServiceConfigParser .class ))
191
+ .setChannelLogger (mock (ChannelLogger .class ))
192
+ .setScheduledExecutorService (fakeClock .getScheduledExecutorService ())
193
+ .build ();
194
+
185
195
186
196
@ Before
187
197
public void setUp () {
@@ -208,7 +218,7 @@ public void setUp() {
208
218
209
219
resolver = new XdsNameResolver (targetUri , null , AUTHORITY , null ,
210
220
serviceConfigParser , syncContext , scheduler ,
211
- xdsClientPoolFactory , mockRandom , filterRegistry , null , metricRecorder );
221
+ xdsClientPoolFactory , mockRandom , filterRegistry , null , metricRecorder , nameResolverArgs );
212
222
}
213
223
214
224
@ After
@@ -250,7 +260,7 @@ public List<String> getTargets() {
250
260
resolver = new XdsNameResolver (targetUri , null , AUTHORITY , null ,
251
261
serviceConfigParser , syncContext , scheduler ,
252
262
xdsClientPoolFactory , mockRandom , FilterRegistry .getDefaultRegistry (), null ,
253
- metricRecorder );
263
+ metricRecorder , nameResolverArgs );
254
264
resolver .start (mockListener );
255
265
verify (mockListener ).onError (errorCaptor .capture ());
256
266
Status error = errorCaptor .getValue ();
@@ -264,7 +274,7 @@ public void resolving_withTargetAuthorityNotFound() {
264
274
resolver = new XdsNameResolver (targetUri ,
265
275
"notfound.google.com" , AUTHORITY , null , serviceConfigParser , syncContext , scheduler ,
266
276
xdsClientPoolFactory , mockRandom , FilterRegistry .getDefaultRegistry (), null ,
267
- metricRecorder );
277
+ metricRecorder , nameResolverArgs );
268
278
resolver .start (mockListener );
269
279
verify (mockListener ).onError (errorCaptor .capture ());
270
280
Status error = errorCaptor .getValue ();
@@ -286,7 +296,7 @@ public void resolving_noTargetAuthority_templateWithoutXdstp() {
286
296
resolver = new XdsNameResolver (
287
297
targetUri , null , serviceAuthority , null , serviceConfigParser , syncContext ,
288
298
scheduler , xdsClientPoolFactory ,
289
- mockRandom , FilterRegistry .getDefaultRegistry (), null , metricRecorder );
299
+ mockRandom , FilterRegistry .getDefaultRegistry (), null , metricRecorder , nameResolverArgs );
290
300
resolver .start (mockListener );
291
301
verify (mockListener , never ()).onError (any (Status .class ));
292
302
}
@@ -307,7 +317,7 @@ public void resolving_noTargetAuthority_templateWithXdstp() {
307
317
resolver = new XdsNameResolver (
308
318
targetUri , null , serviceAuthority , null , serviceConfigParser , syncContext , scheduler ,
309
319
xdsClientPoolFactory , mockRandom , FilterRegistry .getDefaultRegistry (), null ,
310
- metricRecorder );
320
+ metricRecorder , nameResolverArgs );
311
321
resolver .start (mockListener );
312
322
verify (mockListener , never ()).onError (any (Status .class ));
313
323
}
@@ -328,7 +338,7 @@ public void resolving_noTargetAuthority_xdstpWithMultipleSlashes() {
328
338
resolver = new XdsNameResolver (
329
339
targetUri , null , serviceAuthority , null , serviceConfigParser , syncContext , scheduler ,
330
340
xdsClientPoolFactory , mockRandom , FilterRegistry .getDefaultRegistry (), null ,
331
- metricRecorder );
341
+ metricRecorder , nameResolverArgs );
332
342
333
343
334
344
// The Service Authority must be URL encoded, but unlike the LDS resource name.
@@ -357,7 +367,7 @@ public void resolving_targetAuthorityInAuthoritiesMap() {
357
367
resolver = new XdsNameResolver (targetUri ,
358
368
"xds.authority.com" , serviceAuthority , null , serviceConfigParser , syncContext , scheduler ,
359
369
xdsClientPoolFactory , mockRandom , FilterRegistry .getDefaultRegistry (), null ,
360
- metricRecorder );
370
+ metricRecorder , nameResolverArgs );
361
371
resolver .start (mockListener );
362
372
verify (mockListener , never ()).onError (any (Status .class ));
363
373
}
@@ -390,7 +400,7 @@ public void resolving_ldsResourceUpdateRdsName() {
390
400
resolver = new XdsNameResolver (targetUri , null , AUTHORITY , null ,
391
401
serviceConfigParser , syncContext , scheduler ,
392
402
xdsClientPoolFactory , mockRandom , FilterRegistry .getDefaultRegistry (), null ,
393
- metricRecorder );
403
+ metricRecorder , nameResolverArgs );
394
404
// use different ldsResourceName and service authority. The virtualhost lookup should use
395
405
// service authority.
396
406
expectedLdsResourceName = "test-" + expectedLdsResourceName ;
@@ -577,7 +587,7 @@ public void resolving_matchingVirtualHostNotFound_matchingOverrideAuthority() {
577
587
resolver = new XdsNameResolver (targetUri , null , AUTHORITY , "random" ,
578
588
serviceConfigParser , syncContext , scheduler ,
579
589
xdsClientPoolFactory , mockRandom , FilterRegistry .getDefaultRegistry (), null ,
580
- metricRecorder );
590
+ metricRecorder , nameResolverArgs );
581
591
resolver .start (mockListener );
582
592
FakeXdsClient xdsClient = (FakeXdsClient ) resolver .getXdsClient ();
583
593
xdsClient .deliverLdsUpdate (0L , Arrays .asList (virtualHost ));
@@ -602,7 +612,7 @@ public void resolving_matchingVirtualHostNotFound_notMatchingOverrideAuthority()
602
612
resolver = new XdsNameResolver (targetUri , null , AUTHORITY , "random" ,
603
613
serviceConfigParser , syncContext , scheduler ,
604
614
xdsClientPoolFactory , mockRandom , FilterRegistry .getDefaultRegistry (), null ,
605
- metricRecorder );
615
+ metricRecorder , nameResolverArgs );
606
616
resolver .start (mockListener );
607
617
FakeXdsClient xdsClient = (FakeXdsClient ) resolver .getXdsClient ();
608
618
// TODO Why does the test expect to have listener.onResult() called when this produces an error
@@ -616,7 +626,7 @@ public void resolving_matchingVirtualHostNotFoundForOverrideAuthority() {
616
626
resolver = new XdsNameResolver (targetUri , null , AUTHORITY , AUTHORITY ,
617
627
serviceConfigParser , syncContext , scheduler ,
618
628
xdsClientPoolFactory , mockRandom , FilterRegistry .getDefaultRegistry (), null ,
619
- metricRecorder );
629
+ metricRecorder , nameResolverArgs );
620
630
resolver .start (mockListener );
621
631
FakeXdsClient xdsClient = (FakeXdsClient ) resolver .getXdsClient ();
622
632
xdsClient .deliverLdsUpdate (0L , buildUnmatchedVirtualHosts ());
@@ -701,7 +711,7 @@ public void retryPolicyInPerMethodConfigGeneratedByResolverIsValid() {
701
711
true , 5 , 5 , new AutoConfiguredLoadBalancerFactory ("pick-first" ));
702
712
resolver = new XdsNameResolver (targetUri , null , AUTHORITY , null , realParser , syncContext ,
703
713
scheduler , xdsClientPoolFactory , mockRandom , FilterRegistry .getDefaultRegistry (), null ,
704
- metricRecorder );
714
+ metricRecorder , nameResolverArgs );
705
715
resolver .start (mockListener );
706
716
FakeXdsClient xdsClient = (FakeXdsClient ) resolver .getXdsClient ();
707
717
RetryPolicy retryPolicy = RetryPolicy .create (
@@ -912,7 +922,7 @@ public void resolved_rpcHashingByChannelId() {
912
922
resolver = new XdsNameResolver (targetUri , null , AUTHORITY , null , serviceConfigParser ,
913
923
syncContext , scheduler ,
914
924
xdsClientPoolFactory , mockRandom , FilterRegistry .getDefaultRegistry (), null ,
915
- metricRecorder );
925
+ metricRecorder , nameResolverArgs );
916
926
resolver .start (mockListener );
917
927
xdsClient = (FakeXdsClient ) resolver .getXdsClient ();
918
928
xdsClient .deliverLdsUpdate (
@@ -945,7 +955,7 @@ public void resolved_rpcHashingByChannelId() {
945
955
public void resolved_routeActionHasAutoHostRewrite_emitsCallOptionForTheSame () {
946
956
resolver = new XdsNameResolver (targetUri , null , AUTHORITY , null , serviceConfigParser ,
947
957
syncContext , scheduler , xdsClientPoolFactory , mockRandom ,
948
- FilterRegistry .getDefaultRegistry (), null , metricRecorder );
958
+ FilterRegistry .getDefaultRegistry (), null , metricRecorder , nameResolverArgs );
949
959
resolver .start (mockListener );
950
960
FakeXdsClient xdsClient = (FakeXdsClient ) resolver .getXdsClient ();
951
961
xdsClient .deliverLdsUpdate (
@@ -976,7 +986,7 @@ public void resolved_routeActionHasAutoHostRewrite_emitsCallOptionForTheSame() {
976
986
public void resolved_routeActionNoAutoHostRewrite_doesntEmitCallOptionForTheSame () {
977
987
resolver = new XdsNameResolver (targetUri , null , AUTHORITY , null , serviceConfigParser ,
978
988
syncContext , scheduler , xdsClientPoolFactory , mockRandom ,
979
- FilterRegistry .getDefaultRegistry (), null , metricRecorder );
989
+ FilterRegistry .getDefaultRegistry (), null , metricRecorder , nameResolverArgs );
980
990
resolver .start (mockListener );
981
991
FakeXdsClient xdsClient = (FakeXdsClient ) resolver .getXdsClient ();
982
992
xdsClient .deliverLdsUpdate (
@@ -1190,7 +1200,8 @@ public void resolved_simpleCallSucceeds_routeToWeightedCluster() {
1190
1200
}
1191
1201
1192
1202
/** Creates and delivers both CDS and EDS updates for the given clusters. */
1193
- private static void createAndDeliverClusterUpdates (FakeXdsClient xdsClient , String ... clusterNames ) {
1203
+ private static void createAndDeliverClusterUpdates (
1204
+ FakeXdsClient xdsClient , String ... clusterNames ) {
1194
1205
for (String clusterName : clusterNames ) {
1195
1206
CdsUpdate .Builder forEds = CdsUpdate .forEds (clusterName , clusterName , null , null , null , null )
1196
1207
.roundRobinLbPolicy ();
@@ -2110,10 +2121,10 @@ public <T extends ResourceUpdate> void watchXdsResource(XdsResourceType<T> resou
2110
2121
rdsResource = resourceName ;
2111
2122
rdsWatcher = (ResourceWatcher <RdsUpdate >) watcher ;
2112
2123
break ;
2113
- case "CDS" :
2114
- cdsWatchers .computeIfAbsent (resourceName , k -> new ArrayList <>())
2115
- .add ((ResourceWatcher <CdsUpdate >) watcher );
2116
- break ;
2124
+ case "CDS" :
2125
+ cdsWatchers .computeIfAbsent (resourceName , k -> new ArrayList <>())
2126
+ .add ((ResourceWatcher <CdsUpdate >) watcher );
2127
+ break ;
2117
2128
case "EDS" :
2118
2129
edsWatchers .computeIfAbsent (resourceName , k -> new ArrayList <>())
2119
2130
.add ((ResourceWatcher <EdsUpdate >) watcher );
@@ -2154,6 +2165,7 @@ public <T extends ResourceUpdate> void cancelXdsResourceWatch(XdsResourceType<T>
2154
2165
default :
2155
2166
}
2156
2167
}
2168
+
2157
2169
void deliverLdsUpdateOnly (long httpMaxStreamDurationNano , List <VirtualHost > virtualHosts ) {
2158
2170
syncContext .execute (() -> {
2159
2171
ldsWatcher .onChanged (LdsUpdate .forApiListener (HttpConnectionManager .forVirtualHosts (
@@ -2362,16 +2374,6 @@ private void deliverCdsUpdate(String clusterName, CdsUpdate update) {
2362
2374
});
2363
2375
}
2364
2376
2365
- private void deliverCdsResourceNotExist (String clusterName ) {
2366
- if (!cdsWatchers .containsKey (clusterName )) {
2367
- return ;
2368
- }
2369
- syncContext .execute (() -> {
2370
- ImmutableList .copyOf (cdsWatchers .get (clusterName ))
2371
- .forEach (w -> w .onResourceDoesNotExist (clusterName ));
2372
- });
2373
- }
2374
-
2375
2377
private void deliverEdsUpdate (String name , EdsUpdate update ) {
2376
2378
syncContext .execute (() -> {
2377
2379
if (!edsWatchers .containsKey (name )) {
0 commit comments