//go:build integration package link import ( "context" "encoding/json" "strings" "testing" "time" "github.com/nats-io/nats.go" "github.com/novox/mesh-controller/internal/testbus" ) func TestAHandlerThatPanicsAnswersAnError(t *testing.T) { conn, err := nats.Connect(testbus.URL(t)) if err != nil { t.Fatal(err) } defer conn.Close() stop, err := OverNATS{Conn: conn}.ServeSeatTools("panicky", map[string]ToolHandler{ "boom": func(context.Context, json.RawMessage) (any, error) { panic("nil map") }, "fine": func(context.Context, json.RawMessage) (any, error) { return "ok", nil }, }, nil) if err != nil { t.Fatal(err) } defer stop() answer, err := AskMeshSeatTool(context.Background(), conn, "panicky", "boom", map[string]any{}, 5*time.Second) if err != nil || !strings.Contains(answer.Error, "failed inside the controller") { t.Fatalf("a panic answered %+v (%v)", answer, err) } answer, err = AskMeshSeatTool(context.Background(), conn, "panicky", "fine", map[string]any{}, 5*time.Second) if err != nil || answer.Error != "" { t.Fatalf("the call after a panic answered %+v (%v)", answer, err) } }