Skip to content

Commit 9f3529a

Browse files
committed
use options pattern for provisioner version override
1 parent ef15df1 commit 9f3529a

File tree

6 files changed

+30
-13
lines changed

6 files changed

+30
-13
lines changed

cli/provisionerjobs_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ func TestProvisionerJobs(t *testing.T) {
3737
memberClient, member := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID)
3838

3939
// Create initial resources with a running provisioner.
40-
firstProvisioner := coderdtest.NewTaggedProvisionerDaemon(t, coderdAPI, "default-provisioner", "", map[string]string{"owner": "", "scope": "organization"})
40+
firstProvisioner := coderdtest.NewTaggedProvisionerDaemon(t, coderdAPI, "default-provisioner", map[string]string{"owner": "", "scope": "organization"})
4141
t.Cleanup(func() { _ = firstProvisioner.Close() })
4242
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, completeWithAgent())
4343
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)

cli/provisioners_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ func TestProvisioners_Golden(t *testing.T) {
7474
_, member := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID)
7575

7676
// Create initial resources with a running provisioner.
77-
firstProvisioner := coderdtest.NewTaggedProvisionerDaemon(t, coderdAPI, "default-provisioner", "", map[string]string{"owner": "", "scope": "organization"})
77+
firstProvisioner := coderdtest.NewTaggedProvisionerDaemon(t, coderdAPI, "default-provisioner", map[string]string{"owner": "", "scope": "organization"})
7878
t.Cleanup(func() { _ = firstProvisioner.Close() })
7979
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, completeWithAgent())
8080
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)

