39 lines
1.1 KiB
Go
39 lines
1.1 KiB
Go
//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)
|
|
}
|
|
}
|