package config import "testing" func TestValidateRejectsNonLoopbackByDefault(t *testing.T) { t.Parallel() cfg := Config{ HTTPAddress: "0.0.0.0:8080", DatabaseDSN: "file:test.db", MediaMTXURL: "http://127.0.0.1:9997", ReconcileInterval: 1, ProbeInterval: 1, } if err := cfg.Validate(); err == nil { t.Fatal("expected non-loopback bind to be rejected") } cfg.AllowNonLoopback = true if err := cfg.Validate(); err != nil { t.Fatalf("explicit non-loopback opt-in failed: %v", err) } } func TestValidateRejectsCredentialsInMediaMTXURL(t *testing.T) { t.Parallel() cfg := Config{ HTTPAddress: "127.0.0.1:8080", DatabaseDSN: "file:test.db", MediaMTXURL: "http://" + "user" + ":" + "redacted" + "@127.0.0.1:9997", ReconcileInterval: 1, ProbeInterval: 1, } if err := cfg.Validate(); err == nil { t.Fatal("expected credentials in MediaMTX URL to be rejected") } } func TestValidateONVIFModeAndRewritePort(t *testing.T) { t.Parallel() cfg := Config{ HTTPAddress: "127.0.0.1:8080", DatabaseDSN: "file:test.db", MediaMTXURL: "http://127.0.0.1:9997", ReconcileInterval: 1, ProbeInterval: 1, ONVIFMode: "standard", RTSPRewriteHost: "127.0.0.1", RTSPRewritePort: 10554, } if err := cfg.Validate(); err != nil { t.Fatalf("valid ONVIF configuration failed: %v", err) } cfg.ONVIFMode = "vendor" if err := cfg.Validate(); err == nil { t.Fatal("unknown ONVIF mode must be rejected") } cfg.ONVIFMode = "standard" cfg.RTSPRewritePort = 65536 if err := cfg.Validate(); err == nil { t.Fatal("invalid RTSP rewrite port must be rejected") } } func TestLoadRTSPStripQueryOptIn(t *testing.T) { t.Setenv("SENSE_ONVIF_RTSP_STRIP_QUERY", "true") cfg, err := Load() if err != nil { t.Fatal(err) } if !cfg.RTSPStripQuery { t.Fatal("explicit RTSP query stripping was not loaded") } } func TestValidateDatabaseDriver(t *testing.T) { t.Parallel() cfg := Config{ HTTPAddress: "127.0.0.1:8080", DatabaseDriver: "postgres", DatabaseDSN: "file:test.db", MediaMTXURL: "http://127.0.0.1:9997", ReconcileInterval: 1, ProbeInterval: 1, } if err := cfg.Validate(); err == nil { t.Fatal("postgres driver must reject the SQLite default DSN") } cfg.DatabaseDSN = "postgres://sense-runtime@127.0.0.1/yovision?sslmode=disable" if err := cfg.Validate(); err != nil { t.Fatalf("valid PostgreSQL selection failed: %v", err) } cfg.DatabaseDriver = "mysql" if err := cfg.Validate(); err == nil { t.Fatal("unknown database driver must be rejected") } }