package catalogue import ( "testing" ) func sharingShelf() map[string]Manifest { return shelf( Manifest{Module: "downloader", Version: "1", Provides: []Offer{{Name: "downloader-api", Scope: ScopeMesh, Credential: &OfferCredential{Own: "password"}}}, OwnSecrets: OwnSecrets{"password": {Path: "/var/lib/mesh/downloader/password", Taken: TakenAtStart}}, Serves: map[string]map[string]any{"downloader-api": {"port": 8080, "username": "admin"}}}, Manifest{Module: "manager", Version: "1", Requires: []string{"downloader-api"}}, ) } func TestAConsumersNeedCarriesTheSharedSecretsName(t *testing.T) { // On the same machine. together, err := Resolve(sharingShelf(), []string{"downloader", "manager"}, workstation(), World{}) if err != nil { t.Fatal(err) } found := false for _, n := range together.Needs { if n.Name == "downloader-api" && n.For == "manager" { found = true if n.SharedOwn != "password" { t.Fatalf("the need on one machine does not name the shared secret: %+v", n) } } } if !found { t.Fatalf("the manager's need was not resolved: %+v", together.Needs) } // Across machines, the provider known by its module. apart, err := Resolve(sharingShelf(), []string{"manager"}, onBoth("example.tld"), World{ Offered: map[string][]Provider{"downloader-api": {{Node: "home-server", At: "home-server.internal", Module: "downloader", Serves: map[string]any{"port": 8080}}}}, }) if err != nil { t.Fatal(err) } for _, n := range apart.Needs { if n.Name == "downloader-api" && n.SharedOwn != "password" { t.Fatalf("the need across machines does not name the shared secret: %+v", n) } } }