// SPDX-License-Identifier: GPL-3.0-or-later package config import ( "os" "path/filepath" "testing" "time" ) func TestDefaultsMatchPython(t *testing.T) { cfg := Default() if cfg.SampleInterval != 4*time.Second || cfg.HeartbeatMaxAge != 120 { t.Fatalf("unexpected defaults: %+v", cfg) } if !cfg.Enabled("deleted_exe") { t.Fatal("deleted_exe must be enabled by default") } } func TestLoadFlatTOMLAndMultilineDetectorArray(t *testing.T) { path := filepath.Join(t.TempDir(), "sentinel.toml") raw := []byte(` sample_interval = 1.5 # seconds heartbeat_max_age = 45 detectors = [ "deleted_exe", "egress", ] unknown_future_key = true `) if err := os.WriteFile(path, raw, 0o600); err != nil { t.Fatal(err) } cfg, err := Load(path) if err != nil { t.Fatal(err) } if cfg.SampleInterval != 1500*time.Millisecond || cfg.HeartbeatMaxAge != 45 { t.Fatalf("unexpected parsed config: %+v", cfg) } if !cfg.Enabled("deleted_exe") || !cfg.Enabled("egress") || cfg.Enabled("reverse_shell") { t.Fatalf("unexpected detector set: %#v", cfg.Detectors) } } func TestMissingFileKeepsDefaults(t *testing.T) { cfg, err := Load(filepath.Join(t.TempDir(), "missing.toml")) if err != nil { t.Fatal(err) } if !cfg.Enabled("deleted_exe") { t.Fatal("missing config should retain defaults") } }