Files
mesh-controller/internal/broker/composed_test.go
T
jschoubben aee0a2718f Write each module's composition per node, signed, with its digest and the move's judgement beside it (issue 1945, B1)
Every act that sent a declaration now writes compositions instead, by compare-and-set under the lease, and a
module's compositions are kept for its five newest fingerprints and whatever its want or have names (ADR 0539
clauses 1 to 5 and 14). A module the mesh provides itself, which no want can name, rides in the node's own.
2026-10-24 16:54:11 +02:00

50 lines
1.7 KiB
Go

package broker
import (
"strings"
"testing"
"git.novox.be/novox/mesh-sdk/go/delivery"
)
// 1945/AC1: a node's composition bucket keeps five revisions of a key and is named for its node; the bucket of digests
// likewise; a node name a subject would widen is refused.
func TestTheCompositionBuckets(t *testing.T) {
cfg, err := ComposedConfig("ace")
if err != nil || cfg.Bucket != "composed-ace" || cfg.History != 5 {
t.Fatalf("ComposedConfig(ace) = %+v, %v", cfg, err)
}
if d := ComposedDigestsConfig(); d.Bucket != delivery.ControllerComposedBucket || d.History != 5 {
t.Errorf("ComposedDigestsConfig = %+v", d)
}
if _, err := ComposedConfig("a.b"); err == nil {
t.Errorf("a dotted node got a bucket")
}
}
// 1945/AC1: a node-engine reads its own compositions and its own wants and nothing of another node's, nor the digests;
// the controller writes a node's bucket by its own subjects.
func TestANodeReadsOnlyItsOwnCompositions(t *testing.T) {
reads, err := ComposedReads("ace")
if err != nil {
t.Fatal(err)
}
all := strings.Join(reads, " ")
for _, want := range []string{"KV_composed-ace", "$KV.mesh-delivery-assigner_wants.want.ace.>"} {
if !strings.Contains(all, want) {
t.Errorf("a node-engine of ace cannot reach %s: %v", want, reads)
}
}
for _, never := range []string{"composed-g14", delivery.ControllerComposedBucket, "$KV.composed-ace", "want.*", "want.>"} {
if strings.Contains(all, never) {
t.Errorf("a node-engine of ace is granted %s: %v", never, reads)
}
}
if w, err := ComposedWrites("ace"); err != nil || w != "$KV.composed-ace.>" {
t.Errorf("ComposedWrites(ace) = %q, %v", w, err)
}
if _, err := ComposedReads("a*"); err == nil {
t.Errorf("a node name with a wildcard was granted")
}
}