package lexicomai import "testing" func TestParseConfig(t *testing.T) { valid := []byte(`{ "targets":[{"alias":"a","ssh":{"host":"10.0.0.1","user":"debian","key":"k"},"products":["ups"],"port":6182}], "read_only":true }`) cfg, err := ParseConfig(valid) if err != nil { t.Fatalf("ParseConfig(valid) error: %v", err) } if cfg.Default != "a" { t.Errorf("default = %q, want a", cfg.Default) } if cfg.TimeoutSeconds != DefaultTimeoutSeconds { t.Errorf("timeout default = %d, want %d", cfg.TimeoutSeconds, DefaultTimeoutSeconds) } if cfg.IsReadOnly() != true { t.Error("IsReadOnly = false, want true") } if _, err := cfg.Target("missing"); err == nil { t.Error("Target(missing) should error") } } func TestParseConfigRejectsEmptyTargets(t *testing.T) { if _, err := ParseConfig([]byte(`{"targets":[]}`)); err == nil { t.Fatal("empty targets should be rejected (fail-closed)") } } func TestParseConfigRejectsMissingHost(t *testing.T) { bad := []byte(`{"targets":[{"alias":"a","ssh":{"user":"debian"}}]}`) if _, err := ParseConfig(bad); err == nil { t.Fatal("missing ssh.host should be rejected") } } func TestTargetHasProductAndAddr(t *testing.T) { tg := &Target{Alias: "a", SSH: SSHTarget{Host: "10.0.0.1", User: "debian", Port: 22}, Products: []string{"ups", "spr"}} if !tg.HasProduct("ups") { t.Error("HasProduct(ups) = false") } if tg.HasProduct("ses") { t.Error("HasProduct(ses) = true, want false") } if got := tg.SSHAddr(); got != "debian@10.0.0.1" { t.Errorf("SSHAddr = %q", got) } }