@@ -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,7 +624,7 @@ 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
629
unblockProxyResolverClose := make (chan struct {}, 1 )
592
630
proxyResolver .CloseCallback = func () {
@@ -607,11 +645,13 @@ func (s) TestDelegatingResolverUpdateStateDuringClose(t *testing.T) {
607
645
Endpoints : []resolver.Endpoint {{Addresses : []resolver.Address {{Addr : "1.1.1.1" }}}},
608
646
})
609
647
648
+ // Wait for the proxy resolver to be built before calling Close.
649
+ ctx , cancel := context .WithTimeout (context .Background (), defaultTestTimeout )
650
+ defer cancel ()
651
+ mustBuildResolver (ctx , t , proxyResolverBuilt )
610
652
// Closing the delegating resolver will block until the test writes to the
611
653
// unblockProxyResolverClose channel.
612
654
go dr .Close ()
613
- ctx , cancel := context .WithTimeout (context .Background (), defaultTestTimeout )
614
- defer cancel ()
615
655
select {
616
656
case <- targetResolverCloseCalled :
617
657
case <- ctx .Done ():
@@ -667,7 +707,7 @@ func (s) TestDelegatingResolverUpdateStateFromResolveNow(t *testing.T) {
667
707
668
708
target := targetResolver .Scheme () + ":///" + "ignored"
669
709
// Set up a manual DNS resolver to control the proxy address resolution.
670
- proxyResolver := setupDNS (t )
710
+ proxyResolver , proxyResolverBuilt := setupDNS (t )
671
711
672
712
tcc , _ , _ := createTestResolverClientConn (t )
673
713
tcc .UpdateStateF = func (resolver.State ) error {
@@ -682,14 +722,18 @@ func (s) TestDelegatingResolverUpdateStateFromResolveNow(t *testing.T) {
682
722
Endpoints : []resolver.Endpoint {{Addresses : []resolver.Address {{Addr : "1.1.1.1" }}}},
683
723
})
684
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
+
685
731
// Updating the channel will result in an error being returned. The
686
732
// delegating resolver should call call "ResolveNow" on the target resolver.
687
733
proxyResolver .UpdateState (resolver.State {
688
734
Endpoints : []resolver.Endpoint {{Addresses : []resolver.Address {{Addr : "1.1.1.1" }}}},
689
735
})
690
736
691
- ctx , cancel := context .WithTimeout (context .Background (), defaultTestTimeout )
692
- defer cancel ()
693
737
select {
694
738
case <- targetResolverCalled :
695
739
case <- ctx .Done ():
@@ -727,12 +771,9 @@ func (s) TestDelegatingResolverResolveNow(t *testing.T) {
727
771
728
772
target := targetResolver .Scheme () + ":///" + "ignored"
729
773
// Set up a manual DNS resolver to control the proxy address resolution.
730
- proxyResolver := setupDNS (t )
774
+ proxyResolver , proxyResolverBuilt := setupDNS (t )
775
+
731
776
proxyResolverCalled := make (chan struct {})
732
- proxyResolverBuilt := make (chan struct {})
733
- proxyResolver .BuildCallback = func (resolver.Target , resolver.ClientConn , resolver.BuildOptions ) {
734
- close (proxyResolverBuilt )
735
- }
736
777
proxyResolver .ResolveNowCallback = func (resolver.ResolveNowOptions ) {
737
778
// Updating the resolver state should not deadlock.
738
779
proxyResolver .CC ().UpdateState (resolver.State {
@@ -760,12 +801,7 @@ func (s) TestDelegatingResolverResolveNow(t *testing.T) {
760
801
t .Fatalf ("context timed out waiting for targetResolver.ResolveNow() to be called." )
761
802
}
762
803
763
- // Wait for proxy resolver to be built.
764
- select {
765
- case <- proxyResolverBuilt :
766
- case <- ctx .Done ():
767
- t .Fatalf ("Timeout when waiting for proxy resolver to be built" )
768
- }
804
+ mustBuildResolver (ctx , t , proxyResolverBuilt )
769
805
770
806
dr .ResolveNow (resolver.ResolveNowOptions {})
771
807
@@ -811,11 +847,7 @@ func (s) TestDelegatingResolverForNonTCPTarget(t *testing.T) {
811
847
targetResolver := manual .NewBuilderWithScheme ("test" )
812
848
target := targetResolver .Scheme () + ":///" + targetTestAddr
813
849
// Set up a manual DNS resolver to control the proxy address resolution.
814
- proxyResolver := setupDNS (t )
815
- proxyBuildCalled := make (chan struct {})
816
- proxyResolver .BuildCallback = func (resolver.Target , resolver.ClientConn , resolver.BuildOptions ) {
817
- close (proxyBuildCalled )
818
- }
850
+ _ , proxyResolverBuilt := setupDNS (t )
819
851
820
852
tcc , stateCh , _ := createTestResolverClientConn (t )
821
853
if _ , err := delegatingresolver .New (resolver.Target {URL : * testutils .MustParseURL (target )}, tcc , resolver.BuildOptions {}, targetResolver , false ); err != nil {
@@ -840,7 +872,7 @@ func (s) TestDelegatingResolverForNonTCPTarget(t *testing.T) {
840
872
// Verify that the delegating resolver doesn't call proxy resolver's
841
873
// UpdateState since we have no tcp address
842
874
select {
843
- case <- proxyBuildCalled :
875
+ case <- proxyResolverBuilt :
844
876
t .Fatal ("Unexpected call to proxy resolver update state" )
845
877
case <- time .After (defaultTestShortTimeout ):
846
878
}
@@ -890,7 +922,7 @@ func (s) TestDelegatingResolverForMixNetworkType(t *testing.T) {
890
922
targetResolver := manual .NewBuilderWithScheme ("test" )
891
923
target := targetResolver .Scheme () + ":///" + targetTestAddr
892
924
// Set up a manual DNS resolver to control the proxy address resolution.
893
- proxyResolver := setupDNS (t )
925
+ proxyResolver , proxyResolverBuilt := setupDNS (t )
894
926
895
927
tcc , stateCh , _ := createTestResolverClientConn (t )
896
928
if _ , err := delegatingresolver .New (resolver.Target {URL : * testutils .MustParseURL (target )}, tcc , resolver.BuildOptions {}, targetResolver , false ); err != nil {
@@ -910,6 +942,11 @@ func (s) TestDelegatingResolverForMixNetworkType(t *testing.T) {
910
942
case <- time .After (defaultTestShortTimeout ):
911
943
}
912
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 )
913
950
proxyResolver .UpdateState (resolver.State {
914
951
Addresses : []resolver.Address {{Addr : envProxyAddr }},
915
952
ServiceConfig : & serviceconfig.ParseResult {},
@@ -918,8 +955,8 @@ func (s) TestDelegatingResolverForMixNetworkType(t *testing.T) {
918
955
var gotState resolver.State
919
956
select {
920
957
case gotState = <- stateCh :
921
- case <- time . After ( defaultTestTimeout ):
922
- 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" )
923
960
}
924
961
wantState := resolver.State {
925
962
Addresses : []resolver.Address {nonTCPAddr , proxyAddressWithTargetAttribute (envProxyAddr , resolvedTargetTestAddr2 )},
0 commit comments