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") } }