Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit28a1b71

Browse files
committed
refactor(scaletest): add scaletest runner for creating users
1 parent088d149 commit28a1b71

File tree

3 files changed

+148
-34
lines changed

3 files changed

+148
-34
lines changed

‎scaletest/createusers/config.go‎

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package createusers
2+
3+
import (
4+
"github.com/google/uuid"
5+
"golang.org/x/xerrors"
6+
)
7+
8+
typeConfigstruct {
9+
// OrganizationID is the ID of the organization to add the user to.
10+
OrganizationID uuid.UUID`json:"organization_id"`
11+
// Username is the username of the new user.
12+
Usernamestring`json:"username"`
13+
// Email is the email of the new user.
14+
Emailstring`json:"email"`
15+
}
16+
17+
func (cConfig)Validate()error {
18+
ifc.OrganizationID==uuid.Nil {
19+
returnxerrors.New("organization_id must not be a nil UUID")
20+
}
21+
ifc.Username=="" {
22+
returnxerrors.New("username must be set")
23+
}
24+
ifc.Email=="" {
25+
returnxerrors.New("email must be set")
26+
}
27+
28+
returnnil
29+
}

‎scaletest/createusers/run.go‎

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
package createusers
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"io"
7+
8+
"github.com/google/uuid"
9+
"golang.org/x/xerrors"
10+
11+
"cdr.dev/slog"
12+
"cdr.dev/slog/sloggers/sloghuman"
13+
14+
"github.com/coder/coder/v2/coderd/tracing"
15+
"github.com/coder/coder/v2/codersdk"
16+
"github.com/coder/coder/v2/cryptorand"
17+
"github.com/coder/coder/v2/scaletest/harness"
18+
"github.com/coder/coder/v2/scaletest/loadtestutil"
19+
)
20+
21+
typeRunnerstruct {
22+
client*codersdk.Client
23+
cfgConfig
24+
25+
userID uuid.UUID
26+
sessionTokenstring
27+
user codersdk.User
28+
}
29+
30+
var (
31+
_ harness.Runnable=&Runner{}
32+
_ harness.Cleanable=&Runner{}
33+
)
34+
35+
funcNewRunner(client*codersdk.Client,cfgConfig)*Runner {
36+
return&Runner{
37+
client:client,
38+
cfg:cfg,
39+
}
40+
}
41+
42+
func (r*Runner)Run(ctx context.Context,_string,logs io.Writer)error {
43+
ctx,span:=tracing.StartSpan(ctx)
44+
deferspan.End()
45+
46+
logs=loadtestutil.NewSyncWriter(logs)
47+
logger:=slog.Make(sloghuman.Sink(logs)).Leveled(slog.LevelDebug)
48+
r.client.SetLogger(logger)
49+
r.client.SetLogBodies(true)
50+
51+
_,_=fmt.Fprintln(logs,"Generating user password...")
52+
password,err:=cryptorand.String(16)
53+
iferr!=nil {
54+
returnxerrors.Errorf("generate random password for user: %w",err)
55+
}
56+
57+
_,_=fmt.Fprintln(logs,"Creating user:")
58+
user,err:=r.client.CreateUserWithOrgs(ctx, codersdk.CreateUserRequestWithOrgs{
59+
OrganizationIDs: []uuid.UUID{r.cfg.OrganizationID},
60+
Username:r.cfg.Username,
61+
Email:r.cfg.Email,
62+
Password:password,
63+
})
64+
iferr!=nil {
65+
returnxerrors.Errorf("create user: %w",err)
66+
}
67+
r.userID=user.ID
68+
r.user=user
69+
70+
_,_=fmt.Fprintln(logs,"\nLogging in as new user...")
71+
client:=codersdk.New(r.client.URL)
72+
loginRes,err:=client.LoginWithPassword(ctx, codersdk.LoginWithPasswordRequest{
73+
Email:r.cfg.Email,
74+
Password:password,
75+
})
76+
iferr!=nil {
77+
returnxerrors.Errorf("login as new user: %w",err)
78+
}
79+
r.sessionToken=loginRes.SessionToken
80+
81+
_,_=fmt.Fprintf(logs,"\tOrg ID: %s\n",r.cfg.OrganizationID.String())
82+
_,_=fmt.Fprintf(logs,"\tUsername: %s\n",user.Username)
83+
_,_=fmt.Fprintf(logs,"\tEmail: %s\n",user.Email)
84+
_,_=fmt.Fprintf(logs,"\tPassword: ****************\n")
85+
86+
returnnil
87+
}
88+
89+
func (r*Runner)Cleanup(ctx context.Context,_string,logs io.Writer)error {
90+
ifr.userID!=uuid.Nil {
91+
err:=r.client.DeleteUser(ctx,r.userID)
92+
iferr!=nil {
93+
_,_=fmt.Fprintf(logs,"failed to delete user %q: %v\n",r.userID.String(),err)
94+
returnxerrors.Errorf("delete user: %w",err)
95+
}
96+
}
97+
returnnil
98+
}
99+
100+
func (r*Runner)SessionToken()string {
101+
returnr.sessionToken
102+
}
103+
104+
func (r*Runner)User() codersdk.User {
105+
returnr.user
106+
}

