Skip to content

Commit 5673aca

Browse files
authored
feat(cli): add --parameter flag to exp scaletest command (#10132)
1 parent c6cf719 commit 5673aca

File tree

4 files changed

+104
-14
lines changed

4 files changed

+104
-14
lines changed

cli/exp_scaletest.go

+24-2
Original file line numberDiff line numberDiff line change
@@ -525,6 +525,8 @@ func (r *RootCmd) scaletestCreateWorkspaces() *clibase.Cmd {
525525

526526
useHostUser bool
527527

528+
parameterFlags workspaceParameterFlags
529+
528530
tracingFlags = &scaletestTracingFlags{}
529531
strategy = &scaletestStrategyFlags{}
530532
cleanupStrategy = &scaletestStrategyFlags{cleanup: true}
@@ -597,11 +599,29 @@ func (r *RootCmd) scaletestCreateWorkspaces() *clibase.Cmd {
597599
return xerrors.Errorf("get template version %q: %w", tpl.ActiveVersionID, err)
598600
}
599601

602+
cliRichParameters, err := asWorkspaceBuildParameters(parameterFlags.richParameters)
603+
if err != nil {
604+
return xerrors.Errorf("can't parse given parameter values: %w", err)
605+
}
606+
607+
richParameters, err := prepWorkspaceBuild(inv, client, prepWorkspaceBuildArgs{
608+
Action: WorkspaceCreate,
609+
Template: tpl,
610+
NewWorkspaceName: "scaletest-%", // TODO: the scaletest runner will pass in a different name here. Does this matter?
611+
612+
RichParameterFile: parameterFlags.richParameterFile,
613+
RichParameters: cliRichParameters,
614+
})
615+
if err != nil {
616+
return xerrors.Errorf("prepare build: %w", err)
617+
}
618+
600619
// Do a dry-run to ensure the template and parameters are valid
601620
// before we start creating users and workspaces.
602621
if !noPlan {
603622
dryRun, err := client.CreateTemplateVersionDryRun(ctx, templateVersion.ID, codersdk.CreateTemplateVersionDryRunRequest{
604-
WorkspaceName: "scaletest",
623+
WorkspaceName: "scaletest",
624+
RichParameterValues: richParameters,
605625
})
606626
if err != nil {
607627
return xerrors.Errorf("start dry run workspace creation: %w", err)
@@ -653,7 +673,8 @@ func (r *RootCmd) scaletestCreateWorkspaces() *clibase.Cmd {
653673
OrganizationID: me.OrganizationIDs[0],
654674
// UserID is set by the test automatically.
655675
Request: codersdk.CreateWorkspaceRequest{
656-
TemplateID: tpl.ID,
676+
TemplateID: tpl.ID,
677+
RichParameterValues: richParameters,
657678
},
658679
NoWaitForAgents: noWaitForAgents,
659680
},
@@ -865,6 +886,7 @@ func (r *RootCmd) scaletestCreateWorkspaces() *clibase.Cmd {
865886
},
866887
}
867888

889+
cmd.Options = append(cmd.Options, parameterFlags.cliParameters()...)
868890
tracingFlags.attach(&cmd.Options)
869891
strategy.attach(&cmd.Options)
870892
cleanupStrategy.attach(&cmd.Options)

cli/exp_scaletest_test.go

+2
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ func TestScaleTestCreateWorkspaces(t *testing.T) {
4848
"--cleanup-job-timeout", "15s",
4949
"--output", "text",
5050
"--output", "json:"+outputFile,
51+
"--parameter", "foo=baz",
52+
"--rich-parameter-file", "/path/to/some/parameter/file.ext",
5153
)
5254
clitest.SetupConfig(t, client, root)
5355
pty := ptytest.New(t)

scaletest/createworkspaces/run_test.go

+75-12
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,19 @@ func Test_Runner(t *testing.T) {
3434
t.Skip("Race detector enabled, skipping time-sensitive test.")
3535
}
3636

37+
testParameters := []*proto.RichParameter{
38+
{
39+
Name: "foo",
40+
DefaultValue: "baz",
41+
},
42+
}
43+
testParameterValues := []codersdk.WorkspaceBuildParameter{
44+
{
45+
Name: "foo",
46+
Value: "baz",
47+
},
48+
}
49+
3750
t.Run("OK", func(t *testing.T) {
3851
t.Parallel()
3952

@@ -47,8 +60,16 @@ func Test_Runner(t *testing.T) {
4760

4861
authToken := uuid.NewString()
4962
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, &echo.Responses{
50-
Parse: echo.ParseComplete,
51-
ProvisionPlan: echo.PlanComplete,
63+
Parse: echo.ParseComplete,
64+
ProvisionPlan: []*proto.Response{
65+
{
66+
Type: &proto.Response_Plan{
67+
Plan: &proto.PlanComplete{
68+
Parameters: testParameters,
69+
},
70+
},
71+
},
72+
},
5273
ProvisionApply: []*proto.Response{
5374
{
5475
Type: &proto.Response_Log{
@@ -102,7 +123,8 @@ func Test_Runner(t *testing.T) {
102123
Workspace: workspacebuild.Config{
103124
OrganizationID: user.OrganizationID,
104125
Request: codersdk.CreateWorkspaceRequest{
105-
TemplateID: template.ID,
126+
TemplateID: template.ID,
127+
RichParameterValues: testParameterValues,
106128
},
107129
},
108130
ReconnectingPTY: &reconnectingpty.Config{
@@ -133,6 +155,13 @@ func Test_Runner(t *testing.T) {
133155
require.NoError(t, err)
134156
require.Len(t, workspaces.Workspaces, 1)
135157

158+
// Ensure the correct build parameters were used.
159+
buildParams, err := client.WorkspaceBuildParameters(ctx, workspaces.Workspaces[0].LatestBuild.ID)
160+
require.NoError(t, err)
161+
require.Len(t, buildParams, 1)
162+
require.Equal(t, testParameterValues[0].Name, buildParams[0].Name)
163+
require.Equal(t, testParameterValues[0].Value, buildParams[0].Value)
164+
136165
// Look for strings in the logs.
137166
require.Contains(t, logsStr, "Generating user password...")
138167
require.Contains(t, logsStr, "Creating user:")
@@ -173,8 +202,16 @@ func Test_Runner(t *testing.T) {
173202
user := coderdtest.CreateFirstUser(t, client)
174203

175204
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, &echo.Responses{
176-
Parse: echo.ParseComplete,
177-
ProvisionPlan: echo.PlanComplete,
205+
Parse: echo.ParseComplete,
206+
ProvisionPlan: []*proto.Response{
207+
{
208+
Type: &proto.Response_Plan{
209+
Plan: &proto.PlanComplete{
210+
Parameters: testParameters,
211+
},
212+
},
213+
},
214+
},
178215
ProvisionApply: []*proto.Response{
179216
{
180217
Type: &proto.Response_Log{Log: &proto.Log{}},
@@ -200,7 +237,8 @@ func Test_Runner(t *testing.T) {
200237
Workspace: workspacebuild.Config{
201238
OrganizationID: user.OrganizationID,
202239
Request: codersdk.CreateWorkspaceRequest{
203-
TemplateID: template.ID,
240+
TemplateID: template.ID,
241+
RichParameterValues: testParameterValues,
204242
},
205243
},
206244
})
@@ -288,8 +326,16 @@ func Test_Runner(t *testing.T) {
288326

289327
authToken := uuid.NewString()
290328
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, &echo.Responses{
291-
Parse: echo.ParseComplete,
292-
ProvisionPlan: echo.PlanComplete,
329+
Parse: echo.ParseComplete,
330+
ProvisionPlan: []*proto.Response{
331+
{
332+
Type: &proto.Response_Plan{
333+
Plan: &proto.PlanComplete{
334+
Parameters: testParameters,
335+
},
336+
},
337+
},
338+
},
293339
ProvisionApply: []*proto.Response{
294340
{
295341
Type: &proto.Response_Log{
@@ -344,7 +390,8 @@ func Test_Runner(t *testing.T) {
344390
Workspace: workspacebuild.Config{
345391
OrganizationID: user.OrganizationID,
346392
Request: codersdk.CreateWorkspaceRequest{
347-
TemplateID: template.ID,
393+
TemplateID: template.ID,
394+
RichParameterValues: testParameterValues,
348395
},
349396
},
350397
ReconnectingPTY: &reconnectingpty.Config{
@@ -375,6 +422,13 @@ func Test_Runner(t *testing.T) {
375422
require.NoError(t, err)
376423
require.Len(t, workspaces.Workspaces, 1)
377424

425+
// Ensure the correct build parameters were used.
426+
buildParams, err := client.WorkspaceBuildParameters(ctx, workspaces.Workspaces[0].LatestBuild.ID)
427+
require.NoError(t, err)
428+
require.Len(t, buildParams, 1)
429+
require.Equal(t, testParameterValues[0].Name, buildParams[0].Name)
430+
require.Equal(t, testParameterValues[0].Value, buildParams[0].Value)
431+
378432
// Look for strings in the logs.
379433
require.Contains(t, logsStr, "Generating user password...")
380434
require.Contains(t, logsStr, "Creating user:")
@@ -413,8 +467,16 @@ func Test_Runner(t *testing.T) {
413467
user := coderdtest.CreateFirstUser(t, client)
414468

415469
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, &echo.Responses{
416-
Parse: echo.ParseComplete,
417-
ProvisionPlan: echo.PlanComplete,
470+
Parse: echo.ParseComplete,
471+
ProvisionPlan: []*proto.Response{
472+
{
473+
Type: &proto.Response_Plan{
474+
Plan: &proto.PlanComplete{
475+
Parameters: testParameters,
476+
},
477+
},
478+
},
479+
},
418480
ProvisionApply: []*proto.Response{
419481
{
420482
Type: &proto.Response_Apply{
@@ -438,7 +500,8 @@ func Test_Runner(t *testing.T) {
438500
Workspace: workspacebuild.Config{
439501
OrganizationID: user.OrganizationID,
440502
Request: codersdk.CreateWorkspaceRequest{
441-
TemplateID: template.ID,
503+
TemplateID: template.ID,
504+
RichParameterValues: testParameterValues,
442505
},
443506
},
444507
})

scripts/coder-dev.sh

+3
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ fi
1717
if [[ ${1:-} == wsproxy ]] && [[ ${2:-} == server ]]; then
1818
BINARY_TYPE=coder
1919
fi
20+
if [[ ${1:-} == exp ]] && [[ ${2:-} == scaletest ]]; then
21+
BINARY_TYPE=coder
22+
fi
2023
RELATIVE_BINARY_PATH="build/${BINARY_TYPE}_${GOOS}_${GOARCH}"
2124

2225
# To preserve the CWD when running the binary, we need to use pushd and popd to

0 commit comments

Comments
 (0)