SD-M2b sdk: a seat's event family may name its own subject token
The lead's ruling of 12:5x (design 25 § 12.3): mesh-broker's events ride the bus module's own stream, 30 days, on mesh.seat.mesh-broker.said.<event>, outside the shared events stream's mesh.seat.*.event.>, so the bus never refuses the two as overlapping. Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
This commit is contained in:
@@ -1,8 +1,10 @@
|
||||
package buscompose
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"git.novox.be/novox/mesh-contracts/go/seats/meshbroker"
|
||||
"git.novox.be/novox/mesh-sdk/go/membership"
|
||||
)
|
||||
|
||||
@@ -32,4 +34,27 @@ func TestTheBusNamesAgree(t *testing.T) {
|
||||
if err := ledger.Valid(); err != nil || ledger.OwnSecret() != "ledgers" {
|
||||
t.Fatalf("a wanted ledger account: %v, held in %q", err, ledger.OwnSecret())
|
||||
}
|
||||
// mesh-broker's events are the bus module's own stream (design 25 § 12.3, 30 days): no subject of the shared
|
||||
// streams may take them, or the bus refuses the two streams as overlapping.
|
||||
for _, st := range MeshStreams() {
|
||||
for _, pattern := range st.Subjects {
|
||||
if subjectTakes(pattern, meshbroker.SubjectCreated) {
|
||||
t.Errorf("the stream %s takes mesh-broker's %s by %s", st.Name, meshbroker.SubjectCreated, pattern)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// subjectTakes says whether a subject pattern (`*` one token, `>` the rest) takes a subject.
|
||||
func subjectTakes(pattern, subject string) bool {
|
||||
p, s := strings.Split(pattern, "."), strings.Split(subject, ".")
|
||||
for i, tok := range p {
|
||||
switch {
|
||||
case tok == ">":
|
||||
return len(s) > i
|
||||
case i >= len(s) || (tok != "*" && tok != s[i]):
|
||||
return false
|
||||
}
|
||||
}
|
||||
return len(p) == len(s)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user