Files
mesh-sdk/go/process/no_serve_test.go
T
jschoubben 5fa64be894 Revert the revert of G's mesh-sdk merge (#191): G's sdk stands again over reader release 3
Main reverted G's half merge (#189, reverted by 8afc3eb in #191) and then took the reader release's S1-S5, which
copied G's code. G's form holds where they differ (process_bus.go, seats.go, state.go and their tests); the
release's kept names stay so main's callers keep building: SeatViewPrefix beside SeatReadPrefix, and QueueInvoke's
empty strings on not-ok (with its test TestQueueInvoke). The tree differs from G's head f30dee54 only by those and
the release's two tests (objects cap option, seat states and stream kinds).

Builds: design 47 G (the milestone's sdk part, as at f30dee54)

Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
2026-11-13 12:49:56 +01:00

41 lines
1.5 KiB
Go

package process
import (
"reflect"
"testing"
"github.com/nats-io/nats.go"
)
// 1171/AC3 as lead answer A-107 changes it: a process answers its seat's verbs through AnswerSeat alone — no Serve,
// Handle, Subscribe or Respond of its own — and exposes no raw connection. Checked by reflection over *Conn's whole
// method set and field list, so a later addition cannot bring one back without this test naming it.
func TestConnOffersOnlyAnswerSeatToServeAndExposesNoRawConnection(t *testing.T) {
ptrType := reflect.TypeOf(&Conn{})
if _, ok := ptrType.MethodByName("AnswerSeat"); !ok {
t.Error("*Conn has no AnswerSeat: a process answers its seat's verbs through it (A-107)")
}
for _, forbidden := range []string{"Serve", "ServeOn", "Handle", "Subscribe", "Respond", "Answer"} {
if _, ok := ptrType.MethodByName(forbidden); ok {
t.Errorf("*Conn has a method %s: a process serves only through AnswerSeat", forbidden)
}
}
natsConnType := reflect.TypeOf(&nats.Conn{})
structType := reflect.TypeOf(Conn{})
for i := 0; i < structType.NumField(); i++ {
f := structType.Field(i)
if f.IsExported() && (f.Type == natsConnType || f.Type == natsConnType.Elem()) {
t.Errorf("Conn exposes its raw connection through the exported field %s", f.Name)
}
}
for i := 0; i < ptrType.NumMethod(); i++ {
m := ptrType.Method(i)
for o := 0; o < m.Type.NumOut(); o++ {
if m.Type.Out(o) == natsConnType || m.Type.Out(o) == natsConnType.Elem() {
t.Errorf("*Conn.%s returns the raw *nats.Conn", m.Name)
}
}
}
}