@@ -131,15 +131,29 @@ func (s) TestDelegatingResolverNoProxyEnvVarsSet(t *testing.T) {
131
131
// overwriting the previously registered DNS resolver. This allows the test to
132
132
// mock the DNS resolution for the proxy resolver. It also registers the
133
133
// original DNS resolver after the test is done.
134
- func setupDNS (t * testing.T ) * manual.Resolver {
134
+ func setupDNS (t * testing.T ) ( * manual.Resolver , chan struct {}) {
135
135
t .Helper ()
136
136
mr := manual .NewBuilderWithScheme ("dns" )
137
137
138
138
dnsResolverBuilder := resolver .Get ("dns" )
139
139
resolver .Register (mr )
140
140
141
+ resolverBuilt := make (chan struct {})
142
+ mr .BuildCallback = func (resolver.Target , resolver.ClientConn , resolver.BuildOptions ) {
143
+ close (resolverBuilt )
144
+ }
145
+
141
146
t .Cleanup (func () { resolver .Register (dnsResolverBuilder ) })
142
- return mr
147
+ return mr , resolverBuilt
148
+ }
149
+
150
+ func mustBuildResolver (ctx context.Context , t * testing.T , buildCh chan struct {}) {
151
+ t .Helper ()
152
+ select {
153
+ case <- buildCh :
154
+ case <- ctx .Done ():
155
+ t .Fatalf ("Context timed out waiting for resolver to be built." )
156
+ }
143
157
}
144
158
145
159
// proxyAddressWithTargetAttribute creates a resolver.Address for the proxy,
@@ -181,7 +195,7 @@ func (s) TestDelegatingResolverwithDNSAndProxyWithTargetResolution(t *testing.T)
181
195
targetResolver := manual .NewBuilderWithScheme ("dns" )
182
196
target := targetResolver .Scheme () + ":///" + targetTestAddr
183
197
// Set up a manual DNS resolver to control the proxy address resolution.
184
- proxyResolver := setupDNS (t )
198
+ proxyResolver , proxyResolverBuilt := setupDNS (t )
185
199
186
200
tcc , stateCh , _ := createTestResolverClientConn (t )
187
201
if _ , err := delegatingresolver .New (resolver.Target {URL : * testutils .MustParseURL (target )}, tcc , resolver.BuildOptions {}, targetResolver , true ); err != nil {
@@ -202,6 +216,11 @@ func (s) TestDelegatingResolverwithDNSAndProxyWithTargetResolution(t *testing.T)
202
216
case <- time .After (defaultTestShortTimeout ):
203
217
}
204
218
219
+ ctx , cancel := context .WithTimeout (context .Background (), defaultTestTimeout )
220
+ defer cancel ()
221
+
222
+ // Wait for the proxy resolver to be built before calling UpdateState.
223
+ mustBuildResolver (ctx , t , proxyResolverBuilt )
205
224
proxyResolver .UpdateState (resolver.State {
206
225
Addresses : []resolver.Address {{Addr : resolvedProxyTestAddr1 }},
207
226
ServiceConfig : & serviceconfig.ParseResult {},
@@ -218,8 +237,8 @@ func (s) TestDelegatingResolverwithDNSAndProxyWithTargetResolution(t *testing.T)
218
237
var gotState resolver.State
219
238
select {
220
239
case gotState = <- stateCh :
221
- case <- time . After ( defaultTestTimeout ):
222
- t .Fatal ("Timeout when waiting for a state update from the delegating resolver" )
240
+ case <- ctx . Done ( ):
241
+ t .Fatal ("Context timeed out when waiting for a state update from the delegating resolver" )
223
242
}
224
243
225
244
if diff := cmp .Diff (gotState , wantState ); diff != "" {
@@ -257,13 +276,18 @@ func (s) TestDelegatingResolverwithDNSAndProxyWithNoTargetResolution(t *testing.
257
276
targetResolver := manual .NewBuilderWithScheme ("dns" )
258
277
target := targetResolver .Scheme () + ":///" + targetTestAddr
259
278
// Set up a manual DNS resolver to control the proxy address resolution.
260
- proxyResolver := setupDNS (t )
279
+ proxyResolver , proxyResolverBuilt := setupDNS (t )
261
280
262
281
tcc , stateCh , _ := createTestResolverClientConn (t )
263
282
if _ , err := delegatingresolver .New (resolver.Target {URL : * testutils .MustParseURL (target )}, tcc , resolver.BuildOptions {}, targetResolver , false ); err != nil {
264
283
t .Fatalf ("Failed to create delegating resolver: %v" , err )
265
284
}
266
285
286
+ ctx , cancel := context .WithTimeout (context .Background (), defaultTestTimeout )
287
+ defer cancel ()
288
+
289
+ // Wait for the proxy resolver to be built before calling UpdateState.
290
+ mustBuildResolver (ctx , t , proxyResolverBuilt )
267
291
proxyResolver .UpdateState (resolver.State {
268
292
Addresses : []resolver.Address {
269
293
{Addr : resolvedProxyTestAddr1 },
@@ -278,8 +302,8 @@ func (s) TestDelegatingResolverwithDNSAndProxyWithNoTargetResolution(t *testing.
278
302
var gotState resolver.State
279
303
select {
280
304
case gotState = <- stateCh :
281
- case <- time . After ( defaultTestTimeout ):
282
- t .Fatal ("Timeout when waiting for a state update from the delegating resolver" )
305
+ case <- ctx . Done ( ):
306
+ t .Fatal ("Context timed out when waiting for a state update from the delegating resolver" )
283
307
}
284
308
285
309
if diff := cmp .Diff (gotState , wantState ); diff != "" {
@@ -319,7 +343,7 @@ func (s) TestDelegatingResolverwithCustomResolverAndProxy(t *testing.T) {
319
343
targetResolver := manual .NewBuilderWithScheme ("test" )
320
344
target := targetResolver .Scheme () + ":///" + targetTestAddr
321
345
// Set up a manual DNS resolver to control the proxy address resolution.
322
- proxyResolver := setupDNS (t )
346
+ proxyResolver , proxyResolverBuilt := setupDNS (t )
323
347
324
348
tcc , stateCh , _ := createTestResolverClientConn (t )
325
349
if _ , err := delegatingresolver .New (resolver.Target {URL : * testutils .MustParseURL (target )}, tcc , resolver.BuildOptions {}, targetResolver , false ); err != nil {
@@ -340,6 +364,11 @@ func (s) TestDelegatingResolverwithCustomResolverAndProxy(t *testing.T) {
340
364
case <- time .After (defaultTestShortTimeout ):
341
365
}
342
366
367
+ ctx , cancel := context .WithTimeout (context .Background (), defaultTestTimeout )
368
+ defer cancel ()
369
+
370
+ // Wait for the proxy resolver to be built before calling UpdateState.
371
+ mustBuildResolver (ctx , t , proxyResolverBuilt )
343
372
proxyResolver .UpdateState (resolver.State {
344
373
Addresses : []resolver.Address {{Addr : resolvedProxyTestAddr1 }},
345
374
ServiceConfig : & serviceconfig.ParseResult {},
@@ -355,8 +384,8 @@ func (s) TestDelegatingResolverwithCustomResolverAndProxy(t *testing.T) {
355
384
var gotState resolver.State
356
385
select {
357
386
case gotState = <- stateCh :
358
- case <- time . After ( defaultTestTimeout ):
359
- t .Fatal ("Timeout when waiting for a state update from the delegating resolver" )
387
+ case <- ctx . Done ( ):
388
+ t .Fatal ("Context timed out when waiting for a state update from the delegating resolver" )
360
389
}
361
390
362
391
if diff := cmp .Diff (gotState , wantState ); diff != "" {
@@ -401,7 +430,7 @@ func (s) TestDelegatingResolverForEndpointsWithProxy(t *testing.T) {
401
430
targetResolver := manual .NewBuilderWithScheme ("test" )
402
431
target := targetResolver .Scheme () + ":///" + targetTestAddr
403
432
// Set up a manual DNS resolver to control the proxy address resolution.
404
- proxyResolver := setupDNS (t )
433
+ proxyResolver , proxyResolverBuilt := setupDNS (t )
405
434
406
435
tcc , stateCh , _ := createTestResolverClientConn (t )
407
436
if _ , err := delegatingresolver .New (resolver.Target {URL : * testutils .MustParseURL (target )}, tcc , resolver.BuildOptions {}, targetResolver , false ); err != nil {
@@ -429,6 +458,11 @@ func (s) TestDelegatingResolverForEndpointsWithProxy(t *testing.T) {
429
458
case <- time .After (defaultTestShortTimeout ):
430
459
}
431
460
461
+ ctx , cancel := context .WithTimeout (context .Background (), defaultTestTimeout )
462
+ defer cancel ()
463
+
464
+ // Wait for the proxy resolver to be built before calling UpdateState.
465
+ mustBuildResolver (ctx , t , proxyResolverBuilt )
432
466
proxyResolver .UpdateState (resolver.State {
433
467
Endpoints : []resolver.Endpoint {
434
468
{Addresses : []resolver.Address {{Addr : resolvedProxyTestAddr1 }}},
@@ -460,8 +494,8 @@ func (s) TestDelegatingResolverForEndpointsWithProxy(t *testing.T) {
460
494
var gotState resolver.State
461
495
select {
462
496
case gotState = <- stateCh :
463
- case <- time . After ( defaultTestTimeout ):
464
- t .Fatal ("Timeout when waiting for a state update from the delegating resolver" )
497
+ case <- ctx . Done ( ):
498
+ t .Fatal ("Contex timed out when waiting for a state update from the delegating resolver" )
465
499
}
466
500
467
501
if diff := cmp .Diff (gotState , wantState ); diff != "" {
@@ -503,8 +537,7 @@ func (s) TestDelegatingResolverForMultipleProxyAddress(t *testing.T) {
503
537
targetResolver := manual .NewBuilderWithScheme ("test" )
504
538
target := targetResolver .Scheme () + ":///" + targetTestAddr
505
539
// Set up a manual DNS resolver to control the proxy address resolution.
506
- proxyResolver := setupDNS (t )
507
-
540
+ proxyResolver , proxyResolverBuilt := setupDNS (t )
508
541
tcc , stateCh , _ := createTestResolverClientConn (t )
509
542
if _ , err := delegatingresolver .New (resolver.Target {URL : * testutils .MustParseURL (target )}, tcc , resolver.BuildOptions {}, targetResolver , false ); err != nil {
510
543
t .Fatalf ("Failed to create delegating resolver: %v" , err )
@@ -524,6 +557,11 @@ func (s) TestDelegatingResolverForMultipleProxyAddress(t *testing.T) {
524
557
case <- time .After (defaultTestShortTimeout ):
525
558
}
526
559
560
+ ctx , cancel := context .WithTimeout (context .Background (), defaultTestTimeout )
561
+ defer cancel ()
562
+
563
+ // Wait for the proxy resolver to be built before calling UpdateState.
564
+ mustBuildResolver (ctx , t , proxyResolverBuilt )
527
565
proxyResolver .UpdateState (resolver.State {
528
566
Addresses : []resolver.Address {
529
567
{Addr : resolvedProxyTestAddr1 },
@@ -542,8 +580,8 @@ func (s) TestDelegatingResolverForMultipleProxyAddress(t *testing.T) {
542
580
var gotState resolver.State
543
581
select {
544
582
case gotState = <- stateCh :
545
- case <- time . After ( defaultTestTimeout ):
546
- t .Fatal ("Timeout when waiting for a state update from the delegating resolver" )
583
+ case <- ctx . Done ( ):
584
+ t .Fatal ("Context timed out when waiting for a state update from the delegating resolver" )
547
585
}
548
586
549
587
if diff := cmp .Diff (gotState , wantState ); diff != "" {
@@ -586,12 +624,8 @@ func (s) TestDelegatingResolverUpdateStateDuringClose(t *testing.T) {
586
624
587
625
target := targetResolver .Scheme () + ":///" + "ignored"
588
626
// Set up a manual DNS resolver to control the proxy address resolution.
589
- proxyResolver := setupDNS (t )
627
+ proxyResolver , proxyResolverBuilt := setupDNS (t )
590
628
591
- proxyResolverBuilt := make (chan struct {})
592
- proxyResolver .BuildCallback = func (resolver.Target , resolver.ClientConn , resolver.BuildOptions ) {
593
- close (proxyResolverBuilt )
594
- }
595
629
unblockProxyResolverClose := make (chan struct {}, 1 )
596
630
proxyResolver .CloseCallback = func () {
597
631
<- unblockProxyResolverClose
@@ -614,11 +648,7 @@ func (s) TestDelegatingResolverUpdateStateDuringClose(t *testing.T) {
614
648
// Wait for the proxy resolver to be built before calling Close.
615
649
ctx , cancel := context .WithTimeout (context .Background (), defaultTestTimeout )
616
650
defer cancel ()
617
- select {
618
- case <- proxyResolverBuilt :
619
- case <- ctx .Done ():
620
- t .Fatalf ("Context timed out waiting for proxy resolver to be built." )
621
- }
651
+ mustBuildResolver (ctx , t , proxyResolverBuilt )
622
652
// Closing the delegating resolver will block until the test writes to the
623
653
// unblockProxyResolverClose channel.
624
654
go dr .Close ()
@@ -677,7 +707,7 @@ func (s) TestDelegatingResolverUpdateStateFromResolveNow(t *testing.T) {
677
707
678
708
target := targetResolver .Scheme () + ":///" + "ignored"
679
709
// Set up a manual DNS resolver to control the proxy address resolution.
680
- proxyResolver := setupDNS (t )
710
+ proxyResolver , proxyResolverBuilt := setupDNS (t )
681
711
682
712
tcc , _ , _ := createTestResolverClientConn (t )
683
713
tcc .UpdateStateF = func (resolver.State ) error {
@@ -692,14 +722,18 @@ func (s) TestDelegatingResolverUpdateStateFromResolveNow(t *testing.T) {
692
722
Endpoints : []resolver.Endpoint {{Addresses : []resolver.Address {{Addr : "1.1.1.1" }}}},
693
723
})
694
724
725
+ ctx , cancel := context .WithTimeout (context .Background (), defaultTestTimeout )
726
+ defer cancel ()
727
+
728
+ // Wait for the proxy resolver to be built before calling UpdateState.
729
+ mustBuildResolver (ctx , t , proxyResolverBuilt )
730
+
695
731
// Updating the channel will result in an error being returned. The
696
732
// delegating resolver should call call "ResolveNow" on the target resolver.
697
733
proxyResolver .UpdateState (resolver.State {
698
734
Endpoints : []resolver.Endpoint {{Addresses : []resolver.Address {{Addr : "1.1.1.1" }}}},
699
735
})
700
736
701
- ctx , cancel := context .WithTimeout (context .Background (), defaultTestTimeout )
702
- defer cancel ()
703
737
select {
704
738
case <- targetResolverCalled :
705
739
case <- ctx .Done ():
@@ -737,12 +771,9 @@ func (s) TestDelegatingResolverResolveNow(t *testing.T) {
737
771
738
772
target := targetResolver .Scheme () + ":///" + "ignored"
739
773
// Set up a manual DNS resolver to control the proxy address resolution.
740
- proxyResolver := setupDNS (t )
774
+ proxyResolver , proxyResolverBuilt := setupDNS (t )
775
+
741
776
proxyResolverCalled := make (chan struct {})
742
- proxyResolverBuilt := make (chan struct {})
743
- proxyResolver .BuildCallback = func (resolver.Target , resolver.ClientConn , resolver.BuildOptions ) {
744
- close (proxyResolverBuilt )
745
- }
746
777
proxyResolver .ResolveNowCallback = func (resolver.ResolveNowOptions ) {
747
778
// Updating the resolver state should not deadlock.
748
779
proxyResolver .CC ().UpdateState (resolver.State {
@@ -770,12 +801,7 @@ func (s) TestDelegatingResolverResolveNow(t *testing.T) {
770
801
t .Fatalf ("context timed out waiting for targetResolver.ResolveNow() to be called." )
771
802
}
772
803
773
- // Wait for proxy resolver to be built.
774
- select {
775
- case <- proxyResolverBuilt :
776
- case <- ctx .Done ():
777
- t .Fatalf ("Timeout when waiting for proxy resolver to be built" )
778
- }
804
+ mustBuildResolver (ctx , t , proxyResolverBuilt )
779
805
780
806
dr .ResolveNow (resolver.ResolveNowOptions {})
781
807
@@ -821,11 +847,7 @@ func (s) TestDelegatingResolverForNonTCPTarget(t *testing.T) {
821
847
targetResolver := manual .NewBuilderWithScheme ("test" )
822
848
target := targetResolver .Scheme () + ":///" + targetTestAddr
823
849
// Set up a manual DNS resolver to control the proxy address resolution.
824
- proxyResolver := setupDNS (t )
825
- proxyBuildCalled := make (chan struct {})
826
- proxyResolver .BuildCallback = func (resolver.Target , resolver.ClientConn , resolver.BuildOptions ) {
827
- close (proxyBuildCalled )
828
- }
850
+ _ , proxyResolverBuilt := setupDNS (t )
829
851
830
852
tcc , stateCh , _ := createTestResolverClientConn (t )
831
853
if _ , err := delegatingresolver .New (resolver.Target {URL : * testutils .MustParseURL (target )}, tcc , resolver.BuildOptions {}, targetResolver , false ); err != nil {
@@ -850,7 +872,7 @@ func (s) TestDelegatingResolverForNonTCPTarget(t *testing.T) {
850
872
// Verify that the delegating resolver doesn't call proxy resolver's
851
873
// UpdateState since we have no tcp address
852
874
select {
853
- case <- proxyBuildCalled :
875
+ case <- proxyResolverBuilt :
854
876
t .Fatal ("Unexpected call to proxy resolver update state" )
855
877
case <- time .After (defaultTestShortTimeout ):
856
878
}
@@ -900,7 +922,7 @@ func (s) TestDelegatingResolverForMixNetworkType(t *testing.T) {
900
922
targetResolver := manual .NewBuilderWithScheme ("test" )
901
923
target := targetResolver .Scheme () + ":///" + targetTestAddr
902
924
// Set up a manual DNS resolver to control the proxy address resolution.
903
- proxyResolver := setupDNS (t )
925
+ proxyResolver , proxyResolverBuilt := setupDNS (t )
904
926
905
927
tcc , stateCh , _ := createTestResolverClientConn (t )
906
928
if _ , err := delegatingresolver .New (resolver.Target {URL : * testutils .MustParseURL (target )}, tcc , resolver.BuildOptions {}, targetResolver , false ); err != nil {
@@ -920,6 +942,11 @@ func (s) TestDelegatingResolverForMixNetworkType(t *testing.T) {
920
942
case <- time .After (defaultTestShortTimeout ):
921
943
}
922
944
945
+ ctx , cancel := context .WithTimeout (context .Background (), defaultTestTimeout )
946
+ defer cancel ()
947
+
948
+ // Wait for the proxy resolver to be built before calling UpdateState.
949
+ mustBuildResolver (ctx , t , proxyResolverBuilt )
923
950
proxyResolver .UpdateState (resolver.State {
924
951
Addresses : []resolver.Address {{Addr : envProxyAddr }},
925
952
ServiceConfig : & serviceconfig.ParseResult {},
@@ -928,8 +955,8 @@ func (s) TestDelegatingResolverForMixNetworkType(t *testing.T) {
928
955
var gotState resolver.State
929
956
select {
930
957
case gotState = <- stateCh :
931
- case <- time . After ( defaultTestTimeout ):
932
- t .Fatal ("Timeout when waiting for a state update from the delegating resolver" )
958
+ case <- ctx . Done ( ):
959
+ t .Fatal ("Context timed out when waiting for a state update from the delegating resolver" )
933
960
}
934
961
wantState := resolver.State {
935
962
Addresses : []resolver.Address {nonTCPAddr , proxyAddressWithTargetAttribute (envProxyAddr , resolvedTargetTestAddr2 )},
0 commit comments