@@ -68,52 +68,130 @@ func TestWorkspaceAgent(t *testing.T) {
68
68
69
69
func TestWorkspaceAgentListen (t * testing.T ) {
70
70
t .Parallel ()
71
- client ,coderAPI := coderdtest .NewWithAPI (t ,nil )
72
- user := coderdtest .CreateFirstUser (t ,client )
73
- daemonCloser := coderdtest .NewProvisionerDaemon (t ,coderAPI )
74
- authToken := uuid .NewString ()
75
- version := coderdtest .CreateTemplateVersion (t ,client ,user .OrganizationID ,& echo.Responses {
76
- Parse :echo .ParseComplete ,
77
- ProvisionDryRun :echo .ProvisionComplete ,
78
- Provision : []* proto.Provision_Response {{
79
- Type :& proto.Provision_Response_Complete {
80
- Complete :& proto.Provision_Complete {
81
- Resources : []* proto.Resource {{
82
- Name :"example" ,
83
- Type :"aws_instance" ,
84
- Agents : []* proto.Agent {{
85
- Id :uuid .NewString (),
86
- Auth :& proto.Agent_Token {
87
- Token :authToken ,
88
- },
71
+
72
+ t .Run ("Connect" ,func (t * testing.T ) {
73
+ t .Parallel ()
74
+
75
+ client ,coderAPI := coderdtest .NewWithAPI (t ,nil )
76
+ user := coderdtest .CreateFirstUser (t ,client )
77
+ daemonCloser := coderdtest .NewProvisionerDaemon (t ,coderAPI )
78
+ authToken := uuid .NewString ()
79
+ version := coderdtest .CreateTemplateVersion (t ,client ,user .OrganizationID ,& echo.Responses {
80
+ Parse :echo .ParseComplete ,
81
+ ProvisionDryRun :echo .ProvisionComplete ,
82
+ Provision : []* proto.Provision_Response {{
83
+ Type :& proto.Provision_Response_Complete {
84
+ Complete :& proto.Provision_Complete {
85
+ Resources : []* proto.Resource {{
86
+ Name :"example" ,
87
+ Type :"aws_instance" ,
88
+ Agents : []* proto.Agent {{
89
+ Id :uuid .NewString (),
90
+ Auth :& proto.Agent_Token {
91
+ Token :authToken ,
92
+ },
93
+ }},
89
94
}},
90
- }} ,
95
+ },
91
96
},
92
- },
93
- }},
94
- })
95
- template := coderdtest .CreateTemplate (t ,client ,user .OrganizationID ,version .ID )
96
- coderdtest .AwaitTemplateVersionJob (t ,client ,version .ID )
97
- workspace := coderdtest .CreateWorkspace (t ,client ,user .OrganizationID ,template .ID )
98
- coderdtest .AwaitWorkspaceBuildJob (t ,client ,workspace .LatestBuild .ID )
99
- daemonCloser .Close ()
97
+ }},
98
+ })
99
+ template := coderdtest .CreateTemplate (t ,client ,user .OrganizationID ,version .ID )
100
+ coderdtest .AwaitTemplateVersionJob (t ,client ,version .ID )
101
+ workspace := coderdtest .CreateWorkspace (t ,client ,user .OrganizationID ,template .ID )
102
+ coderdtest .AwaitWorkspaceBuildJob (t ,client ,workspace .LatestBuild .ID )
103
+ daemonCloser .Close ()
100
104
101
- agentClient := codersdk .New (client .URL )
102
- agentClient .SessionToken = authToken
103
- agentCloser := agent .New (agentClient .ListenWorkspaceAgent ,& agent.Options {
104
- Logger :slogtest .Make (t ,nil ).Named ("agent" ).Leveled (slog .LevelDebug ),
105
- })
106
- t .Cleanup (func () {
107
- _ = agentCloser .Close ()
105
+ agentClient := codersdk .New (client .URL )
106
+ agentClient .SessionToken = authToken
107
+ agentCloser := agent .New (agentClient .ListenWorkspaceAgent ,& agent.Options {
108
+ Logger :slogtest .Make (t ,nil ).Named ("agent" ).Leveled (slog .LevelDebug ),
109
+ })
110
+ t .Cleanup (func () {
111
+ _ = agentCloser .Close ()
112
+ })
113
+ resources := coderdtest .AwaitWorkspaceAgents (t ,client ,workspace .LatestBuild .ID )
114
+ conn ,err := client .DialWorkspaceAgent (context .Background (),resources [0 ].Agents [0 ].ID ,nil )
115
+ require .NoError (t ,err )
116
+ t .Cleanup (func () {
117
+ _ = conn .Close ()
118
+ })
119
+ _ ,err = conn .Ping ()
120
+ require .NoError (t ,err )
108
121
})
109
- resources := coderdtest .AwaitWorkspaceAgents (t ,client ,workspace .LatestBuild .ID )
110
- conn ,err := client .DialWorkspaceAgent (context .Background (),resources [0 ].Agents [0 ].ID ,nil )
111
- require .NoError (t ,err )
112
- t .Cleanup (func () {
113
- _ = conn .Close ()
122
+
123
+ t .Run ("FailNonLatestBuild" ,func (t * testing.T ) {
124
+ t .Parallel ()
125
+
126
+ ctx := context .Background ()
127
+ client ,coderAPI := coderdtest .NewWithAPI (t ,nil )
128
+ user := coderdtest .CreateFirstUser (t ,client )
129
+ daemonCloser := coderdtest .NewProvisionerDaemon (t ,coderAPI )
130
+ defer daemonCloser .Close ()
131
+
132
+ authToken := uuid .NewString ()
133
+ version := coderdtest .CreateTemplateVersion (t ,client ,user .OrganizationID ,& echo.Responses {
134
+ Parse :echo .ParseComplete ,
135
+ ProvisionDryRun :echo .ProvisionComplete ,
136
+ Provision : []* proto.Provision_Response {{
137
+ Type :& proto.Provision_Response_Complete {
138
+ Complete :& proto.Provision_Complete {
139
+ Resources : []* proto.Resource {{
140
+ Name :"example" ,
141
+ Type :"aws_instance" ,
142
+ Agents : []* proto.Agent {{
143
+ Id :uuid .NewString (),
144
+ Auth :& proto.Agent_Token {
145
+ Token :authToken ,
146
+ },
147
+ }},
148
+ }},
149
+ },
150
+ },
151
+ }},
152
+ })
153
+
154
+ template := coderdtest .CreateTemplate (t ,client ,user .OrganizationID ,version .ID )
155
+ coderdtest .AwaitTemplateVersionJob (t ,client ,version .ID )
156
+ workspace := coderdtest .CreateWorkspace (t ,client ,user .OrganizationID ,template .ID )
157
+ coderdtest .AwaitWorkspaceBuildJob (t ,client ,workspace .LatestBuild .ID )
158
+
159
+ version = coderdtest .UpdateTemplateVersion (t ,client ,user .OrganizationID ,& echo.Responses {
160
+ Parse :echo .ParseComplete ,
161
+ ProvisionDryRun :echo .ProvisionComplete ,
162
+ Provision : []* proto.Provision_Response {{
163
+ Type :& proto.Provision_Response_Complete {
164
+ Complete :& proto.Provision_Complete {
165
+ Resources : []* proto.Resource {{
166
+ Name :"example" ,
167
+ Type :"aws_instance" ,
168
+ Agents : []* proto.Agent {{
169
+ Id :uuid .NewString (),
170
+ Auth :& proto.Agent_Token {
171
+ Token :uuid .NewString (),
172
+ },
173
+ }},
174
+ }},
175
+ },
176
+ },
177
+ }},
178
+ },template .ID )
179
+ coderdtest .AwaitTemplateVersionJob (t ,client ,version .ID )
180
+
181
+ stopBuild ,err := client .CreateWorkspaceBuild (context .Background (),workspace .ID , codersdk.CreateWorkspaceBuildRequest {
182
+ TemplateVersionID :version .ID ,
183
+ Transition :codersdk .WorkspaceTransitionStop ,
184
+ })
185
+ require .NoError (t ,err )
186
+ coderdtest .AwaitWorkspaceBuildJob (t ,client ,stopBuild .ID )
187
+
188
+ agentClient := codersdk .New (client .URL )
189
+ agentClient .SessionToken = authToken
190
+
191
+ _ ,_ ,err = agentClient .ListenWorkspaceAgent (ctx ,slogtest .Make (t ,nil ))
192
+ require .Error (t ,err )
193
+ require .ErrorContains (t ,err ,"build is outdated" )
114
194
})
115
- _ ,err = conn .Ping ()
116
- require .NoError (t ,err )
117
195
}
118
196
119
197
func TestWorkspaceAgentTURN (t * testing.T ) {