package config import ( "os" "testing" ) func TestLoad(t *testing.T) { testConfig := `server: port: 9000 tls: enabled: false cert_file: test.pem key_file: test.key` tmpFile, err := os.CreateTemp("", "config_test_*.yaml") if err != nil { t.Fatal(err) } defer os.Remove(tmpFile.Name()) if _, err := tmpFile.WriteString(testConfig); err != nil { t.Fatal(err) } tmpFile.Close() config, err := Load(tmpFile.Name()) if err != nil { t.Fatalf("Load failed: %v", err) } if config.Server.Port != 9000 { t.Errorf("Expected port 9000, got %d", config.Server.Port) } if config.Server.TLS.Enabled != false { t.Errorf("Expected TLS disabled, got %v", config.Server.TLS.Enabled) } } func TestLoadFileNotFound(t *testing.T) { _, err := Load("nonexistent.yaml") if err == nil { t.Error("Expected error for nonexistent file") } } func TestLoadLoggingOutput(t *testing.T) { testConfig := `server: port: 8443 logging: output: /var/log/relay.log level: debug` tmpFile, err := os.CreateTemp("", "config_logging_*.yaml") if err != nil { t.Fatal(err) } defer os.Remove(tmpFile.Name()) if _, err := tmpFile.WriteString(testConfig); err != nil { t.Fatal(err) } tmpFile.Close() cfg, err := Load(tmpFile.Name()) if err != nil { t.Fatalf("Load failed: %v", err) } if cfg.Logging.Output != "/var/log/relay.log" { t.Errorf("Expected output '/var/log/relay.log', got '%s'", cfg.Logging.Output) } if cfg.Logging.Level != "debug" { t.Errorf("Expected level 'debug', got '%s'", cfg.Logging.Level) } } func TestLoadLoggingDefaults(t *testing.T) { testConfig := `server: port: 8443` tmpFile, err := os.CreateTemp("", "config_defaults_*.yaml") if err != nil { t.Fatal(err) } defer os.Remove(tmpFile.Name()) if _, err := tmpFile.WriteString(testConfig); err != nil { t.Fatal(err) } tmpFile.Close() cfg, err := Load(tmpFile.Name()) if err != nil { t.Fatalf("Load failed: %v", err) } if cfg.Logging.Output != "" { t.Errorf("Expected empty output default, got '%s'", cfg.Logging.Output) } if cfg.Logging.Level != "" { t.Errorf("Expected empty level default, got '%s'", cfg.Logging.Level) } } func TestLoadLoggingStdout(t *testing.T) { testConfig := `server: port: 8443 logging: output: stdout level: warn` tmpFile, err := os.CreateTemp("", "config_stdout_*.yaml") if err != nil { t.Fatal(err) } defer os.Remove(tmpFile.Name()) if _, err := tmpFile.WriteString(testConfig); err != nil { t.Fatal(err) } tmpFile.Close() cfg, err := Load(tmpFile.Name()) if err != nil { t.Fatalf("Load failed: %v", err) } if cfg.Logging.Output != "stdout" { t.Errorf("Expected output 'stdout', got '%s'", cfg.Logging.Output) } if cfg.Logging.Level != "warn" { t.Errorf("Expected level 'warn', got '%s'", cfg.Logging.Level) } }