132 lines
3.6 KiB
Go
132 lines
3.6 KiB
Go
package config
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestLoadDefaultsAdvertiseIPToLoopback(t *testing.T) {
|
|
t.Setenv("TELESRV_ADVERTISE_IP", "")
|
|
|
|
cfg, err := Load()
|
|
if err != nil {
|
|
t.Fatalf("Load: %v", err)
|
|
}
|
|
if cfg.AdvertiseIP != "127.0.0.1" {
|
|
t.Fatalf("AdvertiseIP = %q, want loopback default", cfg.AdvertiseIP)
|
|
}
|
|
}
|
|
|
|
func TestLoadUsesExplicitAdvertiseIP(t *testing.T) {
|
|
t.Setenv("TELESRV_ADVERTISE_IP", "192.0.2.10")
|
|
|
|
cfg, err := Load()
|
|
if err != nil {
|
|
t.Fatalf("Load: %v", err)
|
|
}
|
|
if cfg.AdvertiseIP != "192.0.2.10" {
|
|
t.Fatalf("AdvertiseIP = %q, want explicit env", cfg.AdvertiseIP)
|
|
}
|
|
}
|
|
|
|
func TestLoadBusinessAIProvider(t *testing.T) {
|
|
t.Setenv("TELESRV_BUSINESS_AI_PROVIDER", "echo")
|
|
|
|
cfg, err := Load()
|
|
if err != nil {
|
|
t.Fatalf("Load: %v", err)
|
|
}
|
|
if cfg.BusinessAIProvider != "echo" {
|
|
t.Fatalf("BusinessAIProvider = %q, want echo", cfg.BusinessAIProvider)
|
|
}
|
|
}
|
|
|
|
func TestLoadBusinessAIProviderDefaultsToEcho(t *testing.T) {
|
|
t.Setenv("TELESRV_BUSINESS_AI_PROVIDER", "")
|
|
|
|
cfg, err := Load()
|
|
if err != nil {
|
|
t.Fatalf("Load: %v", err)
|
|
}
|
|
if cfg.BusinessAIProvider != "echo" {
|
|
t.Fatalf("BusinessAIProvider = %q, want echo", cfg.BusinessAIProvider)
|
|
}
|
|
}
|
|
|
|
func TestLoadReadsEnvStyleConfigFile(t *testing.T) {
|
|
path := filepath.Join(t.TempDir(), "telesrv.env")
|
|
writeConfigFile(t, path, `
|
|
TELESRV_MAPBOX_TOKEN="file-token"
|
|
TELESRV_POSTGRES_MAX_CONNS=77
|
|
TELESRV_WEBSOCKET_ALLOWED_ORIGINS=https://one.example, https://two.example
|
|
TELESRV_CALL_RING_TIMEOUT=2m
|
|
TELESRV_STICKER_WEB_ADDR=127.0.0.1:2401
|
|
TELESRV_STICKER_WEB_PUBLIC_URL=https://packs.example.test
|
|
`)
|
|
t.Setenv("TELESRV_CONFIG", path)
|
|
|
|
cfg, err := Load()
|
|
if err != nil {
|
|
t.Fatalf("Load: %v", err)
|
|
}
|
|
if cfg.MapboxToken != "file-token" {
|
|
t.Fatalf("MapboxToken = %q, want file-token", cfg.MapboxToken)
|
|
}
|
|
if cfg.PostgresMaxConns != 77 {
|
|
t.Fatalf("PostgresMaxConns = %d, want 77", cfg.PostgresMaxConns)
|
|
}
|
|
if got, want := cfg.WebSocketAllowedOrigins, []string{"https://one.example", "https://two.example"}; len(got) != 2 || got[0] != want[0] || got[1] != want[1] {
|
|
t.Fatalf("WebSocketAllowedOrigins = %#v, want %#v", got, want)
|
|
}
|
|
if cfg.CallRingTimeout != 2*time.Minute {
|
|
t.Fatalf("CallRingTimeout = %v, want 2m", cfg.CallRingTimeout)
|
|
}
|
|
if cfg.StickerWebAddr != "127.0.0.1:2401" {
|
|
t.Fatalf("StickerWebAddr = %q, want 127.0.0.1:2401", cfg.StickerWebAddr)
|
|
}
|
|
if cfg.StickerWebPublicURL != "https://packs.example.test" {
|
|
t.Fatalf("StickerWebPublicURL = %q, want https://packs.example.test", cfg.StickerWebPublicURL)
|
|
}
|
|
}
|
|
|
|
func TestLoadEnvironmentOverridesConfigFile(t *testing.T) {
|
|
path := filepath.Join(t.TempDir(), "telesrv.env")
|
|
writeConfigFile(t, path, `TELESRV_MAPBOX_TOKEN=file-token`)
|
|
t.Setenv("TELESRV_CONFIG", path)
|
|
t.Setenv("TELESRV_MAPBOX_TOKEN", "env-token")
|
|
|
|
cfg, err := Load()
|
|
if err != nil {
|
|
t.Fatalf("Load: %v", err)
|
|
}
|
|
if cfg.MapboxToken != "env-token" {
|
|
t.Fatalf("MapboxToken = %q, want env-token", cfg.MapboxToken)
|
|
}
|
|
}
|
|
|
|
func TestLoadExplicitMissingConfigFileErrors(t *testing.T) {
|
|
t.Setenv("TELESRV_CONFIG", filepath.Join(t.TempDir(), "missing.env"))
|
|
|
|
if _, err := Load(); err == nil {
|
|
t.Fatal("Load succeeded with explicit missing config file, want error")
|
|
}
|
|
}
|
|
|
|
func TestLoadRejectsNonTelesrvConfigKeys(t *testing.T) {
|
|
path := filepath.Join(t.TempDir(), "telesrv.env")
|
|
writeConfigFile(t, path, `MAPBOX_TOKEN=file-token`)
|
|
t.Setenv("TELESRV_CONFIG", path)
|
|
|
|
if _, err := Load(); err == nil {
|
|
t.Fatal("Load succeeded with unsupported config key, want error")
|
|
}
|
|
}
|
|
|
|
func writeConfigFile(t *testing.T, path, body string) {
|
|
t.Helper()
|
|
if err := os.WriteFile(path, []byte(body), 0o600); err != nil {
|
|
t.Fatalf("write config file: %v", err)
|
|
}
|
|
}
|