|
1 | 1 | package agentapi_test
|
2 | 2 |
|
3 | 3 | import (
|
| 4 | +"cmp" |
4 | 5 | "context"
|
| 6 | +"slices" |
5 | 7 | "sync/atomic"
|
6 | 8 | "testing"
|
7 | 9 |
|
@@ -78,49 +80,91 @@ func TestDevContainerAgentAPI(t *testing.T) {
|
78 | 80 |
|
79 | 81 | log:=testutil.Logger(t)
|
80 | 82 | ctx:=testutil.Context(t,testutil.WaitShort)
|
81 |
| - |
82 | 83 | api:=devContainerAgentAPI(t,log)
|
83 | 84 |
|
84 | 85 | // Given: There are no dev container agents.
|
85 | 86 | listResp,err:=api.ListDevContainerAgents(ctx,&proto.ListDevContainerAgentsRequest{})
|
86 | 87 | require.NoError(t,err)
|
87 | 88 | require.Len(t,listResp.Agents,0)
|
88 | 89 |
|
89 |
| -// When: We createa dev containeragent. |
| 90 | +// When: We createtwo dev containeragents. |
90 | 91 | createResp,err:=api.CreateDevContainerAgent(ctx,&proto.CreateDevContainerAgentRequest{
|
91 | 92 | Name:"some-child-agent",
|
92 |
| -Directory:"/workspaces/coder", |
| 93 | +Directory:"/workspaces/wibble", |
| 94 | +Architecture:"amd64", |
| 95 | +OperatingSystem:"linux", |
| 96 | +}) |
| 97 | +require.NoError(t,err) |
| 98 | + |
| 99 | +childAgentOneID,err:=uuid.FromBytes(createResp.Id) |
| 100 | +require.NoError(t,err) |
| 101 | + |
| 102 | +createResp,err=api.CreateDevContainerAgent(ctx,&proto.CreateDevContainerAgentRequest{ |
| 103 | +Name:"some-other-child-agent", |
| 104 | +Directory:"/workspaces/wobble", |
93 | 105 | Architecture:"amd64",
|
94 | 106 | OperatingSystem:"linux",
|
95 | 107 | })
|
96 | 108 | require.NoError(t,err)
|
97 | 109 |
|
98 |
| -agentID,err:=uuid.FromBytes(createResp.Id) |
| 110 | +childAgentTwoID,err:=uuid.FromBytes(createResp.Id) |
| 111 | +require.NoError(t,err) |
| 112 | + |
| 113 | +// Then: We expect these dev container agents to be created. |
| 114 | +agentOne,err:=api.Database.GetWorkspaceAgentByID(dbauthz.AsSystemRestricted(ctx),childAgentOneID)//nolint:gocritic // this is a test |
99 | 115 | require.NoError(t,err)
|
| 116 | +require.Equal(t,"/workspaces/wibble",agentOne.Directory) |
| 117 | +require.Equal(t,"amd64",agentOne.Architecture) |
| 118 | +require.Equal(t,"linux",agentOne.OperatingSystem) |
| 119 | +require.Equal(t,"some-child-agent",agentOne.Name) |
100 | 120 |
|
101 |
| -// Then: We expect this dev container agent to be created. |
102 |
| -agent,err:=api.Database.GetWorkspaceAgentByID(dbauthz.AsSystemRestricted(ctx),agentID)//nolint:gocritic // this is a test |
| 121 | +agentTwo,err:=api.Database.GetWorkspaceAgentByID(dbauthz.AsSystemRestricted(ctx),childAgentTwoID)//nolint:gocritic // this is a test |
103 | 122 | require.NoError(t,err)
|
104 |
| -require.Equal(t,"/workspaces/coder",agent.Directory) |
105 |
| -require.Equal(t,"amd64",agent.Architecture) |
106 |
| -require.Equal(t,"linux",agent.OperatingSystem) |
107 |
| -require.Equal(t,"some-child-agent",agent.Name) |
| 123 | +require.Equal(t,"/workspaces/wobble",agentTwo.Directory) |
| 124 | +require.Equal(t,"amd64",agentTwo.Architecture) |
| 125 | +require.Equal(t,"linux",agentTwo.OperatingSystem) |
| 126 | +require.Equal(t,"some-other-child-agent",agentTwo.Name) |
| 127 | + |
| 128 | +// Then: We expect to be able to list these dev container agents. |
| 129 | +createdAgents:= []database.WorkspaceAgent{agentOne,agentTwo} |
| 130 | +slices.SortFunc(createdAgents,func(a,b database.WorkspaceAgent)int { |
| 131 | +returncmp.Compare(a.ID.String(),b.ID.String()) |
| 132 | +}) |
108 | 133 |
|
109 |
| -// Then: We expect to be able to list this dev container agent. |
110 | 134 | listResp,err=api.ListDevContainerAgents(ctx,&proto.ListDevContainerAgentsRequest{})
|
111 | 135 | require.NoError(t,err)
|
112 |
| -require.Len(t,listResp.Agents,1) |
113 |
| -require.Equal(t,createResp.Id,listResp.Agents[0].Id) |
114 |
| -require.Equal(t,"some-child-agent",listResp.Agents[0].Name) |
| 136 | +require.Len(t,listResp.Agents,len(createdAgents)) |
| 137 | + |
| 138 | +listedAgents:=listResp.Agents |
| 139 | +slices.SortFunc(listedAgents,func(a,b*proto.ListDevContainerAgentsResponse_DevContainerAgent)int { |
| 140 | +returncmp.Compare(string(a.Id),string(b.Id)) |
| 141 | +}) |
| 142 | + |
| 143 | +fori,agent:=rangelistedAgents { |
| 144 | +require.Equal(t,createdAgents[i].ID[:],agent.Id) |
| 145 | +require.Equal(t,createdAgents[i].Name,agent.Name) |
| 146 | +} |
115 | 147 |
|
116 | 148 | // When: We delete a dev container agent.
|
117 | 149 | _,err=api.DeleteDevContainerAgent(ctx,&proto.DeleteDevContainerAgentRequest{
|
118 |
| -Id:createResp.Id, |
| 150 | +Id:agentOne.ID[:], |
119 | 151 | })
|
120 | 152 | require.NoError(t,err)
|
121 | 153 |
|
122 | 154 | // Then: We expect this dev container agent to be deleted.
|
123 | 155 | listResp,err=api.ListDevContainerAgents(ctx,&proto.ListDevContainerAgentsRequest{})
|
124 | 156 | require.NoError(t,err)
|
| 157 | +require.Len(t,listResp.Agents,1) |
| 158 | +require.Equal(t,agentTwo.ID[:],listResp.Agents[0].Id) |
| 159 | + |
| 160 | +// When: We delete the other dev container agent. |
| 161 | +_,err=api.DeleteDevContainerAgent(ctx,&proto.DeleteDevContainerAgentRequest{ |
| 162 | +Id:agentTwo.ID[:], |
| 163 | +}) |
| 164 | +require.NoError(t,err) |
| 165 | + |
| 166 | +// Then: We expect this other dev container agent to be deleted. |
| 167 | +listResp,err=api.ListDevContainerAgents(ctx,&proto.ListDevContainerAgentsRequest{}) |
| 168 | +require.NoError(t,err) |
125 | 169 | require.Len(t,listResp.Agents,0)
|
126 | 170 | }
|