From 0fa2dbd6620ef055ca498ec2aa451adaca5549c1 Mon Sep 17 00:00:00 2001 From: "devsy-app[bot]" <277138668+devsy-app[bot]@users.noreply.github.com> Date: Sun, 9 Aug 2026 10:22:59 +0000 Subject: [PATCH 1/3] test(agent): cover inject URL/option defaults Add unit tests for InjectOptions URL and prefer-download default logic in pkg/agent/inject.go: applyURLDefaults tag->download normalization, applyPreferDownloadDefaults DEVSY_AGENT_URL/DEVSY_AGENT_PREFER_DOWNLOAD side effects, and explicit preference preservation. These DEVSY_AGENT_URL side-effect paths had no direct test coverage. --- pkg/agent/inject_defaults_test.go | 124 ++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 pkg/agent/inject_defaults_test.go diff --git a/pkg/agent/inject_defaults_test.go b/pkg/agent/inject_defaults_test.go new file mode 100644 index 0000000000..2730e2cb61 --- /dev/null +++ b/pkg/agent/inject_defaults_test.go @@ -0,0 +1,124 @@ +package agent + +import ( + "testing" + + "github.com/devsy-org/devsy/pkg/config" + "github.com/devsy-org/devsy/pkg/version" + "github.com/stretchr/testify/assert" +) + +// TestApplyURLDefaults_NormalizesTagURL covers the GitHub "/releases/tag/" -> +// "/releases/download/" normalization applied to a caller-supplied download URL. +func TestApplyURLDefaults_NormalizesTagURL(t *testing.T) { + t.Setenv(config.EnvAgentURL, "") + + opts := &InjectOptions{ + DownloadURL: config.GitHubReleasesURL + "/releases/tag/v1.2.3", + } + opts.applyURLDefaults() + + assert.Equal(t, config.GitHubReleasesURL+"/releases/download/v1.2.3", opts.DownloadURL) +} + +// TestApplyURLDefaults_PreservesNonTagURL ensures non-tag URLs pass through unchanged. +func TestApplyURLDefaults_PreservesNonTagURL(t *testing.T) { + t.Setenv(config.EnvAgentURL, "") + + custom := "http://localhost:8080/devsy-linux-amd64" + opts := &InjectOptions{DownloadURL: custom} + opts.applyURLDefaults() + + assert.Equal(t, custom, opts.DownloadURL) +} + +// TestApplyURLDefaults_FillsFromEnvWhenEmpty verifies an empty DownloadURL falls +// back to DefaultAgentDownloadURL, which honors DEVSY_AGENT_URL. +func TestApplyURLDefaults_FillsFromEnvWhenEmpty(t *testing.T) { + override := "http://localhost:8080" + t.Setenv(config.EnvAgentURL, override) + + opts := &InjectOptions{} + opts.applyURLDefaults() + + assert.Equal(t, override, opts.DownloadURL) +} + +// TestApplyPreferDownloadDefaults covers the DEVSY_AGENT_URL / DEVSY_AGENT_PREFER_DOWNLOAD +// side effects documented in AGENTS.md: a custom agent URL forces remote download and +// skips the version check, while the prefer-download env var overrides the heuristic. +func TestApplyPreferDownloadDefaults(t *testing.T) { + t.Run("custom agent url prefers remote and skips version check", func(t *testing.T) { + t.Setenv(config.EnvAgentURL, "http://localhost:8080") + t.Setenv(config.EnvAgentPreferDownload, "") + + opts := &InjectOptions{DownloadURL: "http://localhost:8080"} + opts.applyPreferDownloadDefaults() + + assert.NotNil(t, opts.PreferDownloadFromRemoteUrl) + assert.True(t, *opts.PreferDownloadFromRemoteUrl) + assert.True(t, opts.SkipVersionCheck) + }) + + t.Run("prefer download env true", func(t *testing.T) { + t.Setenv(config.EnvAgentURL, "") + t.Setenv(config.EnvAgentPreferDownload, "true") + + opts := &InjectOptions{} + opts.applyPreferDownloadDefaults() + + assert.NotNil(t, opts.PreferDownloadFromRemoteUrl) + assert.True(t, *opts.PreferDownloadFromRemoteUrl) + assert.True(t, opts.SkipVersionCheck) + }) + + t.Run("prefer download env false", func(t *testing.T) { + t.Setenv(config.EnvAgentURL, "") + t.Setenv(config.EnvAgentPreferDownload, "false") + + opts := &InjectOptions{} + opts.applyPreferDownloadDefaults() + + assert.NotNil(t, opts.PreferDownloadFromRemoteUrl) + assert.False(t, *opts.PreferDownloadFromRemoteUrl) + assert.True(t, opts.SkipVersionCheck) + }) + + t.Run("prefer download env invalid defaults true", func(t *testing.T) { + t.Setenv(config.EnvAgentURL, "") + t.Setenv(config.EnvAgentPreferDownload, "not-a-bool") + + opts := &InjectOptions{} + opts.applyPreferDownloadDefaults() + + assert.NotNil(t, opts.PreferDownloadFromRemoteUrl) + assert.True(t, *opts.PreferDownloadFromRemoteUrl) + assert.True(t, opts.SkipVersionCheck) + }) + + t.Run("default dev build prefers local", func(t *testing.T) { + if version.GetVersion() != version.DevVersion { + t.Skip("test assumes a dev build") + } + t.Setenv(config.EnvAgentURL, "") + t.Setenv(config.EnvAgentPreferDownload, "") + + opts := &InjectOptions{} + opts.ApplyDefaults() + + assert.NotNil(t, opts.PreferDownloadFromRemoteUrl) + assert.False(t, *opts.PreferDownloadFromRemoteUrl) + assert.True(t, opts.SkipVersionCheck) + }) + + t.Run("explicit preference preserved", func(t *testing.T) { + t.Setenv(config.EnvAgentURL, "http://localhost:8080") + t.Setenv(config.EnvAgentPreferDownload, "false") + + opts := &InjectOptions{PreferDownloadFromRemoteUrl: Bool(true)} + opts.applyPreferDownloadDefaults() + + assert.True(t, *opts.PreferDownloadFromRemoteUrl) + assert.False(t, opts.SkipVersionCheck) + }) +} From cb3da0f23bded9e6ec605fc5b5e5253fe86288c8 Mon Sep 17 00:00:00 2001 From: "devsy-app[bot]" <277138668+devsy-app[bot]@users.noreply.github.com> Date: Sun, 9 Aug 2026 10:43:08 +0000 Subject: [PATCH 2/3] fix(agent): split inject tests for funlen, inline Bool Break the TestApplyPreferDownloadDefaults subtests into top-level test functions to satisfy funlen, and replace Bool(true) with new(true) to satisfy the govet inline analyzer (matching production style in agent.go). --- pkg/agent/inject_defaults_test.go | 154 +++++++++++++++--------------- 1 file changed, 77 insertions(+), 77 deletions(-) diff --git a/pkg/agent/inject_defaults_test.go b/pkg/agent/inject_defaults_test.go index 2730e2cb61..93f5fea8df 100644 --- a/pkg/agent/inject_defaults_test.go +++ b/pkg/agent/inject_defaults_test.go @@ -44,81 +44,81 @@ func TestApplyURLDefaults_FillsFromEnvWhenEmpty(t *testing.T) { assert.Equal(t, override, opts.DownloadURL) } -// TestApplyPreferDownloadDefaults covers the DEVSY_AGENT_URL / DEVSY_AGENT_PREFER_DOWNLOAD -// side effects documented in AGENTS.md: a custom agent URL forces remote download and -// skips the version check, while the prefer-download env var overrides the heuristic. -func TestApplyPreferDownloadDefaults(t *testing.T) { - t.Run("custom agent url prefers remote and skips version check", func(t *testing.T) { - t.Setenv(config.EnvAgentURL, "http://localhost:8080") - t.Setenv(config.EnvAgentPreferDownload, "") - - opts := &InjectOptions{DownloadURL: "http://localhost:8080"} - opts.applyPreferDownloadDefaults() - - assert.NotNil(t, opts.PreferDownloadFromRemoteUrl) - assert.True(t, *opts.PreferDownloadFromRemoteUrl) - assert.True(t, opts.SkipVersionCheck) - }) - - t.Run("prefer download env true", func(t *testing.T) { - t.Setenv(config.EnvAgentURL, "") - t.Setenv(config.EnvAgentPreferDownload, "true") - - opts := &InjectOptions{} - opts.applyPreferDownloadDefaults() - - assert.NotNil(t, opts.PreferDownloadFromRemoteUrl) - assert.True(t, *opts.PreferDownloadFromRemoteUrl) - assert.True(t, opts.SkipVersionCheck) - }) - - t.Run("prefer download env false", func(t *testing.T) { - t.Setenv(config.EnvAgentURL, "") - t.Setenv(config.EnvAgentPreferDownload, "false") - - opts := &InjectOptions{} - opts.applyPreferDownloadDefaults() - - assert.NotNil(t, opts.PreferDownloadFromRemoteUrl) - assert.False(t, *opts.PreferDownloadFromRemoteUrl) - assert.True(t, opts.SkipVersionCheck) - }) - - t.Run("prefer download env invalid defaults true", func(t *testing.T) { - t.Setenv(config.EnvAgentURL, "") - t.Setenv(config.EnvAgentPreferDownload, "not-a-bool") - - opts := &InjectOptions{} - opts.applyPreferDownloadDefaults() - - assert.NotNil(t, opts.PreferDownloadFromRemoteUrl) - assert.True(t, *opts.PreferDownloadFromRemoteUrl) - assert.True(t, opts.SkipVersionCheck) - }) - - t.Run("default dev build prefers local", func(t *testing.T) { - if version.GetVersion() != version.DevVersion { - t.Skip("test assumes a dev build") - } - t.Setenv(config.EnvAgentURL, "") - t.Setenv(config.EnvAgentPreferDownload, "") - - opts := &InjectOptions{} - opts.ApplyDefaults() - - assert.NotNil(t, opts.PreferDownloadFromRemoteUrl) - assert.False(t, *opts.PreferDownloadFromRemoteUrl) - assert.True(t, opts.SkipVersionCheck) - }) - - t.Run("explicit preference preserved", func(t *testing.T) { - t.Setenv(config.EnvAgentURL, "http://localhost:8080") - t.Setenv(config.EnvAgentPreferDownload, "false") - - opts := &InjectOptions{PreferDownloadFromRemoteUrl: Bool(true)} - opts.applyPreferDownloadDefaults() - - assert.True(t, *opts.PreferDownloadFromRemoteUrl) - assert.False(t, opts.SkipVersionCheck) - }) +// The applyPreferDownloadDefaults cases below cover the DEVSY_AGENT_URL / +// DEVSY_AGENT_PREFER_DOWNLOAD side effects documented in AGENTS.md: a custom agent URL +// forces remote download and skips the version check, while the prefer-download env var +// overrides the heuristic. Each case is a top-level test to keep funlen bounded. + +func TestApplyPreferDownloadDefaults_CustomAgentURL(t *testing.T) { + t.Setenv(config.EnvAgentURL, "http://localhost:8080") + t.Setenv(config.EnvAgentPreferDownload, "") + + opts := &InjectOptions{DownloadURL: "http://localhost:8080"} + opts.applyPreferDownloadDefaults() + + assert.NotNil(t, opts.PreferDownloadFromRemoteUrl) + assert.True(t, *opts.PreferDownloadFromRemoteUrl) + assert.True(t, opts.SkipVersionCheck) +} + +func TestApplyPreferDownloadDefaults_EnvTrue(t *testing.T) { + t.Setenv(config.EnvAgentURL, "") + t.Setenv(config.EnvAgentPreferDownload, "true") + + opts := &InjectOptions{} + opts.applyPreferDownloadDefaults() + + assert.NotNil(t, opts.PreferDownloadFromRemoteUrl) + assert.True(t, *opts.PreferDownloadFromRemoteUrl) + assert.True(t, opts.SkipVersionCheck) +} + +func TestApplyPreferDownloadDefaults_EnvFalse(t *testing.T) { + t.Setenv(config.EnvAgentURL, "") + t.Setenv(config.EnvAgentPreferDownload, "false") + + opts := &InjectOptions{} + opts.applyPreferDownloadDefaults() + + assert.NotNil(t, opts.PreferDownloadFromRemoteUrl) + assert.False(t, *opts.PreferDownloadFromRemoteUrl) + assert.True(t, opts.SkipVersionCheck) +} + +func TestApplyPreferDownloadDefaults_EnvInvalidDefaultsTrue(t *testing.T) { + t.Setenv(config.EnvAgentURL, "") + t.Setenv(config.EnvAgentPreferDownload, "not-a-bool") + + opts := &InjectOptions{} + opts.applyPreferDownloadDefaults() + + assert.NotNil(t, opts.PreferDownloadFromRemoteUrl) + assert.True(t, *opts.PreferDownloadFromRemoteUrl) + assert.True(t, opts.SkipVersionCheck) +} + +func TestApplyPreferDownloadDefaults_DevBuildPrefersLocal(t *testing.T) { + if version.GetVersion() != version.DevVersion { + t.Skip("test assumes a dev build") + } + t.Setenv(config.EnvAgentURL, "") + t.Setenv(config.EnvAgentPreferDownload, "") + + opts := &InjectOptions{} + opts.ApplyDefaults() + + assert.NotNil(t, opts.PreferDownloadFromRemoteUrl) + assert.False(t, *opts.PreferDownloadFromRemoteUrl) + assert.True(t, opts.SkipVersionCheck) +} + +func TestApplyPreferDownloadDefaults_ExplicitPreferencePreserved(t *testing.T) { + t.Setenv(config.EnvAgentURL, "http://localhost:8080") + t.Setenv(config.EnvAgentPreferDownload, "false") + + opts := &InjectOptions{PreferDownloadFromRemoteUrl: new(true)} + opts.applyPreferDownloadDefaults() + + assert.True(t, *opts.PreferDownloadFromRemoteUrl) + assert.False(t, opts.SkipVersionCheck) } From 5086240dc67c1953d74f221bc6587d4d68ea0a7a Mon Sep 17 00:00:00 2001 From: Samuel K Date: Sun, 9 Aug 2026 16:55:31 +0000 Subject: [PATCH 3/3] style: update comments Signed-off-by: GitHub --- pkg/agent/inject_defaults_test.go | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/pkg/agent/inject_defaults_test.go b/pkg/agent/inject_defaults_test.go index 93f5fea8df..ec21f0ae31 100644 --- a/pkg/agent/inject_defaults_test.go +++ b/pkg/agent/inject_defaults_test.go @@ -8,8 +8,6 @@ import ( "github.com/stretchr/testify/assert" ) -// TestApplyURLDefaults_NormalizesTagURL covers the GitHub "/releases/tag/" -> -// "/releases/download/" normalization applied to a caller-supplied download URL. func TestApplyURLDefaults_NormalizesTagURL(t *testing.T) { t.Setenv(config.EnvAgentURL, "") @@ -21,7 +19,6 @@ func TestApplyURLDefaults_NormalizesTagURL(t *testing.T) { assert.Equal(t, config.GitHubReleasesURL+"/releases/download/v1.2.3", opts.DownloadURL) } -// TestApplyURLDefaults_PreservesNonTagURL ensures non-tag URLs pass through unchanged. func TestApplyURLDefaults_PreservesNonTagURL(t *testing.T) { t.Setenv(config.EnvAgentURL, "") @@ -32,8 +29,6 @@ func TestApplyURLDefaults_PreservesNonTagURL(t *testing.T) { assert.Equal(t, custom, opts.DownloadURL) } -// TestApplyURLDefaults_FillsFromEnvWhenEmpty verifies an empty DownloadURL falls -// back to DefaultAgentDownloadURL, which honors DEVSY_AGENT_URL. func TestApplyURLDefaults_FillsFromEnvWhenEmpty(t *testing.T) { override := "http://localhost:8080" t.Setenv(config.EnvAgentURL, override) @@ -44,11 +39,6 @@ func TestApplyURLDefaults_FillsFromEnvWhenEmpty(t *testing.T) { assert.Equal(t, override, opts.DownloadURL) } -// The applyPreferDownloadDefaults cases below cover the DEVSY_AGENT_URL / -// DEVSY_AGENT_PREFER_DOWNLOAD side effects documented in AGENTS.md: a custom agent URL -// forces remote download and skips the version check, while the prefer-download env var -// overrides the heuristic. Each case is a top-level test to keep funlen bounded. - func TestApplyPreferDownloadDefaults_CustomAgentURL(t *testing.T) { t.Setenv(config.EnvAgentURL, "http://localhost:8080") t.Setenv(config.EnvAgentPreferDownload, "")