@@ -597,6 +597,50 @@ func TestProvisionerd(t *testing.T) {
597
597
assert .True (t , didFail .Load (), "should fail the job" )
598
598
})
599
599
600
+ // When there is no coderd, the connect loop will never succeed.
601
+ t .Run ("ShutdownNoCoderd" , func (t * testing.T ) {
602
+ t .Parallel ()
603
+ done := make (chan struct {})
604
+ t .Cleanup (func () {
605
+ close (done )
606
+ })
607
+
608
+ connectAttemptedClose := sync.Once {}
609
+ connectAttempted := make (chan struct {})
610
+ server := createProvisionerd (t , func (ctx context.Context ) (proto.DRPCProvisionerDaemonClient , error ) {
611
+ connectAttemptedClose .Do (func () { close (connectAttempted ) })
612
+ return nil , fmt .Errorf ("client connection always fails" )
613
+ }, provisionerd.LocalProvisioners {
614
+ "someprovisioner" : createProvisionerClient (t , done , provisionerTestServer {
615
+ plan : func (
616
+ s * provisionersdk.Session ,
617
+ _ * sdkproto.PlanRequest ,
618
+ canceledOrComplete <- chan struct {},
619
+ ) * sdkproto.PlanComplete {
620
+ s .ProvisionLog (sdkproto .LogLevel_DEBUG , "in progress" )
621
+ <- canceledOrComplete
622
+ return & sdkproto.PlanComplete {
623
+ Error : "some error" ,
624
+ }
625
+ },
626
+ apply : func (
627
+ _ * provisionersdk.Session ,
628
+ _ * sdkproto.ApplyRequest ,
629
+ _ <- chan struct {},
630
+ ) * sdkproto.ApplyComplete {
631
+ t .Error ("should never apply" )
632
+ return & sdkproto.ApplyComplete {}
633
+ },
634
+ }),
635
+ })
636
+
637
+ // At least 1 attempt to connect
638
+ require .Condition (t , closedWithin (connectAttempted , testutil .WaitShort ))
639
+ err := server .Shutdown (context .Background (), true )
640
+ require .NoError (t , err )
641
+ require .NoError (t , server .Close ())
642
+ })
643
+
600
644
t .Run ("Shutdown" , func (t * testing.T ) {
601
645
t .Parallel ()
602
646
done := make (chan struct {})
0 commit comments