feat(sense): add reconciliation safety controls [T-012]
This commit is contained in:
@@ -3,6 +3,7 @@ package config
|
||||
import (
|
||||
"path/filepath"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
func TestValidateRejectsNonLoopbackByDefault(t *testing.T) {
|
||||
@@ -23,6 +24,35 @@ func TestValidateRejectsNonLoopbackByDefault(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestValidateReconcileLeaseAndOrphanProductionBoundary(t *testing.T) {
|
||||
base := Config{
|
||||
HTTPAddress: "127.0.0.1:8080", DatabaseDriver: "postgres",
|
||||
DatabaseDSN: "postgres://sense-runtime@127.0.0.1/yovision?sslmode=disable",
|
||||
MediaMTXURL: "http://127.0.0.1:9997", ReconcileInterval: time.Second,
|
||||
ProbeInterval: time.Second, ReconcileLeaseDuration: 30 * time.Second,
|
||||
ReconcileOperationTimeout: 20 * time.Second, OrphanScanEnabled: true,
|
||||
OrphanScanInterval: time.Minute, InstanceID: "ins_edge-01",
|
||||
}
|
||||
if err := base.Validate(); err != nil {
|
||||
t.Fatalf("valid multi-instance configuration failed: %v", err)
|
||||
}
|
||||
invalidTimeout := base
|
||||
invalidTimeout.ReconcileOperationTimeout = invalidTimeout.ReconcileLeaseDuration
|
||||
if err := invalidTimeout.Validate(); err == nil {
|
||||
t.Fatal("operation timeout equal to the lease was accepted")
|
||||
}
|
||||
invalidInstance := base
|
||||
invalidInstance.InstanceID = "tenant/site"
|
||||
if err := invalidInstance.Validate(); err == nil {
|
||||
t.Fatal("unbounded instance label was accepted")
|
||||
}
|
||||
sqlite := base
|
||||
sqlite.DatabaseDriver, sqlite.DatabaseDSN = "sqlite", "file:test.db"
|
||||
if err := sqlite.Validate(); err == nil {
|
||||
t.Fatal("orphan scanner was accepted on SQLite")
|
||||
}
|
||||
}
|
||||
|
||||
func TestValidateRejectsCredentialsInMediaMTXURL(t *testing.T) {
|
||||
t.Parallel()
|
||||
cfg := Config{
|
||||
|
||||
Reference in New Issue
Block a user