forked from aegis/pyserveX
128 lines
2.3 KiB
Go
128 lines
2.3 KiB
Go
package config
|
|
|
|
import (
|
|
"os"
|
|
"testing"
|
|
)
|
|
|
|
func TestDefault(t *testing.T) {
|
|
cfg := Default()
|
|
|
|
if cfg.Server.Host != "0.0.0.0" {
|
|
t.Errorf("Expected host 0.0.0.0, got %s", cfg.Server.Host)
|
|
}
|
|
|
|
if cfg.Server.Port != 8080 {
|
|
t.Errorf("Expected port 8080, got %d", cfg.Server.Port)
|
|
}
|
|
|
|
if cfg.SSL.Enabled {
|
|
t.Error("Expected SSL to be disabled by default")
|
|
}
|
|
}
|
|
|
|
func TestValidate(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
modify func(*Config)
|
|
wantErr bool
|
|
}{
|
|
{
|
|
name: "valid default config",
|
|
modify: func(c *Config) {},
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "invalid port - too low",
|
|
modify: func(c *Config) {
|
|
c.Server.Port = 0
|
|
},
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "invalid port - too high",
|
|
modify: func(c *Config) {
|
|
c.Server.Port = 70000
|
|
},
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "SSL enabled without cert",
|
|
modify: func(c *Config) {
|
|
c.SSL.Enabled = true
|
|
c.SSL.CertFile = ""
|
|
},
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "SSL enabled without key",
|
|
modify: func(c *Config) {
|
|
c.SSL.Enabled = true
|
|
c.SSL.CertFile = "cert.pem"
|
|
c.SSL.KeyFile = ""
|
|
},
|
|
wantErr: true,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
cfg := Default()
|
|
tt.modify(cfg)
|
|
|
|
err := cfg.Validate()
|
|
if (err != nil) != tt.wantErr {
|
|
t.Errorf("Validate() error = %v, wantErr %v", err, tt.wantErr)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestLoad(t *testing.T) {
|
|
// Create temporary config file
|
|
content := `
|
|
server:
|
|
host: 127.0.0.1
|
|
port: 3000
|
|
|
|
logging:
|
|
level: DEBUG
|
|
`
|
|
tmpfile, err := os.CreateTemp("", "config-*.yaml")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer os.Remove(tmpfile.Name())
|
|
|
|
if _, err := tmpfile.Write([]byte(content)); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := tmpfile.Close(); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
cfg, err := Load(tmpfile.Name())
|
|
if err != nil {
|
|
t.Fatalf("Failed to load config: %v", err)
|
|
}
|
|
|
|
if cfg.Server.Host != "127.0.0.1" {
|
|
t.Errorf("Expected host 127.0.0.1, got %s", cfg.Server.Host)
|
|
}
|
|
|
|
if cfg.Server.Port != 3000 {
|
|
t.Errorf("Expected port 3000, got %d", cfg.Server.Port)
|
|
}
|
|
|
|
if cfg.Logging.Level != "DEBUG" {
|
|
t.Errorf("Expected level DEBUG, got %s", cfg.Logging.Level)
|
|
}
|
|
}
|
|
|
|
func TestLoadNotFound(t *testing.T) {
|
|
_, err := Load("/nonexistent/config.yaml")
|
|
if err == nil {
|
|
t.Error("Expected error for non-existent file")
|
|
}
|
|
}
|