package diag import ( "encoding/json" "strings" "testing" ) func TestSchemaStrict(t *testing.T) { e := Enums{Labels: DefaultLabels, Actions: DefaultActions} s := e.Schema() if s["additionalProperties"] != false { t.Fatal("additionalProperties must be false") } props := s["properties"].(map[string]any) req := s["required"].([]string) if len(props) != len(req) { t.Fatalf("strict mode: every property must be required (%d props, %d required)", len(props), len(req)) } if _, err := json.Marshal(s); err != nil { t.Fatal(err) } } func TestParseValidate(t *testing.T) { e := Enums{Labels: DefaultLabels, Actions: DefaultActions} good := `{"root_cause_label":"api_pod_killed","confidence":0.9,"evidence":["pods: api-xyz restarts=3"],"proposed_action":"k8s.rollout_restart","target":"demo/api","rationale":"restart loop"}` d, err := Parse(good, e) if err != nil { t.Fatal(err) } if d.ProposedAction != "k8s.rollout_restart" { t.Fatal("wrong action") } bad := []string{ `{"root_cause_label":"nope","confidence":0.9,"evidence":["x"],"proposed_action":"none","target":"","rationale":"r"}`, `{"root_cause_label":"unknown","confidence":1.5,"evidence":["x"],"proposed_action":"none","target":"","rationale":"r"}`, `{"root_cause_label":"unknown","confidence":0.5,"evidence":[],"proposed_action":"none","target":"","rationale":"r"}`, `{"root_cause_label":"unknown","confidence":0.5,"evidence":["x"],"proposed_action":"db.promote","target":"","rationale":"r"}`, `{"root_cause_label":"unknown","confidence":0.5,"evidence":["x"],"proposed_action":"none","target":"","rationale":"` + strings.Repeat("a", 201) + `"}`, `{"root_cause_label":"unknown","confidence":0.5,"evidence":["x"],"proposed_action":"none","target":"","rationale":"r","extra":1}`, } for i, b := range bad { if _, err := Parse(b, e); err == nil { t.Fatalf("case %d should fail", i) } } }