@@ -218,6 +218,40 @@ var _ = Describe("WorkspaceController", func() {
218
218
})
219
219
})
220
220
221
+ It ("should handle workspace failure with unknown exit code" , func () {
222
+ ws := newWorkspace (uuid .NewString (), "default" )
223
+ m := collectMetricCounts (wsMetrics , ws )
224
+ pod := createWorkspaceExpectPod (ws )
225
+
226
+ markReady (ws )
227
+
228
+ // Update Pod with failed exit status.
229
+ updateObjWithRetries (k8sClient , pod , true , func (pod * corev1.Pod ) {
230
+ pod .Status .ContainerStatuses = append (pod .Status .ContainerStatuses , corev1.ContainerStatus {
231
+ LastTerminationState : corev1.ContainerState {
232
+ Terminated : & corev1.ContainerStateTerminated {
233
+ ExitCode : containerUnknownExitCode ,
234
+ },
235
+ },
236
+ })
237
+ })
238
+
239
+ // Controller should detect container exit and add Failed condition.
240
+ expectConditionEventually (ws , string (workspacev1 .WorkspaceConditionFailed ), metav1 .ConditionTrue , "" )
241
+
242
+ expectFinalizerAndMarkBackupCompleted (ws , pod )
243
+
244
+ expectWorkspaceCleanup (ws , pod )
245
+
246
+ expectMetricsDelta (m , collectMetricCounts (wsMetrics , ws ), metricCounts {
247
+ restores : 1 ,
248
+ startFailures : 0 ,
249
+ failures : 1 ,
250
+ stops : map [StopReason ]int {StopReasonFailed : 1 },
251
+ backups : 1 ,
252
+ })
253
+ })
254
+
221
255
It ("should clean up timed out workspaces" , func () {
222
256
ws := newWorkspace (uuid .NewString (), "default" )
223
257
m := collectMetricCounts (wsMetrics , ws )
0 commit comments