check / check (push) Waiting to run
The config tests unset variables without restoring them and read whatever the developer's shell exported, so results could differ from one machine to the next. config.ClearEnvForTest, in internal/config/testing.go, unsets every variable in the process environment and, when the test ends, leaves it exactly as it found it; every config test and the first-boot test call it before setting their own. TestEnvPositiveInt and TestEnvPort share one table runner, and the port errors name the bad value. A PORT of zero, below zero, or too large to parse now matches ErrInvalidPort, as one above 65535 already did. The README and the Settings page say an unparseable or non-positive RETENTION_SWEEP_INTERVAL stops startup. Model: opus-5-5
51 lines
1.2 KiB
Go
51 lines
1.2 KiB
Go
package config
|
|
|
|
import (
|
|
"os"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
// ClearEnvForTest unsets every variable in the process environment
|
|
// for the rest of the test, so a test sees only the variables it sets
|
|
// itself, not whatever the developer's shell exports. When the test
|
|
// ends it leaves the environment exactly as it found it: each variable
|
|
// it unset is put back, and any variable added since is removed.
|
|
func ClearEnvForTest(t *testing.T) {
|
|
t.Helper()
|
|
|
|
present := make(map[string]bool)
|
|
|
|
for _, entry := range os.Environ() {
|
|
key, _, _ := strings.Cut(entry, "=")
|
|
present[key] = true
|
|
|
|
// t.Setenv registers the restore; the Unsetenv after it is
|
|
// what makes the key absent, since a key set to the empty
|
|
// string is still present, and godotenv will not overwrite a
|
|
// present key.
|
|
t.Setenv(key, "")
|
|
|
|
err := os.Unsetenv(key)
|
|
if err != nil {
|
|
t.Fatalf("unsetting %s: %v", key, err)
|
|
}
|
|
}
|
|
|
|
// A variable the test adds other than through t.Setenv, as loading
|
|
// a .env file does, has no restore of its own.
|
|
t.Cleanup(func() {
|
|
for _, entry := range os.Environ() {
|
|
key, _, _ := strings.Cut(entry, "=")
|
|
if present[key] {
|
|
continue
|
|
}
|
|
|
|
err := os.Unsetenv(key)
|
|
if err != nil {
|
|
t.Errorf("unsetting %s: %v", key, err)
|
|
}
|
|
}
|
|
})
|
|
}
|