Skip to content

Commit 47aa9c4

Browse files
committed
tests
1 parent f4f1b1b commit 47aa9c4

File tree

2 files changed

+114
-10
lines changed

2 files changed

+114
-10
lines changed

enterprise/cli/provisionerdaemonstart.go

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424
"github.com/coder/coder/v2/cli/cliui"
2525
"github.com/coder/coder/v2/cli/cliutil"
2626
"github.com/coder/coder/v2/coderd/database"
27+
"github.com/coder/coder/v2/coderd/provisionerkey"
2728
"github.com/coder/coder/v2/codersdk"
2829
"github.com/coder/coder/v2/codersdk/drpc"
2930
"github.com/coder/coder/v2/provisioner/terraform"
@@ -84,8 +85,8 @@ func (r *RootCmd) provisionerDaemonStart() *serpent.Command {
8485
return xerrors.Errorf("current organization: %w", err)
8586
}
8687

87-
if preSharedKey == "" {
88-
return xerrors.New("must provide a pre-shared key when not authenticated as a user")
88+
if preSharedKey == "" && provisionerKey == "" {
89+
return xerrors.New("must provide a pre-shared key or provisioner key when not authenticated as a user")
8990
}
9091

9192
org = codersdk.Organization{MinimalOrganization: codersdk.MinimalOrganization{ID: uuid.Nil}}
@@ -121,10 +122,10 @@ func (r *RootCmd) provisionerDaemonStart() *serpent.Command {
121122
if len(rawTags) > 0 {
122123
return xerrors.New("cannot provide tags when using provisioner key")
123124
}
124-
// _, err := provisionerkey.Parse(provisionerKey)
125-
// if err != nil {
126-
// return xerrors.Errorf("parse provisioner key: %w", err)
127-
// }
125+
_, _, err := provisionerkey.Parse(provisionerKey)
126+
if err != nil {
127+
return xerrors.Errorf("parse provisioner key: %w", err)
128+
}
128129
}
129130

130131
logOpts := []clilog.Option{
@@ -224,10 +225,10 @@ func (r *RootCmd) provisionerDaemonStart() *serpent.Command {
224225
Provisioners: []codersdk.ProvisionerType{
225226
codersdk.ProvisionerTypeTerraform,
226227
},
227-
Tags: tags,
228-
PreSharedKey: preSharedKey,
229-
Organization: org.ID,
230-
// ProvisionerKey: provisionerKey,
228+
Tags: tags,
229+
PreSharedKey: preSharedKey,
230+
Organization: org.ID,
231+
ProvisionerKey: provisionerKey,
231232
})
232233
}, &provisionerd.Options{
233234
Logger: logger,

enterprise/cli/provisionerdaemonstart_test.go

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,109 @@ func TestProvisionerDaemon_ProvisionerKey(t *testing.T) {
307307
t.Run("OK", func(t *testing.T) {
308308
t.Parallel()
309309

310+
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
311+
defer cancel()
312+
dv := coderdtest.DeploymentValues(t)
313+
dv.Experiments.Append(string(codersdk.ExperimentMultiOrganization))
314+
client, user := coderdenttest.New(t, &coderdenttest.Options{
315+
ProvisionerDaemonPSK: "provisionersftw",
316+
LicenseOptions: &coderdenttest.LicenseOptions{
317+
Features: license.Features{
318+
codersdk.FeatureExternalProvisionerDaemons: 1,
319+
codersdk.FeatureMultipleOrganizations: 1,
320+
},
321+
},
322+
Options: &coderdtest.Options{
323+
DeploymentValues: dv,
324+
},
325+
})
326+
// nolint:gocritic // test
327+
res, err := client.CreateProvisionerKey(ctx, user.OrganizationID, codersdk.CreateProvisionerKeyRequest{
328+
Name: "dont-TEST-me",
329+
})
330+
require.NoError(t, err)
331+
inv, conf := newCLI(t, "provisionerd", "start", "--key", res.Key, "--name=matt-daemon")
332+
err = conf.URL().Write(client.URL.String())
333+
require.NoError(t, err)
334+
pty := ptytest.New(t).Attach(inv)
335+
clitest.Start(t, inv)
336+
pty.ExpectNoMatchBefore(ctx, "check entitlement", "starting provisioner daemon")
337+
pty.ExpectMatchContext(ctx, "matt-daemon")
338+
339+
var daemons []codersdk.ProvisionerDaemon
340+
require.Eventually(t, func() bool {
341+
daemons, err = client.ProvisionerDaemons(ctx)
342+
if err != nil {
343+
return false
344+
}
345+
return len(daemons) == 1
346+
}, testutil.WaitShort, testutil.IntervalSlow)
347+
require.Equal(t, "matt-daemon", daemons[0].Name)
348+
require.Equal(t, provisionersdk.ScopeOrganization, daemons[0].Tags[provisionersdk.TagScope])
349+
require.Equal(t, buildinfo.Version(), daemons[0].Version)
350+
require.Equal(t, proto.CurrentVersion.String(), daemons[0].APIVersion)
351+
})
352+
353+
t.Run("NoPSK", func(t *testing.T) {
354+
t.Parallel()
355+
356+
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
357+
defer cancel()
358+
dv := coderdtest.DeploymentValues(t)
359+
dv.Experiments.Append(string(codersdk.ExperimentMultiOrganization))
360+
client, user := coderdenttest.New(t, &coderdenttest.Options{
361+
ProvisionerDaemonPSK: "provisionersftw",
362+
LicenseOptions: &coderdenttest.LicenseOptions{
363+
Features: license.Features{
364+
codersdk.FeatureExternalProvisionerDaemons: 1,
365+
codersdk.FeatureMultipleOrganizations: 1,
366+
},
367+
},
368+
Options: &coderdtest.Options{
369+
DeploymentValues: dv,
370+
},
371+
})
372+
// nolint:gocritic // test
373+
res, err := client.CreateProvisionerKey(ctx, user.OrganizationID, codersdk.CreateProvisionerKeyRequest{
374+
Name: "dont-TEST-me",
375+
})
376+
require.NoError(t, err)
377+
inv, conf := newCLI(t, "provisionerd", "start", "--psk", "provisionersftw", "--key", res.Key, "--name=matt-daemon")
378+
err = conf.URL().Write(client.URL.String())
379+
require.NoError(t, err)
380+
err = inv.WithContext(ctx).Run()
381+
require.ErrorContains(t, err, "cannot provide both provisioner key --key and pre-shared key --psk")
382+
})
383+
384+
t.Run("NoTags", func(t *testing.T) {
385+
t.Parallel()
386+
387+
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
388+
defer cancel()
389+
dv := coderdtest.DeploymentValues(t)
390+
dv.Experiments.Append(string(codersdk.ExperimentMultiOrganization))
391+
client, user := coderdenttest.New(t, &coderdenttest.Options{
392+
ProvisionerDaemonPSK: "provisionersftw",
393+
LicenseOptions: &coderdenttest.LicenseOptions{
394+
Features: license.Features{
395+
codersdk.FeatureExternalProvisionerDaemons: 1,
396+
codersdk.FeatureMultipleOrganizations: 1,
397+
},
398+
},
399+
Options: &coderdtest.Options{
400+
DeploymentValues: dv,
401+
},
402+
})
403+
// nolint:gocritic // test
404+
res, err := client.CreateProvisionerKey(ctx, user.OrganizationID, codersdk.CreateProvisionerKeyRequest{
405+
Name: "dont-TEST-me",
406+
})
407+
require.NoError(t, err)
408+
inv, conf := newCLI(t, "provisionerd", "start", "--tag", "mykey=yourvalue", "--key", res.Key, "--name=matt-daemon")
409+
err = conf.URL().Write(client.URL.String())
410+
require.NoError(t, err)
411+
err = inv.WithContext(ctx).Run()
412+
require.ErrorContains(t, err, "cannot provide tags when using provisioner key")
310413
})
311414
}
312415

0 commit comments

Comments
 (0)