mirror of
https://github.com/bitechdev/ResolveSpec.git
synced 2025-12-13 17:10:36 +00:00
Some checks are pending
Build , Vet Test, and Lint / Run Vet Tests (1.23.x) (push) Waiting to run
Build , Vet Test, and Lint / Run Vet Tests (1.24.x) (push) Waiting to run
Build , Vet Test, and Lint / Lint Code (push) Waiting to run
Build , Vet Test, and Lint / Build (push) Waiting to run
Tests / Unit Tests (push) Waiting to run
Tests / Integration Tests (push) Waiting to run
167 lines
4.0 KiB
Go
167 lines
4.0 KiB
Go
package config
|
|
|
|
import (
|
|
"os"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestNewManager(t *testing.T) {
|
|
mgr := NewManager()
|
|
if mgr == nil {
|
|
t.Fatal("Expected manager to be non-nil")
|
|
}
|
|
|
|
if mgr.v == nil {
|
|
t.Fatal("Expected viper instance to be non-nil")
|
|
}
|
|
}
|
|
|
|
func TestDefaultValues(t *testing.T) {
|
|
mgr := NewManager()
|
|
if err := mgr.Load(); err != nil {
|
|
t.Fatalf("Failed to load config: %v", err)
|
|
}
|
|
|
|
cfg, err := mgr.GetConfig()
|
|
if err != nil {
|
|
t.Fatalf("Failed to get config: %v", err)
|
|
}
|
|
|
|
// Test default values
|
|
tests := []struct {
|
|
name string
|
|
got interface{}
|
|
expected interface{}
|
|
}{
|
|
{"server.addr", cfg.Server.Addr, ":8080"},
|
|
{"server.shutdown_timeout", cfg.Server.ShutdownTimeout, 30 * time.Second},
|
|
{"tracing.enabled", cfg.Tracing.Enabled, false},
|
|
{"tracing.service_name", cfg.Tracing.ServiceName, "resolvespec"},
|
|
{"cache.provider", cfg.Cache.Provider, "memory"},
|
|
{"cache.redis.host", cfg.Cache.Redis.Host, "localhost"},
|
|
{"cache.redis.port", cfg.Cache.Redis.Port, 6379},
|
|
{"logger.dev", cfg.Logger.Dev, false},
|
|
{"middleware.rate_limit_rps", cfg.Middleware.RateLimitRPS, 100.0},
|
|
{"middleware.rate_limit_burst", cfg.Middleware.RateLimitBurst, 200},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
if tt.got != tt.expected {
|
|
t.Errorf("%s: got %v, want %v", tt.name, tt.got, tt.expected)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestEnvironmentVariableOverrides(t *testing.T) {
|
|
// Set environment variables
|
|
os.Setenv("RESOLVESPEC_SERVER_ADDR", ":9090")
|
|
os.Setenv("RESOLVESPEC_TRACING_ENABLED", "true")
|
|
os.Setenv("RESOLVESPEC_CACHE_PROVIDER", "redis")
|
|
os.Setenv("RESOLVESPEC_LOGGER_DEV", "true")
|
|
defer func() {
|
|
os.Unsetenv("RESOLVESPEC_SERVER_ADDR")
|
|
os.Unsetenv("RESOLVESPEC_TRACING_ENABLED")
|
|
os.Unsetenv("RESOLVESPEC_CACHE_PROVIDER")
|
|
os.Unsetenv("RESOLVESPEC_LOGGER_DEV")
|
|
}()
|
|
|
|
mgr := NewManager()
|
|
if err := mgr.Load(); err != nil {
|
|
t.Fatalf("Failed to load config: %v", err)
|
|
}
|
|
|
|
cfg, err := mgr.GetConfig()
|
|
if err != nil {
|
|
t.Fatalf("Failed to get config: %v", err)
|
|
}
|
|
|
|
// Test environment variable overrides
|
|
tests := []struct {
|
|
name string
|
|
got interface{}
|
|
expected interface{}
|
|
}{
|
|
{"server.addr", cfg.Server.Addr, ":9090"},
|
|
{"tracing.enabled", cfg.Tracing.Enabled, true},
|
|
{"cache.provider", cfg.Cache.Provider, "redis"},
|
|
{"logger.dev", cfg.Logger.Dev, true},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
if tt.got != tt.expected {
|
|
t.Errorf("%s: got %v, want %v", tt.name, tt.got, tt.expected)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestProgrammaticConfiguration(t *testing.T) {
|
|
mgr := NewManager()
|
|
mgr.Set("server.addr", ":7070")
|
|
mgr.Set("tracing.service_name", "test-service")
|
|
|
|
cfg, err := mgr.GetConfig()
|
|
if err != nil {
|
|
t.Fatalf("Failed to get config: %v", err)
|
|
}
|
|
|
|
if cfg.Server.Addr != ":7070" {
|
|
t.Errorf("server.addr: got %s, want :7070", cfg.Server.Addr)
|
|
}
|
|
|
|
if cfg.Tracing.ServiceName != "test-service" {
|
|
t.Errorf("tracing.service_name: got %s, want test-service", cfg.Tracing.ServiceName)
|
|
}
|
|
}
|
|
|
|
func TestGetterMethods(t *testing.T) {
|
|
mgr := NewManager()
|
|
mgr.Set("test.string", "value")
|
|
mgr.Set("test.int", 42)
|
|
mgr.Set("test.bool", true)
|
|
|
|
if got := mgr.GetString("test.string"); got != "value" {
|
|
t.Errorf("GetString: got %s, want value", got)
|
|
}
|
|
|
|
if got := mgr.GetInt("test.int"); got != 42 {
|
|
t.Errorf("GetInt: got %d, want 42", got)
|
|
}
|
|
|
|
if got := mgr.GetBool("test.bool"); !got {
|
|
t.Errorf("GetBool: got %v, want true", got)
|
|
}
|
|
}
|
|
|
|
func TestWithOptions(t *testing.T) {
|
|
mgr := NewManagerWithOptions(
|
|
WithEnvPrefix("MYAPP"),
|
|
WithConfigName("myconfig"),
|
|
)
|
|
|
|
if mgr == nil {
|
|
t.Fatal("Expected manager to be non-nil")
|
|
}
|
|
|
|
// Set environment variable with custom prefix
|
|
os.Setenv("MYAPP_SERVER_ADDR", ":5000")
|
|
defer os.Unsetenv("MYAPP_SERVER_ADDR")
|
|
|
|
if err := mgr.Load(); err != nil {
|
|
t.Fatalf("Failed to load config: %v", err)
|
|
}
|
|
|
|
cfg, err := mgr.GetConfig()
|
|
if err != nil {
|
|
t.Fatalf("Failed to get config: %v", err)
|
|
}
|
|
|
|
if cfg.Server.Addr != ":5000" {
|
|
t.Errorf("server.addr: got %s, want :5000", cfg.Server.Addr)
|
|
}
|
|
}
|