cli/templatepush_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -585,7 +585,7 @@ func TestTemplatePush(t *testing.T) {
585585
defer provisionerDocker.Close()
586586

587587
// Start the second provisioner
588-
provisionerFoobar := coderdtest.NewTaggedProvisionerDaemon(t, api, "provisioner-foobar", "", map[string]string{
588+
provisionerFoobar := coderdtest.NewTaggedProvisionerDaemon(t, api, "provisioner-foobar", map[string]string{
589589
"foobar": "foobaz",
590590
})
591591
defer provisionerFoobar.Close()

coderd/coderd.go

+21-4
Original file line numberDiff line numberDiff line change
@@ -1720,13 +1720,30 @@ func compressHandler(h http.Handler) http.Handler {
17201720
return cmp.Handler(h)
17211721
}
17221722

1723+
type MemoryProvisionerDaemonOption func(*memoryProvisionerDaemonOptions)
1724+
1725+
func MemoryProvisionerWithVersionOverride(version string) MemoryProvisionerDaemonOption {
1726+
return func(opts *memoryProvisionerDaemonOptions) {
1727+
opts.versionOverride = version
1728+
}
1729+
}
1730+
1731+
type memoryProvisionerDaemonOptions struct {
1732+
versionOverride string
1733+
}
1734+
17231735
// CreateInMemoryProvisionerDaemon is an in-memory connection to a provisionerd.
17241736
// Useful when starting coderd and provisionerd in the same process.
17251737
func (api *API) CreateInMemoryProvisionerDaemon(dialCtx context.Context, name string, provisionerTypes []codersdk.ProvisionerType) (client proto.DRPCProvisionerDaemonClient, err error) {
1726-
return api.CreateInMemoryTaggedProvisionerDaemon(dialCtx, name, "", provisionerTypes, nil)
1738+
return api.CreateInMemoryTaggedProvisionerDaemon(dialCtx, name, provisionerTypes, nil)
17271739
}
17281740

1729-
func (api *API) CreateInMemoryTaggedProvisionerDaemon(dialCtx context.Context, name string, versionOverride string, provisionerTypes []codersdk.ProvisionerType, provisionerTags map[string]string) (client proto.DRPCProvisionerDaemonClient, err error) {
1741+
func (api *API) CreateInMemoryTaggedProvisionerDaemon(dialCtx context.Context, name string, provisionerTypes []codersdk.ProvisionerType, provisionerTags map[string]string, opts ...MemoryProvisionerDaemonOption) (client proto.DRPCProvisionerDaemonClient, err error) {
1742+
options := &memoryProvisionerDaemonOptions{}
1743+
for _, opt := range opts {
1744+
opt(options)
1745+
}
1746+
17301747
tracer := api.TracerProvider.Tracer(tracing.TracerName)
17311748
clientSession, serverSession := drpcsdk.MemTransportPipe()
17321749
defer func() {
@@ -1754,9 +1771,9 @@ func (api *API) CreateInMemoryTaggedProvisionerDaemon(dialCtx context.Context, n
17541771
}
17551772

17561773
apiVersion := proto.CurrentVersion.String()
1757-
if versionOverride != "" && flag.Lookup("test.v") != nil {
1774+
if options.versionOverride != "" && flag.Lookup("test.v") != nil {
17581775
// This should only be usable for unit testing. To fake a different provisioner version
1759-
apiVersion = versionOverride
1776+
apiVersion = options.versionOverride
17601777
}
17611778

17621779
//nolint:gocritic // in-memory provisioners are owned by system

coderd/coderdtest/coderdtest.go

+5-5
Original file line numberDiff line numberDiff line change
@@ -602,7 +602,7 @@ func NewWithAPI(t testing.TB, options *Options) (*codersdk.Client, io.Closer, *c
602602
setHandler(rootHandler)
603603
var provisionerCloser io.Closer = nopcloser{}
604604
if options.IncludeProvisionerDaemon {
605-
provisionerCloser = NewTaggedProvisionerDaemon(t, coderAPI, "test", options.ProvisionerDaemonVersion, options.ProvisionerDaemonTags)
605+
provisionerCloser = NewTaggedProvisionerDaemon(t, coderAPI, "test", options.ProvisionerDaemonTags, coderd.MemoryProvisionerWithVersionOverride(options.ProvisionerDaemonVersion))
606606
}
607607
client := codersdk.New(serverURL)
608608
t.Cleanup(func() {
@@ -646,10 +646,10 @@ func (c *ProvisionerdCloser) Close() error {
646646
// well with coderd testing. It registers the "echo" provisioner for
647647
// quick testing.
648648
func NewProvisionerDaemon(t testing.TB, coderAPI *coderd.API) io.Closer {
649-
return NewTaggedProvisionerDaemon(t, coderAPI, "test", "", nil)
649+
return NewTaggedProvisionerDaemon(t, coderAPI, "test", nil)
650650
}
651651

652-
func NewTaggedProvisionerDaemon(t testing.TB, coderAPI *coderd.API, name string, versionOverride string, provisionerTags map[string]string) io.Closer {
652+
func NewTaggedProvisionerDaemon(t testing.TB, coderAPI *coderd.API, name string, provisionerTags map[string]string, opts ...coderd.MemoryProvisionerDaemonOption) io.Closer {
653653
t.Helper()
654654

655655
// t.Cleanup runs in last added, first called order. t.TempDir() will delete
@@ -670,14 +670,14 @@ func NewTaggedProvisionerDaemon(t testing.TB, coderAPI *coderd.API, name string,
670670
err := echo.Serve(ctx, &provisionersdk.ServeOptions{
671671
Listener: echoServer,
672672
WorkDirectory: workDir,
673-
Logger: coderAPI.Logger.Named("echo").Leveled(slog.LevelDebug),
673+
Logger: args.CoderAPI.Logger.Named("echo").Leveled(slog.LevelDebug),
674674
})
675675
assert.NoError(t, err)
676676
}()
677677

678678
connectedCh := make(chan struct{})
679679
daemon := provisionerd.New(func(dialCtx context.Context) (provisionerdproto.DRPCProvisionerDaemonClient, error) {
680-
return coderAPI.CreateInMemoryTaggedProvisionerDaemon(dialCtx, name, versionOverride, []codersdk.ProvisionerType{codersdk.ProvisionerTypeEcho}, provisionerTags)
680+
return args.CoderAPI.CreateInMemoryTaggedProvisionerDaemon(dialCtx, args.Name, []codersdk.ProvisionerType{codersdk.ProvisionerTypeEcho}, provisionerTags)
681681
}, &provisionerd.Options{
682682
Logger: coderAPI.Logger.Named("provisionerd").Leveled(slog.LevelDebug),
683683
UpdateInterval: 250 * time.Millisecond,

coderd/provisionerdaemons_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ func TestProvisionerDaemons(t *testing.T) {
3838
memberClient, member := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID)
3939

4040
// Create initial resources with a running provisioner.
41-
firstProvisioner := coderdtest.NewTaggedProvisionerDaemon(t, coderdAPI, "default-provisioner", "", map[string]string{"owner": "", "scope": "organization"})
41+
firstProvisioner := coderdtest.NewTaggedProvisionerDaemon(t, coderdAPI, "default-provisioner", map[string]string{"owner": "", "scope": "organization"})
4242
t.Cleanup(func() { _ = firstProvisioner.Close() })
4343
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, nil)
4444
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)

0 commit comments

Comments
 (0)