@@ -363,3 +363,111 @@ func TestWorkspaceAgentPTY(t *testing.T) {
363
363
expectLine (matchEchoCommand )
364
364
expectLine (matchEchoOutput )
365
365
}
366
+
367
+ func TestWorkspaceAgentAppHealth (t * testing.T ) {
368
+ t .Parallel ()
369
+ client := coderdtest .New (t , & coderdtest.Options {
370
+ IncludeProvisionerDaemon : true ,
371
+ })
372
+ user := coderdtest .CreateFirstUser (t , client )
373
+ authToken := uuid .NewString ()
374
+ apps := []* proto.App {
375
+ {
376
+ Name : "code-server" ,
377
+ Command : "some-command" ,
378
+ Url : "http://localhost:3000" ,
379
+ Icon : "/code.svg" ,
380
+ },
381
+ {
382
+ Name : "code-server-2" ,
383
+ Command : "some-command" ,
384
+ Url : "http://localhost:3000" ,
385
+ Icon : "/code.svg" ,
386
+ HealthcheckEnabled : true ,
387
+ HealthcheckUrl : "http://localhost:3000" ,
388
+ HealthcheckInterval : 5 ,
389
+ HealthcheckThreshold : 6 ,
390
+ },
391
+ }
392
+ version := coderdtest .CreateTemplateVersion (t , client , user .OrganizationID , & echo.Responses {
393
+ Parse : echo .ParseComplete ,
394
+ Provision : []* proto.Provision_Response {{
395
+ Type : & proto.Provision_Response_Complete {
396
+ Complete : & proto.Provision_Complete {
397
+ Resources : []* proto.Resource {{
398
+ Name : "example" ,
399
+ Type : "aws_instance" ,
400
+ Agents : []* proto.Agent {{
401
+ Id : uuid .NewString (),
402
+ Auth : & proto.Agent_Token {
403
+ Token : authToken ,
404
+ },
405
+ Apps : apps ,
406
+ }},
407
+ }},
408
+ },
409
+ },
410
+ }},
411
+ })
412
+ coderdtest .AwaitTemplateVersionJob (t , client , version .ID )
413
+ template := coderdtest .CreateTemplate (t , client , user .OrganizationID , version .ID )
414
+ workspace := coderdtest .CreateWorkspace (t , client , user .OrganizationID , template .ID )
415
+ coderdtest .AwaitWorkspaceBuildJob (t , client , workspace .LatestBuild .ID )
416
+
417
+ ctx , cancel := context .WithTimeout (context .Background (), testutil .WaitLong )
418
+ defer cancel ()
419
+
420
+ agentClient := codersdk .New (client .URL )
421
+ agentClient .SessionToken = authToken
422
+
423
+ apiApps , err := agentClient .WorkspaceAgentApps (ctx )
424
+ require .NoError (t , err )
425
+ require .EqualValues (t , codersdk .WorkspaceAppHealthDisabled , apiApps [0 ].Health )
426
+ require .EqualValues (t , codersdk .WorkspaceAppHealthInitializing , apiApps [1 ].Health )
427
+ err = agentClient .PostWorkspaceAgentAppHealth (ctx , codersdk.PostWorkspaceAppHealthsRequest {})
428
+ require .Error (t , err )
429
+ // empty
430
+ err = agentClient .PostWorkspaceAgentAppHealth (ctx , codersdk.PostWorkspaceAppHealthsRequest {})
431
+ require .Error (t , err )
432
+ // invalid name
433
+ err = agentClient .PostWorkspaceAgentAppHealth (ctx , codersdk.PostWorkspaceAppHealthsRequest {
434
+ Healths : map [string ]codersdk.WorkspaceAppHealth {
435
+ "bad-name" : codersdk .WorkspaceAppHealthDisabled ,
436
+ },
437
+ })
438
+ require .Error (t , err )
439
+ // app.HealthEnabled == false
440
+ err = agentClient .PostWorkspaceAgentAppHealth (ctx , codersdk.PostWorkspaceAppHealthsRequest {
441
+ Healths : map [string ]codersdk.WorkspaceAppHealth {
442
+ "code-server" : codersdk .WorkspaceAppHealthInitializing ,
443
+ },
444
+ })
445
+ require .Error (t , err )
446
+ // invalid value
447
+ err = agentClient .PostWorkspaceAgentAppHealth (ctx , codersdk.PostWorkspaceAppHealthsRequest {
448
+ Healths : map [string ]codersdk.WorkspaceAppHealth {
449
+ "code-server-2" : codersdk .WorkspaceAppHealth ("bad-value" ),
450
+ },
451
+ })
452
+ require .Error (t , err )
453
+ // update to healthy
454
+ err = agentClient .PostWorkspaceAgentAppHealth (ctx , codersdk.PostWorkspaceAppHealthsRequest {
455
+ Healths : map [string ]codersdk.WorkspaceAppHealth {
456
+ "code-server-2" : codersdk .WorkspaceAppHealthHealthy ,
457
+ },
458
+ })
459
+ require .NoError (t , err )
460
+ apiApps , err = agentClient .WorkspaceAgentApps (ctx )
461
+ require .NoError (t , err )
462
+ require .EqualValues (t , codersdk .WorkspaceAppHealthHealthy , apiApps [1 ].Health )
463
+ // update to unhealthy
464
+ err = agentClient .PostWorkspaceAgentAppHealth (ctx , codersdk.PostWorkspaceAppHealthsRequest {
465
+ Healths : map [string ]codersdk.WorkspaceAppHealth {
466
+ "code-server-2" : codersdk .WorkspaceAppHealthUnhealthy ,
467
+ },
468
+ })
469
+ require .NoError (t , err )
470
+ apiApps , err = agentClient .WorkspaceAgentApps (ctx )
471
+ require .NoError (t , err )
472
+ require .EqualValues (t , codersdk .WorkspaceAppHealthUnhealthy , apiApps [1 ].Health )
473
+ }
0 commit comments