@@ -559,8 +559,6 @@ func NewWithAPI(t testing.TB, options *Options) (*codersdk.Client, io.Closer, *c
559
559
var provisionerCloser io.Closer = nopcloser {}
560
560
if options .IncludeProvisionerDaemon {
561
561
provisionerCloser = NewTaggedProvisionerDaemon (t , coderAPI , "test" , options .ProvisionerDaemonTags )
562
- // Wait for the provisioner daemon to be ready before continuing.
563
- AwaitProvisionerDaemonsConnected (t , coderAPI )
564
562
}
565
563
client := codersdk .New (serverURL )
566
564
t .Cleanup (func () {
@@ -572,36 +570,6 @@ func NewWithAPI(t testing.TB, options *Options) (*codersdk.Client, io.Closer, *c
572
570
return client , provisionerCloser , coderAPI
573
571
}
574
572
575
- // AwaitProvisionerDaemonsConnected waits for the provisioner daemon to connect.
576
- func AwaitProvisionerDaemonsConnected (t testing.TB , api * coderd.API ) {
577
- ctx , cancel := context .WithTimeout (context .Background (), testutil .WaitShort )
578
- defer cancel ()
579
- for {
580
- select {
581
- case <- ctx .Done ():
582
- t .Fatal ("provisioner daemon did not connect in time" )
583
- case <- time .After (testutil .IntervalFast ):
584
- // nolint:gocritic // used for testing only
585
- daemons , err := api .Database .GetProvisionerDaemons (dbauthz .AsSystemReadProvisionerDaemons (ctx ))
586
- if err != nil {
587
- if errors .Is (err , sql .ErrNoRows ) {
588
- t .Logf ("no provisioner daemons found yet" )
589
- continue
590
- }
591
- require .NoError (t , err )
592
- }
593
- if len (daemons ) == 0 {
594
- t .Logf ("no provisioner daemons found yet" )
595
- continue
596
- }
597
- for _ , daemon := range daemons {
598
- t .Logf ("found provisioner daemon %q" , daemon .Name )
599
- }
600
- return
601
- }
602
- }
603
- }
604
-
605
573
// ProvisionerdCloser wraps a provisioner daemon as an io.Closer that can be called multiple times
606
574
type ProvisionerdCloser struct {
607
575
mu sync.Mutex
@@ -663,6 +631,7 @@ func NewTaggedProvisionerDaemon(t testing.TB, coderAPI *coderd.API, name string,
663
631
assert .NoError (t , err )
664
632
}()
665
633
634
+ connectedCh := make (chan struct {})
666
635
daemon := provisionerd .New (func (dialCtx context.Context ) (provisionerdproto.DRPCProvisionerDaemonClient , error ) {
667
636
return coderAPI .CreateInMemoryTaggedProvisionerDaemon (dialCtx , name , []codersdk.ProvisionerType {codersdk .ProvisionerTypeEcho }, provisionerTags )
668
637
}, & provisionerd.Options {
@@ -672,7 +641,12 @@ func NewTaggedProvisionerDaemon(t testing.TB, coderAPI *coderd.API, name string,
672
641
Connector : provisionerd.LocalProvisioners {
673
642
string (database .ProvisionerTypeEcho ): sdkproto .NewDRPCProvisionerClient (echoClient ),
674
643
},
644
+ InitConnectionCh : connectedCh ,
675
645
})
646
+ // Wait for the provisioner daemon to connect before continuing.
647
+ // Users of this function tend to assume that the provisioner is connected
648
+ // and ready to use when that may not strictly be the case.
649
+ <- connectedCh
676
650
closer := NewProvisionerDaemonCloser (daemon )
677
651
t .Cleanup (func () {
678
652
_ = closer .Close ()
0 commit comments