@@ -493,78 +493,77 @@ func TestAPI(t *testing.T) {
493
493
t .Run ("Recreate" , func (t * testing.T ) {
494
494
t .Parallel ()
495
495
496
- validContainer := codersdk.WorkspaceAgentContainer {
497
- ID : "container-id" ,
498
- FriendlyName : "container-name" ,
496
+ devcontainerID1 := uuid .New ()
497
+ devcontainerID2 := uuid .New ()
498
+ workspaceFolder1 := "/workspace/test1"
499
+ workspaceFolder2 := "/workspace/test2"
500
+ configPath1 := "/workspace/test1/.devcontainer/devcontainer.json"
501
+ configPath2 := "/workspace/test2/.devcontainer/devcontainer.json"
502
+
503
+ // Create a container that represents an existing devcontainer
504
+ devContainer1 := codersdk.WorkspaceAgentContainer {
505
+ ID : "container-1" ,
506
+ FriendlyName : "test-container-1" ,
499
507
Running : true ,
500
508
Labels : map [string ]string {
501
- agentcontainers .DevcontainerLocalFolderLabel : "/workspaces" ,
502
- agentcontainers .DevcontainerConfigFileLabel : "/workspace/.devcontainer/devcontainer.json" ,
509
+ agentcontainers .DevcontainerLocalFolderLabel : workspaceFolder1 ,
510
+ agentcontainers .DevcontainerConfigFileLabel : configPath1 ,
503
511
},
504
512
}
505
513
506
- missingFolderContainer := codersdk.WorkspaceAgentContainer {
507
- ID : "missing-folder-container" ,
508
- FriendlyName : "missing-folder-container" ,
509
- Labels : map [string ]string {},
514
+ devContainer2 := codersdk.WorkspaceAgentContainer {
515
+ ID : "container-2" ,
516
+ FriendlyName : "test-container-2" ,
517
+ Running : true ,
518
+ Labels : map [string ]string {
519
+ agentcontainers .DevcontainerLocalFolderLabel : workspaceFolder2 ,
520
+ agentcontainers .DevcontainerConfigFileLabel : configPath2 ,
521
+ },
510
522
}
511
523
512
524
tests := []struct {
513
- name string
514
- containerID string
515
- lister * fakeContainerCLI
516
- devcontainerCLI * fakeDevcontainerCLI
517
- wantStatus []int
518
- wantBody []string
525
+ name string
526
+ devcontainerID string
527
+ setupDevcontainers []codersdk.WorkspaceAgentDevcontainer
528
+ lister * fakeContainerCLI
529
+ devcontainerCLI * fakeDevcontainerCLI
530
+ wantStatus []int
531
+ wantBody []string
519
532
}{
520
533
{
521
- name : "Missing container ID" ,
522
- containerID : "" ,
534
+ name : "Missing devcontainer ID" ,
535
+ devcontainerID : "" ,
523
536
lister : & fakeContainerCLI {},
524
537
devcontainerCLI : & fakeDevcontainerCLI {},
525
538
wantStatus : []int {http .StatusBadRequest },
526
- wantBody : []string {"Missing container ID or name " },
539
+ wantBody : []string {"Missing devcontainer ID" },
527
540
},
528
541
{
529
- name : "List error " ,
530
- containerID : "container-id" ,
542
+ name : "Devcontainer not found " ,
543
+ devcontainerID : uuid . NewString () ,
531
544
lister : & fakeContainerCLI {
532
- listErr : xerrors .New ("list error" ),
533
- },
534
- devcontainerCLI : & fakeDevcontainerCLI {},
535
- wantStatus : []int {http .StatusInternalServerError },
536
- wantBody : []string {"Could not list containers" },
537
- },
538
- {
539
- name : "Container not found" ,
540
- containerID : "nonexistent-container" ,
541
- lister : & fakeContainerCLI {
542
- containers : codersdk.WorkspaceAgentListContainersResponse {
543
- Containers : []codersdk.WorkspaceAgentContainer {validContainer },
544
- },
545
+ arch : "<none>" , // Unsupported architecture, don't inject subagent.
545
546
},
546
547
devcontainerCLI : & fakeDevcontainerCLI {},
547
548
wantStatus : []int {http .StatusNotFound },
548
- wantBody : []string {"Container not found" },
549
+ wantBody : []string {"Devcontainer not found" },
549
550
},
550
551
{
551
- name : "Missing workspace folder label" ,
552
- containerID : "missing-folder-container" ,
553
- lister : & fakeContainerCLI {
554
- containers : codersdk.WorkspaceAgentListContainersResponse {
555
- Containers : []codersdk.WorkspaceAgentContainer {missingFolderContainer },
552
+ name : "Devcontainer CLI error" ,
553
+ devcontainerID : devcontainerID1 .String (),
554
+ setupDevcontainers : []codersdk.WorkspaceAgentDevcontainer {
555
+ {
556
+ ID : devcontainerID1 ,
557
+ Name : "test-devcontainer-1" ,
558
+ WorkspaceFolder : workspaceFolder1 ,
559
+ ConfigPath : configPath1 ,
560
+ Status : codersdk .WorkspaceAgentDevcontainerStatusRunning ,
561
+ Container : & devContainer1 ,
556
562
},
557
563
},
558
- devcontainerCLI : & fakeDevcontainerCLI {},
559
- wantStatus : []int {http .StatusBadRequest },
560
- wantBody : []string {"Missing workspace folder label" },
561
- },
562
- {
563
- name : "Devcontainer CLI error" ,
564
- containerID : "container-id" ,
565
564
lister : & fakeContainerCLI {
566
565
containers : codersdk.WorkspaceAgentListContainersResponse {
567
- Containers : []codersdk.WorkspaceAgentContainer {validContainer },
566
+ Containers : []codersdk.WorkspaceAgentContainer {devContainer1 },
568
567
},
569
568
arch : "<none>" , // Unsupported architecture, don't inject subagent.
570
569
},
@@ -575,11 +574,21 @@ func TestAPI(t *testing.T) {
575
574
wantBody : []string {"Devcontainer recreation initiated" , "Devcontainer recreation already in progress" },
576
575
},
577
576
{
578
- name : "OK" ,
579
- containerID : "container-id" ,
577
+ name : "OK" ,
578
+ devcontainerID : devcontainerID2 .String (),
579
+ setupDevcontainers : []codersdk.WorkspaceAgentDevcontainer {
580
+ {
581
+ ID : devcontainerID2 ,
582
+ Name : "test-devcontainer-2" ,
583
+ WorkspaceFolder : workspaceFolder2 ,
584
+ ConfigPath : configPath2 ,
585
+ Status : codersdk .WorkspaceAgentDevcontainerStatusRunning ,
586
+ Container : & devContainer2 ,
587
+ },
588
+ },
580
589
lister : & fakeContainerCLI {
581
590
containers : codersdk.WorkspaceAgentListContainersResponse {
582
- Containers : []codersdk.WorkspaceAgentContainer {validContainer },
591
+ Containers : []codersdk.WorkspaceAgentContainer {devContainer2 },
583
592
},
584
593
arch : "<none>" , // Unsupported architecture, don't inject subagent.
585
594
},
@@ -608,13 +617,16 @@ func TestAPI(t *testing.T) {
608
617
609
618
// Setup router with the handler under test.
610
619
r := chi .NewRouter ()
620
+
611
621
api := agentcontainers .NewAPI (
612
622
logger ,
613
623
agentcontainers .WithClock (mClock ),
614
624
agentcontainers .WithContainerCLI (tt .lister ),
615
625
agentcontainers .WithDevcontainerCLI (tt .devcontainerCLI ),
616
626
agentcontainers .WithWatcher (watcher .NewNoop ()),
627
+ agentcontainers .WithDevcontainers (tt .setupDevcontainers , nil ),
617
628
)
629
+
618
630
api .Init ()
619
631
defer api .Close ()
620
632
r .Mount ("/" , api .Routes ())
@@ -626,7 +638,7 @@ func TestAPI(t *testing.T) {
626
638
627
639
for i := range tt .wantStatus {
628
640
// Simulate HTTP request to the recreate endpoint.
629
- req := httptest .NewRequest (http .MethodPost , "/devcontainers/container/ " + tt .containerID + "/recreate" , nil ).
641
+ req := httptest .NewRequest (http .MethodPost , "/devcontainers/" + tt .devcontainerID + "/recreate" , nil ).
630
642
WithContext (ctx )
631
643
rec := httptest .NewRecorder ()
632
644
r .ServeHTTP (rec , req )
0 commit comments