@@ -130,8 +130,11 @@ func TestProvisionerd(t *testing.T) {
130
130
// Ensures tars with "../../../etc/passwd" as the path
131
131
// are not allowed to run, and will fail the job.
132
132
t .Parallel ()
133
- var complete sync.Once
134
- completeChan := make (chan struct {})
133
+ var (
134
+ completeChan = make (chan struct {})
135
+ completeOnce sync.Once
136
+ )
137
+
135
138
closer := createProvisionerd (t , func (ctx context.Context ) (proto.DRPCProvisionerDaemonClient , error ) {
136
139
return createProvisionerDaemonClient (t , provisionerDaemonTestServer {
137
140
acquireJob : func (ctx context.Context , _ * proto.Empty ) (* proto.AcquiredJob , error ) {
@@ -150,9 +153,7 @@ func TestProvisionerd(t *testing.T) {
150
153
},
151
154
updateJob : noopUpdateJob ,
152
155
failJob : func (ctx context.Context , job * proto.FailedJob ) (* proto.Empty , error ) {
153
- complete .Do (func () {
154
- close (completeChan )
155
- })
156
+ completeOnce .Do (func () { close (completeChan ) })
156
157
return & proto.Empty {}, nil
157
158
},
158
159
}), nil
@@ -165,8 +166,11 @@ func TestProvisionerd(t *testing.T) {
165
166
166
167
t .Run ("RunningPeriodicUpdate" , func (t * testing.T ) {
167
168
t .Parallel ()
168
- var complete sync.Once
169
- completeChan := make (chan struct {})
169
+ var (
170
+ completeChan = make (chan struct {})
171
+ completeOnce sync.Once
172
+ )
173
+
170
174
closer := createProvisionerd (t , func (ctx context.Context ) (proto.DRPCProvisionerDaemonClient , error ) {
171
175
return createProvisionerDaemonClient (t , provisionerDaemonTestServer {
172
176
acquireJob : func (ctx context.Context , _ * proto.Empty ) (* proto.AcquiredJob , error ) {
@@ -184,9 +188,7 @@ func TestProvisionerd(t *testing.T) {
184
188
}, nil
185
189
},
186
190
updateJob : func (ctx context.Context , update * proto.UpdateJobRequest ) (* proto.UpdateJobResponse , error ) {
187
- complete .Do (func () {
188
- close (completeChan )
189
- })
191
+ completeOnce .Do (func () { close (completeChan ) })
190
192
return & proto.UpdateJobResponse {}, nil
191
193
},
192
194
failJob : func (ctx context.Context , job * proto.FailedJob ) (* proto.Empty , error ) {
@@ -212,19 +214,18 @@ func TestProvisionerd(t *testing.T) {
212
214
didLog atomic.Bool
213
215
didAcquireJob atomic.Bool
214
216
didDryRun atomic.Bool
217
+ completeChan = make (chan struct {})
218
+ completeOnce sync.Once
215
219
)
216
- var complete sync.Once
217
- completeChan := make (chan struct {})
220
+
218
221
closer := createProvisionerd (t , func (ctx context.Context ) (proto.DRPCProvisionerDaemonClient , error ) {
219
222
return createProvisionerDaemonClient (t , provisionerDaemonTestServer {
220
223
acquireJob : func (ctx context.Context , _ * proto.Empty ) (* proto.AcquiredJob , error ) {
221
- if didAcquireJob .Load () {
222
- complete .Do (func () {
223
- close (completeChan )
224
- })
224
+ if ! didAcquireJob .CAS (false , true ) {
225
+ completeOnce .Do (func () { close (completeChan ) })
225
226
return & proto.AcquiredJob {}, nil
226
227
}
227
- didAcquireJob . Store ( true )
228
+
228
229
return & proto.AcquiredJob {
229
230
JobId : "test" ,
230
231
Provisioner : "someprovisioner" ,
@@ -315,19 +316,18 @@ func TestProvisionerd(t *testing.T) {
315
316
didComplete atomic.Bool
316
317
didLog atomic.Bool
317
318
didAcquireJob atomic.Bool
319
+ completeChan = make (chan struct {})
320
+ completeOnce sync.Once
318
321
)
319
- var complete sync.Once
320
- completeChan := make (chan struct {})
322
+
321
323
closer := createProvisionerd (t , func (ctx context.Context ) (proto.DRPCProvisionerDaemonClient , error ) {
322
324
return createProvisionerDaemonClient (t , provisionerDaemonTestServer {
323
325
acquireJob : func (ctx context.Context , _ * proto.Empty ) (* proto.AcquiredJob , error ) {
324
- if didAcquireJob .Load () {
325
- complete .Do (func () {
326
- close (completeChan )
327
- })
326
+ if ! didAcquireJob .CAS (false , true ) {
327
+ completeOnce .Do (func () { close (completeChan ) })
328
328
return & proto.AcquiredJob {}, nil
329
329
}
330
- didAcquireJob . Store ( true )
330
+
331
331
return & proto.AcquiredJob {
332
332
JobId : "test" ,
333
333
Provisioner : "someprovisioner" ,
@@ -386,16 +386,18 @@ func TestProvisionerd(t *testing.T) {
386
386
var (
387
387
didFail atomic.Bool
388
388
didAcquireJob atomic.Bool
389
+ completeChan = make (chan struct {})
390
+ completeOnce sync.Once
389
391
)
390
- completeChan := make ( chan struct {})
392
+
391
393
closer := createProvisionerd (t , func (ctx context.Context ) (proto.DRPCProvisionerDaemonClient , error ) {
392
394
return createProvisionerDaemonClient (t , provisionerDaemonTestServer {
393
395
acquireJob : func (ctx context.Context , _ * proto.Empty ) (* proto.AcquiredJob , error ) {
394
- if didAcquireJob .Load ( ) {
395
- close (completeChan )
396
+ if ! didAcquireJob .CAS ( false , true ) {
397
+ completeOnce . Do ( func () { close (completeChan ) } )
396
398
return & proto.AcquiredJob {}, nil
397
399
}
398
- didAcquireJob . Store ( true )
400
+
399
401
return & proto.AcquiredJob {
400
402
JobId : "test" ,
401
403
Provisioner : "someprovisioner" ,
@@ -585,10 +587,15 @@ func TestProvisionerd(t *testing.T) {
585
587
586
588
t .Run ("ReconnectAndFail" , func (t * testing.T ) {
587
589
t .Parallel ()
588
- var second atomic.Bool
589
- failChan := make (chan struct {})
590
- failedChan := make (chan struct {})
591
- completeChan := make (chan struct {})
590
+ var (
591
+ second atomic.Bool
592
+ failChan = make (chan struct {})
593
+ failOnce sync.Once
594
+ failedChan = make (chan struct {})
595
+ failedOnce sync.Once
596
+ completeChan = make (chan struct {})
597
+ completeOnce sync.Once
598
+ )
592
599
server := createProvisionerd (t , func (ctx context.Context ) (proto.DRPCProvisionerDaemonClient , error ) {
593
600
client := createProvisionerDaemonClient (t , provisionerDaemonTestServer {
594
601
acquireJob : func (ctx context.Context , _ * proto.Empty ) (* proto.AcquiredJob , error ) {
@@ -613,10 +620,10 @@ func TestProvisionerd(t *testing.T) {
613
620
},
614
621
failJob : func (ctx context.Context , job * proto.FailedJob ) (* proto.Empty , error ) {
615
622
if second .Load () {
616
- close (completeChan )
623
+ completeOnce . Do ( func () { close (completeChan ) } )
617
624
return & proto.Empty {}, nil
618
625
}
619
- close (failChan )
626
+ failOnce . Do ( func () { close (failChan ) } )
620
627
<- failedChan
621
628
return & proto.Empty {}, nil
622
629
},
@@ -626,7 +633,7 @@ func TestProvisionerd(t *testing.T) {
626
633
<- failChan
627
634
_ = client .DRPCConn ().Close ()
628
635
second .Store (true )
629
- close (failedChan )
636
+ failedOnce . Do ( func () { close (failedChan ) } )
630
637
}()
631
638
}
632
639
return client , nil
@@ -651,18 +658,20 @@ func TestProvisionerd(t *testing.T) {
651
658
652
659
t .Run ("ReconnectAndComplete" , func (t * testing.T ) {
653
660
t .Parallel ()
654
- var completed sync.Once
655
- var second atomic.Bool
656
- failChan := make (chan struct {})
657
- failedChan := make (chan struct {})
658
- completeChan := make (chan struct {})
661
+ var (
662
+ second atomic.Bool
663
+ failChan = make (chan struct {})
664
+ failOnce sync.Once
665
+ failedChan = make (chan struct {})
666
+ failedOnce sync.Once
667
+ completeChan = make (chan struct {})
668
+ completeOnce sync.Once
669
+ )
659
670
server := createProvisionerd (t , func (ctx context.Context ) (proto.DRPCProvisionerDaemonClient , error ) {
660
671
client := createProvisionerDaemonClient (t , provisionerDaemonTestServer {
661
672
acquireJob : func (ctx context.Context , _ * proto.Empty ) (* proto.AcquiredJob , error ) {
662
673
if second .Load () {
663
- completed .Do (func () {
664
- close (completeChan )
665
- })
674
+ completeOnce .Do (func () { close (completeChan ) })
666
675
return & proto.AcquiredJob {}, nil
667
676
}
668
677
return & proto.AcquiredJob {
@@ -688,7 +697,7 @@ func TestProvisionerd(t *testing.T) {
688
697
if second .Load () {
689
698
return & proto.Empty {}, nil
690
699
}
691
- close (failChan )
700
+ failOnce . Do ( func () { close (failChan ) } )
692
701
<- failedChan
693
702
return & proto.Empty {}, nil
694
703
},
@@ -698,7 +707,7 @@ func TestProvisionerd(t *testing.T) {
698
707
<- failChan
699
708
_ = client .DRPCConn ().Close ()
700
709
second .Store (true )
701
- close (failedChan )
710
+ failedOnce . Do ( func () { close (failedChan ) } )
702
711
}()
703
712
}
704
713
return client , nil
0 commit comments