97 lines
2.3 KiB
Go
97 lines
2.3 KiB
Go
package config
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
)
|
|
|
|
func TestDefaults(t *testing.T) {
|
|
cfg, err := Load(nil)
|
|
if err != nil {
|
|
t.Fatalf("Load: %v", err)
|
|
}
|
|
if cfg.Port != "8080" {
|
|
t.Fatalf("Port = %q, want 8080", cfg.Port)
|
|
}
|
|
if cfg.DBDriver != "sqlite" {
|
|
t.Fatalf("DBDriver = %q, want sqlite", cfg.DBDriver)
|
|
}
|
|
if got := cfg.Addresses(); len(got) != 1 || got[0] != "0.0.0.0:8080" {
|
|
t.Fatalf("Addresses = %v, want [0.0.0.0:8080]", got)
|
|
}
|
|
}
|
|
|
|
func TestPrecedence(t *testing.T) {
|
|
dir := t.TempDir()
|
|
path := filepath.Join(dir, "config.yaml")
|
|
content := `
|
|
logLevel: debug
|
|
port: "9090"
|
|
listenAddr: "127.0.0.1"
|
|
dbDsn: "file:from-file.db"
|
|
corsOrigins:
|
|
- "https://forms.example.com"
|
|
`
|
|
if err := os.WriteFile(path, []byte(content), 0o600); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
t.Setenv("KERERU_LOG_LEVEL", "warn")
|
|
t.Setenv("KERERU_PORT", "9091")
|
|
|
|
cfg, err := Load([]string{"--conf", path, "--port", "9092"})
|
|
if err != nil {
|
|
t.Fatalf("Load: %v", err)
|
|
}
|
|
|
|
if cfg.LogLevel != "warn" {
|
|
t.Fatalf("LogLevel = %q, want env override warn", cfg.LogLevel)
|
|
}
|
|
if cfg.Port != "9092" {
|
|
t.Fatalf("Port = %q, want flag override 9092", cfg.Port)
|
|
}
|
|
if cfg.HTTPAddr != "127.0.0.1" {
|
|
t.Fatalf("HTTPAddr = %q, want file value", cfg.HTTPAddr)
|
|
}
|
|
if cfg.DBDSN != "file:from-file.db" {
|
|
t.Fatalf("DBDSN = %q, want file value", cfg.DBDSN)
|
|
}
|
|
if len(cfg.CORSOrigins) != 1 || cfg.CORSOrigins[0] != "https://forms.example.com" {
|
|
t.Fatalf("CORSOrigins = %v", cfg.CORSOrigins)
|
|
}
|
|
}
|
|
|
|
func TestJSONConfigAndIPv6(t *testing.T) {
|
|
dir := t.TempDir()
|
|
path := filepath.Join(dir, "config.json")
|
|
content := `{"listenAddr":"","listenAddr6":"::1","port":"8081"}`
|
|
if err := os.WriteFile(path, []byte(content), 0o600); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
cfg, err := Load([]string{"--conf=" + path})
|
|
if err != nil {
|
|
t.Fatalf("Load: %v", err)
|
|
}
|
|
addrs := cfg.Addresses()
|
|
if len(addrs) != 1 || addrs[0] != "[::1]:8081" {
|
|
t.Fatalf("Addresses = %v, want [[::1]:8081]", addrs)
|
|
}
|
|
}
|
|
|
|
func TestValidateRequiresListener(t *testing.T) {
|
|
cfg := Default()
|
|
cfg.HTTPAddr = ""
|
|
cfg.HTTPAddr6 = ""
|
|
if err := cfg.Validate(); err == nil {
|
|
t.Fatal("expected validation error when no listener is configured")
|
|
}
|
|
}
|
|
|
|
func TestInvalidPort(t *testing.T) {
|
|
if _, err := Load([]string{"--port", "not-a-port"}); err == nil {
|
|
t.Fatal("expected validation error for invalid port")
|
|
}
|
|
}
|