From 14dc6691452d33b6830a29fd9f3547f5dcda0eab Mon Sep 17 00:00:00 2001 From: Mathias Fredriksson Date: Wed, 25 Jun 2025 10:29:15 +0000 Subject: [PATCH 1/3] fix(agent/agentcontainers): filter out "is a test" devcontainers --- agent/agentcontainers/api.go | 3 +- agent/agentcontainers/api_test.go | 50 +++++++++++++++++++++++++++ agent/agentcontainers/devcontainer.go | 3 ++ 3 files changed, 55 insertions(+), 1 deletion(-) diff --git a/agent/agentcontainers/api.go b/agent/agentcontainers/api.go index 6d2c46b961122..eb003c2ed8d54 100644 --- a/agent/agentcontainers/api.go +++ b/agent/agentcontainers/api.go @@ -571,7 +571,8 @@ func (api *API) processUpdatedContainersLocked(ctx context.Context, updated code slog.F("config_file", configFile), ) - if len(api.containerLabelIncludeFilter) > 0 { + // Filter out devcontainer tests, unless explicitly set in include filters. + if len(api.containerLabelIncludeFilter) > 0 || container.Labels[DevcontainerIsTestRunLabel] == "true" { var ok bool for label, value := range api.containerLabelIncludeFilter { if v, found := container.Labels[label]; found && v == value { diff --git a/agent/agentcontainers/api_test.go b/agent/agentcontainers/api_test.go index b6bae46c835c9..ed58ba17753aa 100644 --- a/agent/agentcontainers/api_test.go +++ b/agent/agentcontainers/api_test.go @@ -793,6 +793,16 @@ func TestAPI(t *testing.T) { agentcontainers.DevcontainerConfigFileLabel: "/workspace/runtime1/.devcontainer/devcontainer.json", }, }, + { + ID: "test-container-1", + FriendlyName: "test-container-1", + Running: true, + Labels: map[string]string{ + agentcontainers.DevcontainerLocalFolderLabel: "/workspace/test1", + agentcontainers.DevcontainerConfigFileLabel: "/workspace/test1/.devcontainer/devcontainer.json", + agentcontainers.DevcontainerIsTestRunLabel: "true", + }, + }, { ID: "not-a-devcontainer", FriendlyName: "not-a-devcontainer", @@ -834,6 +844,16 @@ func TestAPI(t *testing.T) { agentcontainers.DevcontainerLocalFolderLabel: "/workspace/runtime1", agentcontainers.DevcontainerConfigFileLabel: "/workspace/runtime1/.devcontainer/devcontainer.json", }, + }, + { + ID: "test-container-1", + FriendlyName: "test-container-1", + Running: true, + Labels: map[string]string{ + agentcontainers.DevcontainerLocalFolderLabel: "/workspace/test1", + agentcontainers.DevcontainerConfigFileLabel: "/workspace/test1/.devcontainer/devcontainer.json", + agentcontainers.DevcontainerIsTestRunLabel: "true", + }, }, }, }, @@ -880,6 +900,16 @@ func TestAPI(t *testing.T) { agentcontainers.DevcontainerLocalFolderLabel: "/workspace/non-running", agentcontainers.DevcontainerConfigFileLabel: "/workspace/non-running/.devcontainer/devcontainer.json", }, + }, + { + ID: "test-container-1", + FriendlyName: "test-container-1", + Running: true, + Labels: map[string]string{ + agentcontainers.DevcontainerLocalFolderLabel: "/workspace/test1", + agentcontainers.DevcontainerConfigFileLabel: "/workspace/test1/.devcontainer/devcontainer.json", + agentcontainers.DevcontainerIsTestRunLabel: "true", + }, }, }, }, @@ -913,6 +943,16 @@ func TestAPI(t *testing.T) { agentcontainers.DevcontainerLocalFolderLabel: "/workspace/known2", agentcontainers.DevcontainerConfigFileLabel: "/workspace/known2/.devcontainer/devcontainer.json", }, + }, + { + ID: "test-container-1", + FriendlyName: "test-container-1", + Running: true, + Labels: map[string]string{ + agentcontainers.DevcontainerLocalFolderLabel: "/workspace/test1", + agentcontainers.DevcontainerConfigFileLabel: "/workspace/test1/.devcontainer/devcontainer.json", + agentcontainers.DevcontainerIsTestRunLabel: "true", + }, }, }, }, @@ -966,6 +1006,16 @@ func TestAPI(t *testing.T) { agentcontainers.DevcontainerLocalFolderLabel: "/var/lib/project3", agentcontainers.DevcontainerConfigFileLabel: "/var/lib/project3/.devcontainer/devcontainer.json", }, + }, + { + ID: "test-container-1", + FriendlyName: "test-container-1", + Running: true, + Labels: map[string]string{ + agentcontainers.DevcontainerLocalFolderLabel: "/workspace/test1", + agentcontainers.DevcontainerConfigFileLabel: "/workspace/test1/.devcontainer/devcontainer.json", + agentcontainers.DevcontainerIsTestRunLabel: "true", + }, }, }, }, diff --git a/agent/agentcontainers/devcontainer.go b/agent/agentcontainers/devcontainer.go index f13963d7b63d7..3980872c32e3e 100644 --- a/agent/agentcontainers/devcontainer.go +++ b/agent/agentcontainers/devcontainer.go @@ -18,6 +18,9 @@ const ( // DevcontainerConfigFileLabel is the label that contains the path to // the devcontainer.json configuration file. DevcontainerConfigFileLabel = "devcontainer.config_file" + // DevcontainerIsTestRunLabel is set if the devcontainer is part of a test + // and should be excluded. + DevcontainerIsTestRunLabel = "devcontainer.is_test_run" // The default workspace folder inside the devcontainer. DevcontainerDefaultContainerWorkspaceFolder = "/workspaces" ) From eccc8e9e94e709af00b308209a41a5d838414ec0 Mon Sep 17 00:00:00 2001 From: Mathias Fredriksson Date: Wed, 25 Jun 2025 10:38:54 +0000 Subject: [PATCH 2/3] fmt --- agent/agentcontainers/api_test.go | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/agent/agentcontainers/api_test.go b/agent/agentcontainers/api_test.go index ed58ba17753aa..249e110234f8a 100644 --- a/agent/agentcontainers/api_test.go +++ b/agent/agentcontainers/api_test.go @@ -800,7 +800,7 @@ func TestAPI(t *testing.T) { Labels: map[string]string{ agentcontainers.DevcontainerLocalFolderLabel: "/workspace/test1", agentcontainers.DevcontainerConfigFileLabel: "/workspace/test1/.devcontainer/devcontainer.json", - agentcontainers.DevcontainerIsTestRunLabel: "true", + agentcontainers.DevcontainerIsTestRunLabel: "true", }, }, { @@ -845,14 +845,14 @@ func TestAPI(t *testing.T) { agentcontainers.DevcontainerConfigFileLabel: "/workspace/runtime1/.devcontainer/devcontainer.json", }, }, - { + { ID: "test-container-1", FriendlyName: "test-container-1", Running: true, Labels: map[string]string{ agentcontainers.DevcontainerLocalFolderLabel: "/workspace/test1", agentcontainers.DevcontainerConfigFileLabel: "/workspace/test1/.devcontainer/devcontainer.json", - agentcontainers.DevcontainerIsTestRunLabel: "true", + agentcontainers.DevcontainerIsTestRunLabel: "true", }, }, }, @@ -901,14 +901,14 @@ func TestAPI(t *testing.T) { agentcontainers.DevcontainerConfigFileLabel: "/workspace/non-running/.devcontainer/devcontainer.json", }, }, - { + { ID: "test-container-1", FriendlyName: "test-container-1", Running: true, Labels: map[string]string{ agentcontainers.DevcontainerLocalFolderLabel: "/workspace/test1", agentcontainers.DevcontainerConfigFileLabel: "/workspace/test1/.devcontainer/devcontainer.json", - agentcontainers.DevcontainerIsTestRunLabel: "true", + agentcontainers.DevcontainerIsTestRunLabel: "true", }, }, }, @@ -944,14 +944,14 @@ func TestAPI(t *testing.T) { agentcontainers.DevcontainerConfigFileLabel: "/workspace/known2/.devcontainer/devcontainer.json", }, }, - { + { ID: "test-container-1", FriendlyName: "test-container-1", Running: true, Labels: map[string]string{ agentcontainers.DevcontainerLocalFolderLabel: "/workspace/test1", agentcontainers.DevcontainerConfigFileLabel: "/workspace/test1/.devcontainer/devcontainer.json", - agentcontainers.DevcontainerIsTestRunLabel: "true", + agentcontainers.DevcontainerIsTestRunLabel: "true", }, }, }, @@ -1007,14 +1007,14 @@ func TestAPI(t *testing.T) { agentcontainers.DevcontainerConfigFileLabel: "/var/lib/project3/.devcontainer/devcontainer.json", }, }, - { + { ID: "test-container-1", FriendlyName: "test-container-1", Running: true, Labels: map[string]string{ agentcontainers.DevcontainerLocalFolderLabel: "/workspace/test1", agentcontainers.DevcontainerConfigFileLabel: "/workspace/test1/.devcontainer/devcontainer.json", - agentcontainers.DevcontainerIsTestRunLabel: "true", + agentcontainers.DevcontainerIsTestRunLabel: "true", }, }, }, From 18f1c892923050cf45260429ad1a0bafcc5092ad Mon Sep 17 00:00:00 2001 From: Mathias Fredriksson Date: Wed, 25 Jun 2025 10:55:06 +0000 Subject: [PATCH 3/3] improve test --- agent/agentcontainers/api_test.go | 76 +++++++++++-------------------- 1 file changed, 26 insertions(+), 50 deletions(-) diff --git a/agent/agentcontainers/api_test.go b/agent/agentcontainers/api_test.go index 249e110234f8a..e0197db919f8f 100644 --- a/agent/agentcontainers/api_test.go +++ b/agent/agentcontainers/api_test.go @@ -747,6 +747,7 @@ func TestAPI(t *testing.T) { knownDevcontainers []codersdk.WorkspaceAgentDevcontainer wantStatus int wantCount int + wantTestContainer bool verify func(t *testing.T, devcontainers []codersdk.WorkspaceAgentDevcontainer) }{ { @@ -793,16 +794,6 @@ func TestAPI(t *testing.T) { agentcontainers.DevcontainerConfigFileLabel: "/workspace/runtime1/.devcontainer/devcontainer.json", }, }, - { - ID: "test-container-1", - FriendlyName: "test-container-1", - Running: true, - Labels: map[string]string{ - agentcontainers.DevcontainerLocalFolderLabel: "/workspace/test1", - agentcontainers.DevcontainerConfigFileLabel: "/workspace/test1/.devcontainer/devcontainer.json", - agentcontainers.DevcontainerIsTestRunLabel: "true", - }, - }, { ID: "not-a-devcontainer", FriendlyName: "not-a-devcontainer", @@ -845,16 +836,6 @@ func TestAPI(t *testing.T) { agentcontainers.DevcontainerConfigFileLabel: "/workspace/runtime1/.devcontainer/devcontainer.json", }, }, - { - ID: "test-container-1", - FriendlyName: "test-container-1", - Running: true, - Labels: map[string]string{ - agentcontainers.DevcontainerLocalFolderLabel: "/workspace/test1", - agentcontainers.DevcontainerConfigFileLabel: "/workspace/test1/.devcontainer/devcontainer.json", - agentcontainers.DevcontainerIsTestRunLabel: "true", - }, - }, }, }, }, @@ -901,16 +882,6 @@ func TestAPI(t *testing.T) { agentcontainers.DevcontainerConfigFileLabel: "/workspace/non-running/.devcontainer/devcontainer.json", }, }, - { - ID: "test-container-1", - FriendlyName: "test-container-1", - Running: true, - Labels: map[string]string{ - agentcontainers.DevcontainerLocalFolderLabel: "/workspace/test1", - agentcontainers.DevcontainerConfigFileLabel: "/workspace/test1/.devcontainer/devcontainer.json", - agentcontainers.DevcontainerIsTestRunLabel: "true", - }, - }, }, }, }, @@ -944,16 +915,6 @@ func TestAPI(t *testing.T) { agentcontainers.DevcontainerConfigFileLabel: "/workspace/known2/.devcontainer/devcontainer.json", }, }, - { - ID: "test-container-1", - FriendlyName: "test-container-1", - Running: true, - Labels: map[string]string{ - agentcontainers.DevcontainerLocalFolderLabel: "/workspace/test1", - agentcontainers.DevcontainerConfigFileLabel: "/workspace/test1/.devcontainer/devcontainer.json", - agentcontainers.DevcontainerIsTestRunLabel: "true", - }, - }, }, }, }, @@ -1007,16 +968,6 @@ func TestAPI(t *testing.T) { agentcontainers.DevcontainerConfigFileLabel: "/var/lib/project3/.devcontainer/devcontainer.json", }, }, - { - ID: "test-container-1", - FriendlyName: "test-container-1", - Running: true, - Labels: map[string]string{ - agentcontainers.DevcontainerLocalFolderLabel: "/workspace/test1", - agentcontainers.DevcontainerConfigFileLabel: "/workspace/test1/.devcontainer/devcontainer.json", - agentcontainers.DevcontainerIsTestRunLabel: "true", - }, - }, }, }, }, @@ -1043,6 +994,13 @@ func TestAPI(t *testing.T) { assert.Len(t, names, 4, "should have four unique devcontainer names") }, }, + { + name: "Include test containers", + lister: &fakeContainerCLI{}, + wantStatus: http.StatusOK, + wantTestContainer: true, + wantCount: 1, // Will be appended. + }, } for _, tt := range tests { @@ -1055,6 +1013,18 @@ func TestAPI(t *testing.T) { mClock.Set(time.Now()).MustWait(testutil.Context(t, testutil.WaitShort)) tickerTrap := mClock.Trap().TickerFunc("updaterLoop") + // This container should be ignored unless explicitly included. + tt.lister.containers.Containers = append(tt.lister.containers.Containers, codersdk.WorkspaceAgentContainer{ + ID: "test-container-1", + FriendlyName: "test-container-1", + Running: true, + Labels: map[string]string{ + agentcontainers.DevcontainerLocalFolderLabel: "/workspace/test1", + agentcontainers.DevcontainerConfigFileLabel: "/workspace/test1/.devcontainer/devcontainer.json", + agentcontainers.DevcontainerIsTestRunLabel: "true", + }, + }) + // Setup router with the handler under test. r := chi.NewRouter() apiOptions := []agentcontainers.Option{ @@ -1063,6 +1033,12 @@ func TestAPI(t *testing.T) { agentcontainers.WithWatcher(watcher.NewNoop()), } + if tt.wantTestContainer { + apiOptions = append(apiOptions, agentcontainers.WithContainerLabelIncludeFilter( + agentcontainers.DevcontainerIsTestRunLabel, "true", + )) + } + // Generate matching scripts for the known devcontainers // (required to extract log source ID). var scripts []codersdk.WorkspaceAgentScript pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy