package catalogue import ( "os" "strings" "testing" ) // The module holding mesh-broker is the bus, and its account is granted the bus's snapshot API and // nothing else (novox/hq ADR 0235). Anything it declared to say or hear on the bus would be granted // nothing, so it is refused at the parser rather than silently dropped. func TestTheBussAccountSaysNothingOnTheBus(t *testing.T) { raw := []byte(`{"module":"bus","version":"1","provides":[{"name":"mesh-bus","scope":"mesh"}], "claims":[{"name":"mesh-broker","scope":"mesh"}],"own-secrets":{"broker":"/run/broker"}, "emits":["something.happened"]}`) _, err := ParseManifest(raw) if err == nil || !strings.Contains(err.Error(), "granted the bus's snapshot API and nothing else") { t.Fatalf("a bus module declaring what it emits was not refused, or not for the reason: %v", err) } quiet := []byte(`{"module":"bus","version":"1","provides":[{"name":"mesh-bus","scope":"mesh"}], "claims":[{"name":"mesh-broker","scope":"mesh"}],"own-secrets":{"broker":"/run/broker"}, "tools":["bus_streams"]}`) m, err := ParseManifest(quiet) if err != nil { t.Fatalf("a bus module with an account and tools was refused: %v", err) } if !m.ClaimsSeat(BrokerSeat) { t.Fatal("it does not read as holding the broker seat") } } // The catalogue's bus protects its streams by the snapshot, not as live files: its streams' item is a // dump into its snapshots, it has the account the dump runs as, and the dump runs the snapshot // program in the bus's own container. func TestTheCataloguesBusIsBackedUpBySnapshot(t *testing.T) { raw, err := os.ReadFile("../../../mesh-catalog/modules/nats/module.json") if err != nil { t.Skip("the catalogue is not checked out beside this repository") } m, err := ParseManifest(raw) if err != nil { t.Fatal(err) } if _, account := m.OwnSecrets["broker"]; !account { t.Fatal("the bus declares no account, so its snapshot could not reach it") } var found bool if m.Data == nil { t.Fatal("the bus declares no data") } for _, it := range m.Data.Own { if it.ID != "jetstream" { continue } found = true if !it.Backup.IsDump() || it.Backup.Into != "snapshots" { t.Fatalf("the bus's streams are protected by %+v, not a snapshot into its snapshots", it.Backup) } if !strings.Contains(it.Backup.Dump, "mesh-nats-snapshot snapshot") { t.Fatalf("the dump does not run the snapshot program: %s", it.Backup.Dump) } } if !found { t.Fatal("the bus declares no item for its streams") } }