7
7
"crypto/tls"
8
8
"io"
9
9
"net/http"
10
+ "os/exec"
10
11
"strings"
11
12
"testing"
12
13
"time"
@@ -326,7 +327,7 @@ func NewExternalProvisionerDaemonTerraform(t testing.TB, client *codersdk.Client
326
327
}
327
328
328
329
// nolint // This function is a helper for tests and should not be linted.
329
- func newExternalProvisionerDaemon (t testing.TB , client * codersdk.Client , org uuid.UUID , tags map [string ]string , ty codersdk.ProvisionerType ) io.Closer {
330
+ func newExternalProvisionerDaemon (t testing.TB , client * codersdk.Client , org uuid.UUID , tags map [string ]string , provisionerType codersdk.ProvisionerType ) io.Closer {
330
331
t .Helper ()
331
332
332
333
entitlements , err := client .Entitlements (context .Background ())
@@ -353,47 +354,52 @@ func newExternalProvisionerDaemon(t testing.TB, client *codersdk.Client, org uui
353
354
<- serveDone
354
355
})
355
356
356
- var serveFunc func ()
357
- switch ty {
357
+ switch provisionerType {
358
358
case codersdk .ProvisionerTypeTerraform :
359
- serveFunc = func () {
359
+ // Ensure the Terraform binary is present in the path.
360
+ // If not, we fail this test rather than downloading it.
361
+ terraformPath , err := exec .LookPath ("terraform" )
362
+ require .NoError (t , err , "terraform binary not found in PATH" )
363
+ t .Logf ("using Terraform binary at %s" , terraformPath )
364
+
365
+ go func () {
360
366
defer close (serveDone )
361
367
assert .NoError (t , terraform .Serve (ctx , & terraform.ServeOptions {
368
+ BinaryPath : terraformPath ,
369
+ CachePath : t .TempDir (),
362
370
ServeOptions : & provisionersdk.ServeOptions {
363
371
Listener : provisionerSrv ,
364
372
WorkDirectory : t .TempDir (),
365
373
},
366
374
}))
367
- }
375
+ }()
368
376
case codersdk .ProvisionerTypeEcho :
369
- serveFunc = func () {
377
+ go func () {
370
378
defer close (serveDone )
371
379
assert .NoError (t , echo .Serve (ctx , & provisionersdk.ServeOptions {
372
380
Listener : provisionerSrv ,
373
381
WorkDirectory : t .TempDir (),
374
382
}))
375
- }
383
+ }()
376
384
default :
377
- t .Fatalf ("unsupported provisioner type: %s" , ty )
385
+ t .Fatalf ("unsupported provisioner type: %s" , provisionerType )
378
386
return nil
379
387
}
380
388
381
- go serveFunc ()
382
-
383
389
daemon := provisionerd .New (func (ctx context.Context ) (provisionerdproto.DRPCProvisionerDaemonClient , error ) {
384
390
return client .ServeProvisionerDaemon (ctx , codersdk.ServeProvisionerDaemonRequest {
385
391
ID : uuid .New (),
386
392
Name : t .Name (),
387
393
Organization : org ,
388
- Provisioners : []codersdk.ProvisionerType {ty },
394
+ Provisioners : []codersdk.ProvisionerType {provisionerType },
389
395
Tags : tags ,
390
396
})
391
397
}, & provisionerd.Options {
392
398
Logger : testutil .Logger (t ).Named ("provisionerd" ).Leveled (slog .LevelDebug ),
393
399
UpdateInterval : 250 * time .Millisecond ,
394
400
ForceCancelInterval : 5 * time .Second ,
395
401
Connector : provisionerd.LocalProvisioners {
396
- string (ty ): sdkproto .NewDRPCProvisionerClient (provisionerClient ),
402
+ string (provisionerType ): sdkproto .NewDRPCProvisionerClient (provisionerClient ),
397
403
},
398
404
})
399
405
closer := coderdtest .NewProvisionerDaemonCloser (daemon )
0 commit comments