Files
yovision/Sense/internal/config/config_test.go
T

96 lines
2.6 KiB
Go
Raw Normal View History

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")
}
}