Carry a value into the vault sealed to its call, and prove both paths of the switch (issue 675)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-14 19:07:54 +00:00
co-authored by Claude Opus 5.5
parent 234dea9d29
commit 698657176d
2 changed files with 328 additions and 0 deletions
+47
View File
@@ -0,0 +1,47 @@
package link
import (
"context"
"encoding/json"
"strings"
"testing"
"time"
"github.com/nats-io/nats.go"
"github.com/novox/mesh-controller/internal/broker"
"github.com/novox/mesh-controller/internal/testbus"
)
// A mesh seat's verb asked in the caller's own name goes on the subject that names its caller (novox/hq issue
// 365), so the holder knows who asks from the subject alone: how the vault takes a value from the controller
// and nobody else (design 57's V2, issue 675).
func TestAMeshSeatsVerbIsAskedInTheCallersOwnName(t *testing.T) {
conn, err := nats.Connect(testbus.URL(t))
if err != nil {
t.Fatal(err)
}
defer conn.Close()
heard := make(chan string, 1)
sub, err := conn.Subscribe(broker.CalledPattern(SeatToolSubject("mesh-vault", "accept")), func(m *nats.Msg) {
heard <- m.Subject
raw, _ := json.Marshal(Answer{Result: json.RawMessage(`{"call":"c1"}`)})
_ = m.Respond(raw)
})
if err != nil {
t.Fatal(err)
}
defer sub.Unsubscribe()
answer, err := AskMeshSeatToolAs(context.Background(), conn, broker.ControllerName, "mesh-vault", "accept",
map[string]any{"provider": "novox", "provision": "postgres"}, 5*time.Second)
if err != nil || string(answer.Result) != `{"call":"c1"}` {
t.Fatalf("%+v %v", answer, err)
}
subject := <-heard
if subject != "mesh.seat.mesh-vault.call.accept.controller" || !strings.HasSuffix(subject, "."+broker.ControllerName) {
t.Errorf("asked on %s", subject)
}
if _, err := AskMeshSeatToolAs(context.Background(), conn, "not a user!", "mesh-vault", "accept", nil, time.Second); err == nil {
t.Error("a caller that is no bus user was asked in")
}
}