‎scaletest/createworkspaces/run.go‎

Lines changed: 13 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ import (
1414

1515
"github.com/coder/coder/v2/coderd/tracing"
1616
"github.com/coder/coder/v2/codersdk"
17-
"github.com/coder/coder/v2/cryptorand"
1817
"github.com/coder/coder/v2/scaletest/agentconn"
18+
"github.com/coder/coder/v2/scaletest/createusers"
1919
"github.com/coder/coder/v2/scaletest/harness"
2020
"github.com/coder/coder/v2/scaletest/loadtestutil"
2121
"github.com/coder/coder/v2/scaletest/reconnectingpty"
@@ -26,7 +26,7 @@ type Runner struct {
2626
client*codersdk.Client
2727
cfgConfig
2828

29-
userID uuid.UUID
29+
createUserRunner*createusers.Runner
3030
workspacebuildRunner*workspacebuild.Runner
3131
}
3232

@@ -64,42 +64,22 @@ func (r *Runner) Run(ctx context.Context, id string, logs io.Writer) error {
6464
returnxerrors.Errorf("generate random password for user: %w",err)
6565
}
6666
}else {
67-
_,_=fmt.Fprintln(logs,"Generating user password...")
68-
password,err:=cryptorand.String(16)
69-
iferr!=nil {
70-
returnxerrors.Errorf("generate random password for user: %w",err)
67+
createUserConfig:= createusers.Config{
68+
OrganizationID:r.cfg.User.OrganizationID,
69+
Username:r.cfg.User.Username,
70+
Email:r.cfg.User.Email,
7171
}
72-
73-
_,_=fmt.Fprintln(logs,"Creating user:")
74-
75-
user,err=r.client.CreateUserWithOrgs(ctx, codersdk.CreateUserRequestWithOrgs{
76-
OrganizationIDs: []uuid.UUID{r.cfg.User.OrganizationID},
77-
Username:r.cfg.User.Username,
78-
Email:r.cfg.User.Email,
79-
Password:password,
80-
})
72+
r.createUserRunner=createusers.NewRunner(r.client,createUserConfig)
73+
err=r.createUserRunner.Run(ctx,id,logs)
8174
iferr!=nil {
8275
returnxerrors.Errorf("create user: %w",err)
8376
}
84-
r.userID=user.ID
8577

86-
_,_=fmt.Fprintln(logs,"\nLogging in as new user...")
78+
user=r.createUserRunner.User()
8779
client=codersdk.New(r.client.URL)
88-
loginRes,err:=client.LoginWithPassword(ctx, codersdk.LoginWithPasswordRequest{
89-
Email:r.cfg.User.Email,
90-
Password:password,
91-
})
92-
iferr!=nil {
93-
returnxerrors.Errorf("login as new user: %w",err)
94-
}
95-
client.SetSessionToken(loginRes.SessionToken)
80+
client.SetSessionToken(r.createUserRunner.SessionToken())
9681
}
9782

98-
_,_=fmt.Fprintf(logs,"\tOrg ID: %s\n",r.cfg.User.OrganizationID.String())
99-
_,_=fmt.Fprintf(logs,"\tUsername: %s\n",user.Username)
100-
_,_=fmt.Fprintf(logs,"\tEmail: %s\n",user.Email)
101-
_,_=fmt.Fprintf(logs,"\tPassword: ****************\n")
102-
10383
_,_=fmt.Fprintln(logs,"\nCreating workspace...")
10484
workspaceBuildConfig:=r.cfg.Workspace
10585
workspaceBuildConfig.OrganizationID=r.cfg.User.OrganizationID
@@ -189,11 +169,10 @@ func (r *Runner) Cleanup(ctx context.Context, id string, logs io.Writer) error {
189169
}
190170
}
191171

192-
ifr.userID!=uuid.Nil {
193-
err:=r.client.DeleteUser(ctx,r.userID)
172+
ifr.createUserRunner!=nil {
173+
err:=r.createUserRunner.Cleanup(ctx,id,logs)
194174
iferr!=nil {
195-
_,_=fmt.Fprintf(logs,"failed to delete user %q: %v\n",r.userID.String(),err)
196-
returnxerrors.Errorf("delete user: %w",err)
175+
returnxerrors.Errorf("cleanup user: %w",err)
197176
}
198177
}
199178

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp