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

Commiteb881ea

Browse files
chore: begin validating agent name
Begin validation of the agent name. This uses the same logic (with theexception of duplicate agent name detection) as the provisioner.A future commit will aim to rectify the duplicate agent name issue.
1 parentb1f8e42 commiteb881ea

File tree

2 files changed

+79
-29
lines changed

2 files changed

+79
-29
lines changed

‎coderd/agentapi/devcontainer_agent.go

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package agentapi
22

33
import (
44
"context"
5-
"strings"
65

76
"github.com/google/uuid"
87
"github.com/sqlc-dev/pqtype"
@@ -12,6 +11,7 @@ import (
1211
agentproto"github.com/coder/coder/v2/agent/proto"
1312
"github.com/coder/coder/v2/coderd/database"
1413
"github.com/coder/coder/v2/coderd/database/dbauthz"
14+
"github.com/coder/coder/v2/provisioner"
1515
"github.com/coder/quartz"
1616
)
1717

@@ -33,9 +33,16 @@ func (a *DevContainerAgentAPI) CreateDevContainerAgent(ctx context.Context, req
3333
returnnil,xerrors.Errorf("get parent agent: %w",err)
3434
}
3535

36-
// TODO(DanielleMaywood):
37-
// Validate this agent name
38-
agentName:=strings.ToLower(req.Name)
36+
// NOTE(DanielleMaywood):
37+
// This allows duplicate agent names to make it through.
38+
// It would be nice if this was enforced at the database level.
39+
agentName:=req.Name
40+
ifagentName=="" {
41+
returnnil,xerrors.Errorf("agent name cannot be empty")
42+
}
43+
if!provisioner.AgentNameRegex.MatchString(agentName) {
44+
returnnil,xerrors.Errorf("agent name %q does not match regex %q",agentName,provisioner.AgentNameRegex.String())
45+
}
3946

4047
devContainerAgent,err:=a.Database.InsertWorkspaceAgent(ctx, database.InsertWorkspaceAgentParams{
4148
ID:uuid.New(),

‎coderd/agentapi/devcontainer_agent_test.go

Lines changed: 68 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -79,34 +79,77 @@ func devContainerAgentAPI(t *testing.T, log slog.Logger) (*agentapi.DevContainer
7979
funcTestDevContainerAgentAPI(t*testing.T) {
8080
t.Parallel()
8181

82-
t.Run("CanCreateDevContainerAgent",func(t*testing.T) {
82+
t.Run("CreateDevContainerAgent",func(t*testing.T) {
8383
t.Parallel()
8484

85-
log:=testutil.Logger(t)
86-
ctx:=testutil.Context(t,testutil.WaitShort)
87-
api,_:=devContainerAgentAPI(t,log)
88-
89-
createResp,err:=api.CreateDevContainerAgent(ctx,&proto.CreateDevContainerAgentRequest{
90-
Name:"some-child-agent",
91-
Directory:"/workspaces/wibble",
92-
Architecture:"amd64",
93-
OperatingSystem:"linux",
94-
})
95-
require.NoError(t,err)
96-
97-
agentID,err:=uuid.FromBytes(createResp.Id)
98-
require.NoError(t,err)
99-
100-
agent,err:=api.Database.GetWorkspaceAgentByID(dbauthz.AsSystemRestricted(ctx),agentID)//nolint:gocritic // this is a test.
101-
require.NoError(t,err)
85+
tests:= []struct {
86+
namestring
87+
agentNamestring
88+
agentDirstring
89+
agentArchstring
90+
agentOSstring
91+
shouldErrbool
92+
}{
93+
{
94+
name:"Ok",
95+
agentName:"some-child-agent",
96+
agentDir:"/workspaces/wibble",
97+
agentArch:"amd64",
98+
agentOS:"linux",
99+
},
100+
{
101+
name:"NameWithUnderscore",
102+
agentName:"some_child_agent",
103+
agentDir:"/workspaces/wibble",
104+
agentArch:"amd64",
105+
agentOS:"linux",
106+
shouldErr:true,
107+
},
108+
{
109+
name:"EmptyName",
110+
agentName:"",
111+
agentDir:"/workspaces/wibble",
112+
agentArch:"amd64",
113+
agentOS:"linux",
114+
shouldErr:true,
115+
},
116+
}
102117

103-
require.Equal(t,"some-child-agent",agent.Name)
104-
require.Equal(t,"/workspaces/wibble",agent.Directory)
105-
require.Equal(t,"amd64",agent.Architecture)
106-
require.Equal(t,"linux",agent.OperatingSystem)
118+
for_,tt:=rangetests {
119+
t.Run(tt.name,func(t*testing.T) {
120+
t.Parallel()
121+
122+
log:=testutil.Logger(t)
123+
ctx:=testutil.Context(t,testutil.WaitShort)
124+
api,_:=devContainerAgentAPI(t,log)
125+
126+
createResp,err:=api.CreateDevContainerAgent(ctx,&proto.CreateDevContainerAgentRequest{
127+
Name:tt.agentName,
128+
Directory:tt.agentDir,
129+
Architecture:tt.agentArch,
130+
OperatingSystem:tt.agentOS,
131+
})
132+
iftt.shouldErr {
133+
require.Error(t,err)
134+
}else {
135+
require.NoError(t,err)
136+
137+
agentID,err:=uuid.FromBytes(createResp.Id)
138+
require.NoError(t,err)
139+
140+
agent,err:=api.Database.GetWorkspaceAgentByID(dbauthz.AsSystemRestricted(ctx),agentID)//nolint:gocritic // this is a test.
141+
require.NoError(t,err)
142+
143+
require.Equal(t,tt.agentName,agent.Name)
144+
require.Equal(t,tt.agentDir,agent.Directory)
145+
require.Equal(t,tt.agentArch,agent.Architecture)
146+
require.Equal(t,tt.agentOS,agent.OperatingSystem)
147+
}
148+
})
149+
}
107150
})
108151

109-
t.Run("CanDeleteDevContainerAgent",func(t*testing.T) {
152+
t.Run("DeleteDevContainerAgent",func(t*testing.T) {
110153
t.Parallel()
111154

112155
log:=testutil.Logger(t)
@@ -134,7 +177,7 @@ func TestDevContainerAgentAPI(t *testing.T) {
134177
require.ErrorIs(t,err,sql.ErrNoRows)
135178
})
136179

137-
t.Run("CanDeleteOneDevContainerAgentOfMany",func(t*testing.T) {
180+
t.Run("DeleteOneDevContainerAgentOfMany",func(t*testing.T) {
138181
t.Parallel()
139182

140183
log:=testutil.Logger(t)
@@ -174,7 +217,7 @@ func TestDevContainerAgentAPI(t *testing.T) {
174217
require.NoError(t,err)
175218
})
176219

177-
t.Run("CanListDevContainerAgents",func(t*testing.T) {
220+
t.Run("ListDevContainerAgents",func(t*testing.T) {
178221
t.Parallel()
179222

180223
log:=testutil.Logger(t)

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp