@@ -59,7 +59,7 @@ func TestProvisionerd(t *testing.T) {
59
59
close (done )
60
60
})
61
61
closer := createProvisionerd (t , func (ctx context.Context ) (proto.DRPCProvisionerDaemonClient , error ) {
62
- return createProvisionerDaemonClient (t , done , provisionerDaemonTestServer {}), nil
62
+ return createProvisionerDaemonClient (ctx , t , done , provisionerDaemonTestServer {}), nil
63
63
}, provisionerd.LocalProvisioners {})
64
64
require .NoError (t , closer .Close ())
65
65
})
@@ -91,7 +91,7 @@ func TestProvisionerd(t *testing.T) {
91
91
completeChan := make (chan struct {})
92
92
closer := createProvisionerd (t , func (ctx context.Context ) (proto.DRPCProvisionerDaemonClient , error ) {
93
93
acquireJobAttempt := 0
94
- return createProvisionerDaemonClient (t , done , provisionerDaemonTestServer {
94
+ return createProvisionerDaemonClient (ctx , t , done , provisionerDaemonTestServer {
95
95
acquireJob : func (ctx context.Context , _ * proto.Empty ) (* proto.AcquiredJob , error ) {
96
96
if acquireJobAttempt == 1 {
97
97
close (completeChan )
@@ -118,7 +118,7 @@ func TestProvisionerd(t *testing.T) {
118
118
var closerMutex sync.Mutex
119
119
closerMutex .Lock ()
120
120
closer = createProvisionerd (t , func (ctx context.Context ) (proto.DRPCProvisionerDaemonClient , error ) {
121
- return createProvisionerDaemonClient (t , done , provisionerDaemonTestServer {
121
+ return createProvisionerDaemonClient (ctx , t , done , provisionerDaemonTestServer {
122
122
acquireJob : func (ctx context.Context , _ * proto.Empty ) (* proto.AcquiredJob , error ) {
123
123
return & proto.AcquiredJob {
124
124
JobId : "test" ,
@@ -174,7 +174,7 @@ func TestProvisionerd(t *testing.T) {
174
174
)
175
175
176
176
closer := createProvisionerd (t , func (ctx context.Context ) (proto.DRPCProvisionerDaemonClient , error ) {
177
- return createProvisionerDaemonClient (t , done , provisionerDaemonTestServer {
177
+ return createProvisionerDaemonClient (ctx , t , done , provisionerDaemonTestServer {
178
178
acquireJob : func (ctx context.Context , _ * proto.Empty ) (* proto.AcquiredJob , error ) {
179
179
return & proto.AcquiredJob {
180
180
JobId : "test" ,
@@ -214,7 +214,7 @@ func TestProvisionerd(t *testing.T) {
214
214
)
215
215
216
216
closer := createProvisionerd (t , func (ctx context.Context ) (proto.DRPCProvisionerDaemonClient , error ) {
217
- return createProvisionerDaemonClient (t , done , provisionerDaemonTestServer {
217
+ return createProvisionerDaemonClient (ctx , t , done , provisionerDaemonTestServer {
218
218
acquireJob : func (ctx context.Context , _ * proto.Empty ) (* proto.AcquiredJob , error ) {
219
219
return & proto.AcquiredJob {
220
220
JobId : "test" ,
@@ -269,7 +269,7 @@ func TestProvisionerd(t *testing.T) {
269
269
)
270
270
271
271
closer := createProvisionerd (t , func (ctx context.Context ) (proto.DRPCProvisionerDaemonClient , error ) {
272
- return createProvisionerDaemonClient (t , done , provisionerDaemonTestServer {
272
+ return createProvisionerDaemonClient (ctx , t , done , provisionerDaemonTestServer {
273
273
acquireJob : func (ctx context.Context , _ * proto.Empty ) (* proto.AcquiredJob , error ) {
274
274
if ! didAcquireJob .CAS (false , true ) {
275
275
completeOnce .Do (func () { close (completeChan ) })
@@ -361,7 +361,7 @@ func TestProvisionerd(t *testing.T) {
361
361
)
362
362
363
363
closer := createProvisionerd (t , func (ctx context.Context ) (proto.DRPCProvisionerDaemonClient , error ) {
364
- return createProvisionerDaemonClient (t , done , provisionerDaemonTestServer {
364
+ return createProvisionerDaemonClient (ctx , t , done , provisionerDaemonTestServer {
365
365
acquireJob : func (ctx context.Context , _ * proto.Empty ) (* proto.AcquiredJob , error ) {
366
366
if ! didAcquireJob .CAS (false , true ) {
367
367
completeOnce .Do (func () { close (completeChan ) })
@@ -441,7 +441,7 @@ func TestProvisionerd(t *testing.T) {
441
441
)
442
442
443
443
closer := createProvisionerd (t , func (ctx context.Context ) (proto.DRPCProvisionerDaemonClient , error ) {
444
- return createProvisionerDaemonClient (t , done , provisionerDaemonTestServer {
444
+ return createProvisionerDaemonClient (ctx , t , done , provisionerDaemonTestServer {
445
445
acquireJob : func (ctx context.Context , _ * proto.Empty ) (* proto.AcquiredJob , error ) {
446
446
if ! didAcquireJob .CAS (false , true ) {
447
447
completeOnce .Do (func () { close (completeChan ) })
@@ -513,7 +513,7 @@ func TestProvisionerd(t *testing.T) {
513
513
)
514
514
515
515
closer := createProvisionerd (t , func (ctx context.Context ) (proto.DRPCProvisionerDaemonClient , error ) {
516
- return createProvisionerDaemonClient (t , done , provisionerDaemonTestServer {
516
+ return createProvisionerDaemonClient (ctx , t , done , provisionerDaemonTestServer {
517
517
acquireJob : func (ctx context.Context , _ * proto.Empty ) (* proto.AcquiredJob , error ) {
518
518
if ! didAcquireJob .CAS (false , true ) {
519
519
completeOnce .Do (func () { close (completeChan ) })
@@ -612,7 +612,7 @@ func TestProvisionerd(t *testing.T) {
612
612
)
613
613
614
614
closer := createProvisionerd (t , func (ctx context.Context ) (proto.DRPCProvisionerDaemonClient , error ) {
615
- return createProvisionerDaemonClient (t , done , provisionerDaemonTestServer {
615
+ return createProvisionerDaemonClient (ctx , t , done , provisionerDaemonTestServer {
616
616
acquireJob : func (ctx context.Context , _ * proto.Empty ) (* proto.AcquiredJob , error ) {
617
617
if ! didAcquireJob .CAS (false , true ) {
618
618
completeOnce .Do (func () { close (completeChan ) })
@@ -677,7 +677,7 @@ func TestProvisionerd(t *testing.T) {
677
677
updateChan := make (chan struct {})
678
678
completeChan := make (chan struct {})
679
679
server := createProvisionerd (t , func (ctx context.Context ) (proto.DRPCProvisionerDaemonClient , error ) {
680
- return createProvisionerDaemonClient (t , done , provisionerDaemonTestServer {
680
+ return createProvisionerDaemonClient (ctx , t , done , provisionerDaemonTestServer {
681
681
acquireJob : func (ctx context.Context , _ * proto.Empty ) (* proto.AcquiredJob , error ) {
682
682
return & proto.AcquiredJob {
683
683
JobId : "test" ,
@@ -755,7 +755,7 @@ func TestProvisionerd(t *testing.T) {
755
755
updateChan := make (chan struct {})
756
756
completeChan := make (chan struct {})
757
757
server := createProvisionerd (t , func (ctx context.Context ) (proto.DRPCProvisionerDaemonClient , error ) {
758
- return createProvisionerDaemonClient (t , done , provisionerDaemonTestServer {
758
+ return createProvisionerDaemonClient (ctx , t , done , provisionerDaemonTestServer {
759
759
acquireJob : func (ctx context.Context , _ * proto.Empty ) (* proto.AcquiredJob , error ) {
760
760
return & proto.AcquiredJob {
761
761
JobId : "test" ,
@@ -844,7 +844,7 @@ func TestProvisionerd(t *testing.T) {
844
844
completeOnce sync.Once
845
845
)
846
846
server := createProvisionerd (t , func (ctx context.Context ) (proto.DRPCProvisionerDaemonClient , error ) {
847
- client := createProvisionerDaemonClient (t , done , provisionerDaemonTestServer {
847
+ client := createProvisionerDaemonClient (ctx , t , done , provisionerDaemonTestServer {
848
848
acquireJob : func (ctx context.Context , _ * proto.Empty ) (* proto.AcquiredJob , error ) {
849
849
if second .Load () {
850
850
return & proto.AcquiredJob {}, nil
@@ -927,7 +927,7 @@ func TestProvisionerd(t *testing.T) {
927
927
completeOnce sync.Once
928
928
)
929
929
server := createProvisionerd (t , func (ctx context.Context ) (proto.DRPCProvisionerDaemonClient , error ) {
930
- client := createProvisionerDaemonClient (t , done , provisionerDaemonTestServer {
930
+ client := createProvisionerDaemonClient (ctx , t , done , provisionerDaemonTestServer {
931
931
acquireJob : func (ctx context.Context , _ * proto.Empty ) (* proto.AcquiredJob , error ) {
932
932
if second .Load () {
933
933
completeOnce .Do (func () { close (completeChan ) })
@@ -1006,7 +1006,7 @@ func TestProvisionerd(t *testing.T) {
1006
1006
completeOnce := sync.Once {}
1007
1007
1008
1008
server := createProvisionerd (t , func (ctx context.Context ) (proto.DRPCProvisionerDaemonClient , error ) {
1009
- return createProvisionerDaemonClient (t , done , provisionerDaemonTestServer {
1009
+ return createProvisionerDaemonClient (ctx , t , done , provisionerDaemonTestServer {
1010
1010
acquireJob : func (ctx context.Context , _ * proto.Empty ) (* proto.AcquiredJob , error ) {
1011
1011
m .Lock ()
1012
1012
defer m .Unlock ()
@@ -1118,7 +1118,7 @@ func createProvisionerd(t *testing.T, dialer provisionerd.Dialer, connector prov
1118
1118
1119
1119
// Creates a provisionerd protobuf client that's connected
1120
1120
// to the server implementation provided.
1121
- func createProvisionerDaemonClient (t * testing.T , done <- chan struct {}, server provisionerDaemonTestServer ) proto.DRPCProvisionerDaemonClient {
1121
+ func createProvisionerDaemonClient (ctx context. Context , t * testing.T , done <- chan struct {}, server provisionerDaemonTestServer ) proto.DRPCProvisionerDaemonClient {
1122
1122
t .Helper ()
1123
1123
if server .failJob == nil {
1124
1124
// Default to asserting the error from the failure, otherwise
@@ -1137,7 +1137,7 @@ func createProvisionerDaemonClient(t *testing.T, done <-chan struct{}, server pr
1137
1137
err := proto .DRPCRegisterProvisionerDaemon (mux , & server )
1138
1138
require .NoError (t , err )
1139
1139
srv := drpcserver .New (mux )
1140
- ctx , cancelFunc := context .WithCancel (context . Background () )
1140
+ ctx , cancelFunc := context .WithCancel (ctx )
1141
1141
closed := make (chan struct {})
1142
1142
go func () {
1143
1143
defer close (closed )
@@ -1148,13 +1148,31 @@ func createProvisionerDaemonClient(t *testing.T, done <-chan struct{}, server pr
1148
1148
<- closed
1149
1149
select {
1150
1150
case <- done :
1151
- t .Error ("createProvisionerDaemonClient cleanup after test was done!" )
1151
+ // It's possible to get unlucky since the dialer is run in a retry in a goroutine.
1152
+ // The following can occur:
1153
+ // 1. The provisionerd.connect goroutine checks if we're closed prior to attempting to establish a connection
1154
+ // with coderd, sees that we're not.
1155
+ // 2. A test closes the server.
1156
+ // 3. The provisionerd.connect goroutine calls the dialer to establish a connection. This
1157
+ // function detects that someone has tried to create a client after the test finishes.
1158
+ if ctx .Err () == nil {
1159
+ t .Error ("createProvisionerDaemonClient cleanup after test was done!" )
1160
+ }
1152
1161
default :
1153
1162
}
1154
1163
})
1155
1164
select {
1156
1165
case <- done :
1157
- t .Error ("called createProvisionerDaemonClient after test was done!" )
1166
+ // It's possible to get unlucky since the dialer is run in a retry in a goroutine.
1167
+ // The following can occur:
1168
+ // 1. The provisionerd.connect goroutine checks if we're closed prior to attempting to establish a connection
1169
+ // with coderd, sees that we're not.
1170
+ // 2. A test closes the server.
1171
+ // 3. The provisionerd.connect goroutine calls the dialer to establish a connection. This
1172
+ // function detects that someone has tried to create a client after the test finishes.
1173
+ if ctx .Err () == nil {
1174
+ t .Error ("createProvisionerDaemonClient cleanup after test was done!" )
1175
+ }
1158
1176
default :
1159
1177
}
1160
1178
return proto .NewDRPCProvisionerDaemonClient (clientPipe )
0 commit comments