test: Add DiscoveryConfig UnmarshalJSON tests

Cover invalid JSON error path, modern field parsing, legacy field
parsing, and empty object default handling.
Coverage: 60% → 88.9%
This commit is contained in:
rcourtman 2025-12-02 02:29:38 +00:00
parent 071ccc44ec
commit 0d482f9d63

View file

@ -707,3 +707,80 @@ func TestSanitizeCIDRList(t *testing.T) {
})
}
}
func TestDiscoveryConfigUnmarshalJSON_InvalidJSON(t *testing.T) {
var cfg DiscoveryConfig
err := cfg.UnmarshalJSON([]byte(`{invalid json`))
if err == nil {
t.Error("expected error for invalid JSON")
}
}
func TestDiscoveryConfigUnmarshalJSON_ModernFields(t *testing.T) {
var cfg DiscoveryConfig
data := `{
"environment_override": "docker_host",
"subnet_allowlist": ["192.168.1.0/24"],
"subnet_blocklist": ["10.0.0.0/8"],
"max_hosts_per_scan": 100,
"max_concurrent": 5,
"enable_reverse_dns": true,
"scan_gateways": false,
"dial_timeout_ms": 2000,
"http_timeout_ms": 5000
}`
err := cfg.UnmarshalJSON([]byte(data))
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if cfg.EnvironmentOverride != "docker_host" {
t.Errorf("EnvironmentOverride = %q, want 'docker_host'", cfg.EnvironmentOverride)
}
if len(cfg.SubnetAllowlist) != 1 || cfg.SubnetAllowlist[0] != "192.168.1.0/24" {
t.Errorf("SubnetAllowlist = %v, want ['192.168.1.0/24']", cfg.SubnetAllowlist)
}
if cfg.MaxHostsPerScan != 100 {
t.Errorf("MaxHostsPerScan = %d, want 100", cfg.MaxHostsPerScan)
}
}
func TestDiscoveryConfigUnmarshalJSON_LegacyFields(t *testing.T) {
var cfg DiscoveryConfig
data := `{
"environmentOverride": "lxc_privileged",
"subnetAllowlist": ["172.16.0.0/12"],
"maxHostsPerScan": 50,
"enableReverseDns": false
}`
err := cfg.UnmarshalJSON([]byte(data))
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if cfg.EnvironmentOverride != "lxc_privileged" {
t.Errorf("EnvironmentOverride = %q, want 'lxc_privileged'", cfg.EnvironmentOverride)
}
if len(cfg.SubnetAllowlist) != 1 || cfg.SubnetAllowlist[0] != "172.16.0.0/12" {
t.Errorf("SubnetAllowlist = %v, want ['172.16.0.0/12']", cfg.SubnetAllowlist)
}
if cfg.MaxHostsPerScan != 50 {
t.Errorf("MaxHostsPerScan = %d, want 50", cfg.MaxHostsPerScan)
}
}
func TestDiscoveryConfigUnmarshalJSON_EmptyObject(t *testing.T) {
var cfg DiscoveryConfig
err := cfg.UnmarshalJSON([]byte(`{}`))
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
// Should get defaults
defaults := DefaultDiscoveryConfig()
if cfg.MaxHostsPerScan != defaults.MaxHostsPerScan {
t.Errorf("MaxHostsPerScan = %d, want default %d", cfg.MaxHostsPerScan, defaults.MaxHostsPerScan)
}
}