1
1
package cli_test
2
2
3
3
import (
4
- "context"
5
4
"fmt"
6
5
"net/http"
7
6
"os"
@@ -11,7 +10,6 @@ import (
11
10
"sync/atomic"
12
11
"testing"
13
12
14
- "github.com/google/uuid"
15
13
"github.com/stretchr/testify/assert"
16
14
"github.com/stretchr/testify/require"
17
15
@@ -21,10 +19,7 @@ import (
21
19
"github.com/coder/coder/v2/coderd/coderdtest"
22
20
"github.com/coder/coder/v2/coderd/database"
23
21
"github.com/coder/coder/v2/coderd/database/dbfake"
24
- "github.com/coder/coder/v2/coderd/database/dbtestutil"
25
22
"github.com/coder/coder/v2/codersdk"
26
- "github.com/coder/coder/v2/codersdk/workspacesdk"
27
- "github.com/coder/coder/v2/provisionersdk/proto"
28
23
"github.com/coder/coder/v2/testutil"
29
24
)
30
25
@@ -64,158 +59,6 @@ func TestWorkspaceAgent(t *testing.T) {
64
59
},testutil .WaitLong ,testutil .IntervalMedium )
65
60
})
66
61
67
- t .Run ("Azure" ,func (t * testing.T ) {
68
- t .Parallel ()
69
- instanceID := "instanceidentifier"
70
- certificates ,metadataClient := coderdtest .NewAzureInstanceIdentity (t ,instanceID )
71
- db ,ps := dbtestutil .NewDB (t ,
72
- dbtestutil .WithDumpOnFailure (),
73
- )
74
- client := coderdtest .New (t ,& coderdtest.Options {
75
- Database :db ,
76
- Pubsub :ps ,
77
- AzureCertificates :certificates ,
78
- })
79
- user := coderdtest .CreateFirstUser (t ,client )
80
- r := dbfake .WorkspaceBuild (t ,db , database.WorkspaceTable {
81
- OrganizationID :user .OrganizationID ,
82
- OwnerID :user .UserID ,
83
- }).WithAgent (func (agents []* proto.Agent ) []* proto.Agent {
84
- agents [0 ].Auth = & proto.Agent_InstanceId {InstanceId :instanceID }
85
- return agents
86
- }).Do ()
87
-
88
- inv ,_ := clitest .New (t ,"agent" ,"--auth" ,"azure-instance-identity" ,"--agent-url" ,client .URL .String ())
89
- inv = inv .WithContext (
90
- //nolint:revive,staticcheck
91
- context .WithValue (inv .Context (),"azure-client" ,metadataClient ),
92
- )
93
-
94
- ctx := inv .Context ()
95
- clitest .Start (t ,inv )
96
- coderdtest .NewWorkspaceAgentWaiter (t ,client ,r .Workspace .ID ).
97
- MatchResources (matchAgentWithVersion ).Wait ()
98
- workspace ,err := client .Workspace (ctx ,r .Workspace .ID )
99
- require .NoError (t ,err )
100
- resources := workspace .LatestBuild .Resources
101
- if assert .NotEmpty (t ,workspace .LatestBuild .Resources )&& assert .NotEmpty (t ,resources [0 ].Agents ) {
102
- assert .NotEmpty (t ,resources [0 ].Agents [0 ].Version )
103
- }
104
- dialer ,err := workspacesdk .New (client ).
105
- DialAgent (ctx ,resources [0 ].Agents [0 ].ID ,nil )
106
- require .NoError (t ,err )
107
- defer dialer .Close ()
108
- require .True (t ,dialer .AwaitReachable (ctx ))
109
- })
110
-
111
- t .Run ("AWS" ,func (t * testing.T ) {
112
- t .Parallel ()
113
- instanceID := "instanceidentifier"
114
- certificates ,metadataClient := coderdtest .NewAWSInstanceIdentity (t ,instanceID )
115
- db ,ps := dbtestutil .NewDB (t ,
116
- dbtestutil .WithDumpOnFailure (),
117
- )
118
- client := coderdtest .New (t ,& coderdtest.Options {
119
- Database :db ,
120
- Pubsub :ps ,
121
- AWSCertificates :certificates ,
122
- })
123
- user := coderdtest .CreateFirstUser (t ,client )
124
- r := dbfake .WorkspaceBuild (t ,db , database.WorkspaceTable {
125
- OrganizationID :user .OrganizationID ,
126
- OwnerID :user .UserID ,
127
- }).WithAgent (func (agents []* proto.Agent ) []* proto.Agent {
128
- agents [0 ].Auth = & proto.Agent_InstanceId {InstanceId :instanceID }
129
- return agents
130
- }).Do ()
131
-
132
- inv ,_ := clitest .New (t ,"agent" ,"--auth" ,"aws-instance-identity" ,"--agent-url" ,client .URL .String ())
133
- inv = inv .WithContext (
134
- //nolint:revive,staticcheck
135
- context .WithValue (inv .Context (),"aws-client" ,metadataClient ),
136
- )
137
-
138
- clitest .Start (t ,inv )
139
- ctx := inv .Context ()
140
- coderdtest .NewWorkspaceAgentWaiter (t ,client ,r .Workspace .ID ).
141
- MatchResources (matchAgentWithVersion ).
142
- Wait ()
143
- workspace ,err := client .Workspace (ctx ,r .Workspace .ID )
144
- require .NoError (t ,err )
145
- resources := workspace .LatestBuild .Resources
146
- if assert .NotEmpty (t ,resources )&& assert .NotEmpty (t ,resources [0 ].Agents ) {
147
- assert .NotEmpty (t ,resources [0 ].Agents [0 ].Version )
148
- }
149
- dialer ,err := workspacesdk .New (client ).
150
- DialAgent (ctx ,resources [0 ].Agents [0 ].ID ,nil )
151
- require .NoError (t ,err )
152
- defer dialer .Close ()
153
- require .True (t ,dialer .AwaitReachable (ctx ))
154
- })
155
-
156
- t .Run ("GoogleCloud" ,func (t * testing.T ) {
157
- t .Parallel ()
158
- instanceID := "instanceidentifier"
159
- validator ,metadataClient := coderdtest .NewGoogleInstanceIdentity (t ,instanceID ,false )
160
- db ,ps := dbtestutil .NewDB (t ,
161
- dbtestutil .WithDumpOnFailure (),
162
- )
163
- client := coderdtest .New (t ,& coderdtest.Options {
164
- Database :db ,
165
- Pubsub :ps ,
166
- GoogleTokenValidator :validator ,
167
- })
168
- owner := coderdtest .CreateFirstUser (t ,client )
169
- member ,memberUser := coderdtest .CreateAnotherUser (t ,client ,owner .OrganizationID )
170
- r := dbfake .WorkspaceBuild (t ,db , database.WorkspaceTable {
171
- OrganizationID :owner .OrganizationID ,
172
- OwnerID :memberUser .ID ,
173
- }).WithAgent (func (agents []* proto.Agent ) []* proto.Agent {
174
- agents [0 ].Auth = & proto.Agent_InstanceId {InstanceId :instanceID }
175
- return agents
176
- }).Do ()
177
-
178
- inv ,cfg := clitest .New (t ,"agent" ,"--auth" ,"google-instance-identity" ,"--agent-url" ,client .URL .String ())
179
- clitest .SetupConfig (t ,member ,cfg )
180
-
181
- clitest .Start (t ,
182
- inv .WithContext (
183
- //nolint:revive,staticcheck
184
- context .WithValue (inv .Context (),"gcp-client" ,metadataClient ),
185
- ),
186
- )
187
-
188
- ctx := inv .Context ()
189
- coderdtest .NewWorkspaceAgentWaiter (t ,client ,r .Workspace .ID ).
190
- MatchResources (matchAgentWithVersion ).
191
- Wait ()
192
- workspace ,err := client .Workspace (ctx ,r .Workspace .ID )
193
- require .NoError (t ,err )
194
- resources := workspace .LatestBuild .Resources
195
- if assert .NotEmpty (t ,resources )&& assert .NotEmpty (t ,resources [0 ].Agents ) {
196
- assert .NotEmpty (t ,resources [0 ].Agents [0 ].Version )
197
- }
198
- dialer ,err := workspacesdk .New (client ).DialAgent (ctx ,resources [0 ].Agents [0 ].ID ,nil )
199
- require .NoError (t ,err )
200
- defer dialer .Close ()
201
- require .True (t ,dialer .AwaitReachable (ctx ))
202
- sshClient ,err := dialer .SSHClient (ctx )
203
- require .NoError (t ,err )
204
- defer sshClient .Close ()
205
- session ,err := sshClient .NewSession ()
206
- require .NoError (t ,err )
207
- defer session .Close ()
208
- key := "CODER_AGENT_TOKEN"
209
- command := "sh -c 'echo $" + key + "'"
210
- if runtime .GOOS == "windows" {
211
- command = "cmd.exe /c echo %" + key + "%"
212
- }
213
- token ,err := session .CombinedOutput (command )
214
- require .NoError (t ,err )
215
- _ ,err = uuid .Parse (strings .TrimSpace (string (token )))
216
- require .NoError (t ,err )
217
- })
218
-
219
62
t .Run ("PostStartup" ,func (t * testing.T ) {
220
63
t .Parallel ()
221
64