package broker_test import ( "slices" "testing" "github.com/novox/mesh-controller/internal/broker" "github.com/novox/mesh-controller/internal/catalogue" "github.com/novox/mesh-controller/internal/link" ) // The facts the control plane states are named twice — in the grant that permits them and in the code // that states them — because `link` imports `broker` and the dependency cannot go the other way. So a // test keeps them agreeing: a subject the grant omits is refused at the moment the mesh has something // to say, and one the grant adds that nothing states is authority nobody uses. // // An external test package, because it may import both while neither imports the other. func TestTheFactsTheGrantPermitsAreTheFactsTheMeshStates(t *testing.T) { if broker.ControllerSeat != link.MeshControllerSeat { t.Fatalf("the grant is written for the %q seat and the mesh states its facts under %q", broker.ControllerSeat, link.MeshControllerSeat) } for _, event := range []string{link.KeyApplied, link.KeyRefused, link.KeyBuiltBefore} { if !slices.Contains(broker.ControllerStates, event) { t.Errorf("the mesh states %q and its account may not publish it", event) } } if len(broker.ControllerStates) != 3 { t.Errorf("the grant permits %v, which is more than the mesh states", broker.ControllerStates) } // **And the seat says it.** A seat carries the protocol of its role (novox/hq ADR 0129), so the // facts the control plane states are the seat's `emits` — which is what lets anything else declare // that it consumes them, and what the subject-agreement check reads to know they have an owner. var declared []string for _, seat := range catalogue.SeatsWithAProtocol() { if seat.Name == broker.ControllerSeat { declared = seat.Emits } } if !slices.Equal(declared, broker.ControllerStates) { t.Errorf("the %s seat emits %v and the grant permits %v", broker.ControllerSeat, declared, broker.ControllerStates) } }