fixup! fixup! fixup! Further pursue of perfection.

This commit is contained in:
2025-09-05 13:57:54 +01:00
parent 2c902eaafb
commit e267cb3a6f
17 changed files with 7751 additions and 13 deletions
+286
View File
@@ -1,6 +1,8 @@
package traefikoidc
import (
"os"
"runtime"
"testing"
"time"
)
@@ -90,3 +92,287 @@ func TestCacheAdapterSetMaxSize(t *testing.T) {
adapter.Cleanup()
adapter.Close()
}
// Test isTestMode function with different conditions
func TestIsTestMode(t *testing.T) {
// Store original values
originalSuppressLogs := os.Getenv("SUPPRESS_DIAGNOSTIC_LOGS")
originalGoTest := os.Getenv("GO_TEST")
originalArgs := os.Args
// Cleanup after test
defer func() {
os.Setenv("SUPPRESS_DIAGNOSTIC_LOGS", originalSuppressLogs)
os.Setenv("GO_TEST", originalGoTest)
os.Args = originalArgs
}()
t.Run("SUPPRESS_DIAGNOSTIC_LOGS environment variable", func(t *testing.T) {
os.Unsetenv("SUPPRESS_DIAGNOSTIC_LOGS")
os.Unsetenv("GO_TEST")
os.Args = []string{"myprogram"}
// Should return false initially
if isTestMode() {
t.Error("Expected isTestMode to return false without SUPPRESS_DIAGNOSTIC_LOGS")
}
// Set environment variable
os.Setenv("SUPPRESS_DIAGNOSTIC_LOGS", "1")
if !isTestMode() {
t.Error("Expected isTestMode to return true with SUPPRESS_DIAGNOSTIC_LOGS=1")
}
// Test other values
os.Setenv("SUPPRESS_DIAGNOSTIC_LOGS", "0")
if isTestMode() {
t.Error("Expected isTestMode to return false with SUPPRESS_DIAGNOSTIC_LOGS=0")
}
})
t.Run("Program name detection", func(t *testing.T) {
os.Unsetenv("SUPPRESS_DIAGNOSTIC_LOGS")
os.Unsetenv("GO_TEST")
testCases := []struct {
name string
progName string
shouldMatch bool
}{
{"Test binary", "myprogram.test", true},
{"Go build temp", "go_build_temp_binary", true},
{"Debug binary", "__debug_bin1234", true},
{"Test in name", "mytestprogram", true},
{"Normal program", "myprogram", false},
}
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
os.Args = []string{tc.progName}
result := isTestMode()
if result != tc.shouldMatch {
t.Errorf("Program %q: expected %v, got %v", tc.progName, tc.shouldMatch, result)
}
})
}
})
t.Run("GO_TEST environment variable", func(t *testing.T) {
os.Unsetenv("SUPPRESS_DIAGNOSTIC_LOGS")
os.Args = []string{"myprogram"}
os.Unsetenv("GO_TEST")
if isTestMode() {
t.Error("Expected isTestMode to return false without GO_TEST")
}
os.Setenv("GO_TEST", "1")
if !isTestMode() {
t.Error("Expected isTestMode to return true with GO_TEST=1")
}
os.Setenv("GO_TEST", "0")
if isTestMode() {
t.Error("Expected isTestMode to return false with GO_TEST=0")
}
})
t.Run("Command line arguments with -test", func(t *testing.T) {
os.Unsetenv("SUPPRESS_DIAGNOSTIC_LOGS")
os.Unsetenv("GO_TEST")
testCases := []struct {
name string
args []string
expected bool
}{
{"No test args", []string{"myprogram"}, false},
{"Test.run flag", []string{"myprogram", "-test.run=TestSomething"}, true},
{"Test.v flag", []string{"myprogram", "-test.v"}, true},
{"Test.count flag", []string{"myprogram", "-test.count=1"}, true},
{"Other flags", []string{"myprogram", "-config", "file.json"}, false},
}
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
os.Args = tc.args
result := isTestMode()
if result != tc.expected {
t.Errorf("Args %v: expected %v, got %v", tc.args, tc.expected, result)
}
})
}
})
t.Run("Runtime compiler detection", func(t *testing.T) {
os.Unsetenv("SUPPRESS_DIAGNOSTIC_LOGS")
os.Unsetenv("GO_TEST")
os.Args = []string{"myprogram"}
// This is tricky to test because we can't change runtime.Compiler easily
// But we can test that the current behavior works
if runtime.Compiler == "yaegi" {
if !isTestMode() {
t.Error("Expected isTestMode to return true with yaegi compiler")
}
} else {
// With gc compiler, should return false for normal program name
if isTestMode() {
t.Error("Expected isTestMode to return false with gc compiler and normal program")
}
}
})
t.Run("Comprehensive test scenarios", func(t *testing.T) {
// Test multiple conditions at once
testCases := []struct {
name string
envSuppress string
envGoTest string
progName string
args []string
expected bool
}{
{
"All conditions false",
"", "", "myprogram",
[]string{"myprogram", "-config", "test.json"},
false,
},
{
"Multiple true conditions",
"1", "1", "test.exe",
[]string{"test.exe", "-test.v"},
true,
},
{
"Program name with test",
"", "", "mytestbinary",
[]string{"mytestbinary"},
true,
},
}
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
if tc.envSuppress != "" {
os.Setenv("SUPPRESS_DIAGNOSTIC_LOGS", tc.envSuppress)
} else {
os.Unsetenv("SUPPRESS_DIAGNOSTIC_LOGS")
}
if tc.envGoTest != "" {
os.Setenv("GO_TEST", tc.envGoTest)
} else {
os.Unsetenv("GO_TEST")
}
os.Args = tc.args
result := isTestMode()
if result != tc.expected {
t.Errorf("Scenario %q: expected %v, got %v", tc.name, tc.expected, result)
}
})
}
})
}
// Test buildFullURL function with edge cases
func TestBuildFullURL(t *testing.T) {
testCases := []struct {
name string
scheme string
host string
path string
expected string
}{
{
"Standard HTTPS URL",
"https", "example.com", "/api/v1/users",
"https://example.com/api/v1/users",
},
{
"HTTP with port",
"http", "localhost:8080", "/health",
"http://localhost:8080/health",
},
{
"Empty path",
"https", "api.service.com", "",
"https://api.service.com/",
},
{
"Root path",
"https", "www.example.org", "/",
"https://www.example.org/",
},
{
"Path without leading slash",
"http", "internal.local", "status",
"http://internal.local/status",
},
{
"Complex path with query params",
"https", "api.example.com", "/v2/search?q=test&limit=10",
"https://api.example.com/v2/search?q=test&limit=10",
},
{
"IPv4 address",
"http", "192.168.1.100", "/api",
"http://192.168.1.100/api",
},
{
"IPv6 address with brackets",
"http", "[::1]:8080", "/test",
"http://[::1]:8080/test",
},
{
"Empty scheme",
"", "example.com", "/test",
"://example.com/test",
},
{
"Empty host",
"https", "", "/test",
"https:///test",
},
{
"All empty",
"", "", "",
":///",
},
{
"Special characters in path",
"https", "example.com", "/path with spaces/test?param=value with spaces",
"https://example.com/path with spaces/test?param=value with spaces",
},
}
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
result := buildFullURL(tc.scheme, tc.host, tc.path)
if result != tc.expected {
t.Errorf("buildFullURL(%q, %q, %q): expected %q, got %q",
tc.scheme, tc.host, tc.path, tc.expected, result)
}
})
}
// Test that path gets leading slash when missing
t.Run("Path normalization", func(t *testing.T) {
// When path doesn't start with /, it should be added
result1 := buildFullURL("https", "example.com", "api/test")
expected1 := "https://example.com/api/test"
if result1 != expected1 {
t.Errorf("Expected path to be normalized with leading slash: got %q, want %q", result1, expected1)
}
// When path already starts with /, it shouldn't be doubled
result2 := buildFullURL("https", "example.com", "/api/test")
expected2 := "https://example.com/api/test"
if result2 != expected2 {
t.Errorf("Expected no double slashes: got %q, want %q", result2, expected2)
}
})
}