From 9acb9377afc70a720a56b74c872e962e4779a4d4 Mon Sep 17 00:00:00 2001 From: Michal Suchanek Date: Fri, 5 Dec 2025 09:03:10 +0100 Subject: [PATCH] Filter out gitea-specific variables in tests There is no particular reason to set gitea variables globally. Nonetheless, some misguided packagers set GITEA_CUSTOM in /etc/profile breaking tests. Fixes: go-gitea/gitea#36042 --- .github/workflows/pull-db-tests.yml | 3 ++ models/unittest/fixtures_test.go | 6 ++++ models/unittest/testdb.go | 2 ++ modules/git/attribute/main_test.go | 2 ++ modules/git/git_test.go | 2 ++ modules/git/gitcmd/command_test.go | 2 ++ modules/git/languagestats/main_test.go | 2 ++ modules/gitrepo/main_test.go | 2 ++ modules/markup/main_test.go | 2 ++ modules/markup/markdown/main_test.go | 2 ++ modules/markup/orgmode/orgmode_test.go | 2 ++ modules/templates/util_render_test.go | 2 ++ modules/timeutil/since_test.go | 2 ++ tests/env/filter.go | 31 ++++++++++++++++++++ tests/env/filter_test.go | 39 ++++++++++++++++++++++++++ tests/test_utils.go | 3 ++ 16 files changed, 104 insertions(+) create mode 100644 tests/env/filter.go create mode 100644 tests/env/filter_test.go diff --git a/.github/workflows/pull-db-tests.yml b/.github/workflows/pull-db-tests.yml index 21ec76b48eae4..866f557752304 100644 --- a/.github/workflows/pull-db-tests.yml +++ b/.github/workflows/pull-db-tests.yml @@ -138,6 +138,9 @@ jobs: - name: unit-tests run: make unit-test-coverage test-check env: + GITEA_ROOT: foo + GITEA_CONF: bar + GITEA_CUSTOM: baz TAGS: bindata RACE_ENABLED: true GITHUB_READ_TOKEN: ${{ secrets.GITHUB_READ_TOKEN }} diff --git a/models/unittest/fixtures_test.go b/models/unittest/fixtures_test.go index 8a4c5f1793d0b..59ad135f41a54 100644 --- a/models/unittest/fixtures_test.go +++ b/models/unittest/fixtures_test.go @@ -10,6 +10,7 @@ import ( "code.gitea.io/gitea/models/unittest" user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/test" + "code.gitea.io/gitea/tests/env" "github.com/stretchr/testify/require" "xorm.io/xorm" @@ -112,3 +113,8 @@ func BenchmarkFixturesLoader(b *testing.B) { } }) } + +func TestMain(m *testing.M) { + env.Filter([]string{"GITEA_TEST_"}, []string{"GITEA_"}) + m.Run() +} diff --git a/models/unittest/testdb.go b/models/unittest/testdb.go index 4611a079ec32c..4f55eca1939ba 100644 --- a/models/unittest/testdb.go +++ b/models/unittest/testdb.go @@ -23,6 +23,7 @@ import ( "code.gitea.io/gitea/modules/tempdir" "code.gitea.io/gitea/modules/test" "code.gitea.io/gitea/modules/util" + "code.gitea.io/gitea/tests/env" "github.com/stretchr/testify/assert" "xorm.io/xorm" @@ -73,6 +74,7 @@ type TestOptions struct { // MainTest a reusable TestMain(..) function for unit tests that need to use a // test database. Creates the test database, and sets necessary settings. func MainTest(m *testing.M, testOptsArg ...*TestOptions) { + env.Filter([]string{"GITEA_TEST_"}, []string{"GITEA_"}) testOpts := util.OptionalArg(testOptsArg, &TestOptions{}) giteaRoot = test.SetupGiteaRoot() setting.CustomPath = filepath.Join(giteaRoot, "custom") diff --git a/modules/git/attribute/main_test.go b/modules/git/attribute/main_test.go index 1f1d80ec0a6d3..7937bcea9d303 100644 --- a/modules/git/attribute/main_test.go +++ b/modules/git/attribute/main_test.go @@ -11,6 +11,7 @@ import ( "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/util" + "code.gitea.io/gitea/tests/env" ) func testRun(m *testing.M) error { @@ -33,6 +34,7 @@ func testRun(m *testing.M) error { } func TestMain(m *testing.M) { + env.Filter([]string{"GITEA_TEST_"}, []string{"GITEA_"}) if err := testRun(m); err != nil { _, _ = fmt.Fprintf(os.Stderr, "Test failed: %v", err) os.Exit(1) diff --git a/modules/git/git_test.go b/modules/git/git_test.go index 7a8ca74b015ce..7ffbd649d6d59 100644 --- a/modules/git/git_test.go +++ b/modules/git/git_test.go @@ -10,6 +10,7 @@ import ( "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/tempdir" + "code.gitea.io/gitea/tests/env" "github.com/hashicorp/go-version" "github.com/stretchr/testify/assert" @@ -36,6 +37,7 @@ func testRun(m *testing.M) error { } func TestMain(m *testing.M) { + env.Filter([]string{"GITEA_TEST_"}, []string{"GITEA_"}) if err := testRun(m); err != nil { _, _ = fmt.Fprintf(os.Stderr, "Test failed: %v", err) os.Exit(1) diff --git a/modules/git/gitcmd/command_test.go b/modules/git/gitcmd/command_test.go index 1ba8b2e3e4ab6..1bcb21cf6ff4c 100644 --- a/modules/git/gitcmd/command_test.go +++ b/modules/git/gitcmd/command_test.go @@ -10,11 +10,13 @@ import ( "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/tempdir" + "code.gitea.io/gitea/tests/env" "github.com/stretchr/testify/assert" ) func TestMain(m *testing.M) { + env.Filter([]string{"GITEA_TEST_"}, []string{"GITEA_"}) gitHomePath, cleanup, err := tempdir.OsTempDir("gitea-test").MkdirTempRandom("git-home") if err != nil { _, _ = fmt.Fprintf(os.Stderr, "unable to create temp dir: %v", err) diff --git a/modules/git/languagestats/main_test.go b/modules/git/languagestats/main_test.go index b8f9ded005a3c..1f2584c6e59b3 100644 --- a/modules/git/languagestats/main_test.go +++ b/modules/git/languagestats/main_test.go @@ -11,6 +11,7 @@ import ( "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/util" + "code.gitea.io/gitea/tests/env" ) func testRun(m *testing.M) error { @@ -33,6 +34,7 @@ func testRun(m *testing.M) error { } func TestMain(m *testing.M) { + env.Filter([]string{"GITEA_TEST_"}, []string{"GITEA_"}) if err := testRun(m); err != nil { _, _ = fmt.Fprintf(os.Stderr, "Test failed: %v", err) os.Exit(1) diff --git a/modules/gitrepo/main_test.go b/modules/gitrepo/main_test.go index 6e6636ce770f9..92b87f3d06cf0 100644 --- a/modules/gitrepo/main_test.go +++ b/modules/gitrepo/main_test.go @@ -12,9 +12,11 @@ import ( "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/tempdir" "code.gitea.io/gitea/modules/test" + "code.gitea.io/gitea/tests/env" ) func TestMain(m *testing.M) { + env.Filter([]string{"GITEA_TEST_"}, []string{"GITEA_"}) gitHomePath, cleanup, err := tempdir.OsTempDir("gitea-test").MkdirTempRandom("git-home") if err != nil { log.Fatal("Unable to create temp dir: %v", err) diff --git a/modules/markup/main_test.go b/modules/markup/main_test.go index 564f55ac119c6..f62f62b0ba04d 100644 --- a/modules/markup/main_test.go +++ b/modules/markup/main_test.go @@ -9,9 +9,11 @@ import ( "code.gitea.io/gitea/modules/markup" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/gitea/tests/env" ) func TestMain(m *testing.M) { + env.Filter([]string{"GITEA_TEST_"}, []string{"GITEA_"}) setting.IsInTesting = true markup.RenderBehaviorForTesting.DisableAdditionalAttributes = true os.Exit(m.Run()) diff --git a/modules/markup/markdown/main_test.go b/modules/markup/markdown/main_test.go index 4b4d40bb2e0c8..264a3c837e687 100644 --- a/modules/markup/markdown/main_test.go +++ b/modules/markup/markdown/main_test.go @@ -9,9 +9,11 @@ import ( "code.gitea.io/gitea/modules/markup" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/gitea/tests/env" ) func TestMain(m *testing.M) { + env.Filter([]string{"GITEA_TEST_"}, []string{"GITEA_"}) setting.IsInTesting = true markup.RenderBehaviorForTesting.DisableAdditionalAttributes = true os.Exit(m.Run()) diff --git a/modules/markup/orgmode/orgmode_test.go b/modules/markup/orgmode/orgmode_test.go index ebda2271f28dd..c9df14dce1730 100644 --- a/modules/markup/orgmode/orgmode_test.go +++ b/modules/markup/orgmode/orgmode_test.go @@ -11,11 +11,13 @@ import ( "code.gitea.io/gitea/modules/markup" "code.gitea.io/gitea/modules/markup/orgmode" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/gitea/tests/env" "github.com/stretchr/testify/assert" ) func TestMain(m *testing.M) { + env.Filter([]string{"GITEA_TEST_"}, []string{"GITEA_"}) setting.AppURL = "http://localhost:3000/" setting.IsInTesting = true os.Exit(m.Run()) diff --git a/modules/templates/util_render_test.go b/modules/templates/util_render_test.go index 5c37f084df63d..f9a1b125bad30 100644 --- a/modules/templates/util_render_test.go +++ b/modules/templates/util_render_test.go @@ -18,6 +18,7 @@ import ( "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/test" "code.gitea.io/gitea/modules/translation" + "code.gitea.io/gitea/tests/env" "github.com/stretchr/testify/assert" ) @@ -48,6 +49,7 @@ mail@domain.com } func TestMain(m *testing.M) { + env.Filter([]string{"GITEA_TEST_"}, []string{"GITEA_"}) setting.Markdown.RenderOptionsComment.ShortIssuePattern = true markup.Init(&markup.RenderHelperFuncs{ IsUsernameMentionable: func(ctx context.Context, username string) bool { diff --git a/modules/timeutil/since_test.go b/modules/timeutil/since_test.go index 40fefe8700950..b60aba87a3e5a 100644 --- a/modules/timeutil/since_test.go +++ b/modules/timeutil/since_test.go @@ -11,6 +11,7 @@ import ( "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/translation" + "code.gitea.io/gitea/tests/env" "github.com/stretchr/testify/assert" ) @@ -26,6 +27,7 @@ const ( ) func TestMain(m *testing.M) { + env.Filter([]string{"GITEA_TEST_"}, []string{"GITEA_"}) setting.StaticRootPath = "../../" setting.Names = []string{"english"} setting.Langs = []string{"en-US"} diff --git a/tests/env/filter.go b/tests/env/filter.go new file mode 100644 index 0000000000000..e9dc4a6930b96 --- /dev/null +++ b/tests/env/filter.go @@ -0,0 +1,31 @@ +// Copyright 2025 The Gitea Authors. All rights reserved. +// SPDX-License-Identifier: MIT + +package env + +import ( + "os" + "strings" +) + +func Filter(include, exclude []string) { + env := os.Environ() + for _, v := range env { + included := false + for _, i := range include { + if strings.HasPrefix(v, i) { + included = true + break + } + } + if !included { + for _, e := range exclude { + if strings.HasPrefix(v, e) { + parts := strings.SplitN(v, "=", 2) + os.Unsetenv(parts[0]) + break + } + } + } + } +} diff --git a/tests/env/filter_test.go b/tests/env/filter_test.go new file mode 100644 index 0000000000000..4f309b09fac77 --- /dev/null +++ b/tests/env/filter_test.go @@ -0,0 +1,39 @@ +// Copyright 2025 The Gitea Authors. All rights reserved. +// SPDX-License-Identifier: MIT + +package env + +import ( + "os" + "testing" +) + +func TestFilter(t *testing.T) { + t.Setenv("GITEA_FOO", "bar") + t.Setenv("FOO", "bar") + Filter([]string{}, []string{"GITEA_"}) + if os.Getenv("GITEA_FOO") != "" { + t.FailNow() + } + if os.Getenv("FOO") != "bar" { + t.FailNow() + } + + t.Setenv("GITEA_TEST_FOO", "bar") + t.Setenv("GITEA_BAR", "foo") + t.Setenv("GITEA_BAR_BAZ", "foo") + t.Setenv("GITEA_BAZ", "huz") + Filter([]string{"GITEA_TEST_", "GITEA_BAR="}, []string{"GITEA_"}) + if os.Getenv("GITEA_BAR") != "foo" { + t.Fail() + } + if os.Getenv("GITEA_TEST_FOO") != "bar" { + t.Fail() + } + if os.Getenv("GITEA_BAZ") != "" { + t.Fail() + } + if os.Getenv("GITEA_BAR_BAZ") != "" { + t.Fail() + } +} diff --git a/tests/test_utils.go b/tests/test_utils.go index e63eb7584695d..0c2db74ad830b 100644 --- a/tests/test_utils.go +++ b/tests/test_utils.go @@ -22,6 +22,7 @@ import ( "code.gitea.io/gitea/modules/testlogger" "code.gitea.io/gitea/modules/util" "code.gitea.io/gitea/routers" + "code.gitea.io/gitea/tests/env" "github.com/stretchr/testify/assert" ) @@ -29,6 +30,8 @@ import ( func InitTest(requireGitea bool) { testlogger.Init() + env.Filter([]string{"GITEA_TEST_", "GITEA_ROOT=", "GITEA_CONF="}, []string{"GITEA_"}) + giteaRoot := test.SetupGiteaRoot() // TODO: Speedup tests that rely on the event source ticker, confirm whether there is any bug or failure.