@@ -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 ) {
0 commit comments