@@ -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 {})