package manifest import ( "os" "reflect" "slices" "testing" "git.novox.be/novox/mesh-sdk/go/catalogue" ) func load(t *testing.T) catalogue.Manifest { t.Helper() raw, err := os.ReadFile("module.json") if err != nil { t.Fatal(err) } m, err := catalogue.ParseManifest(raw) if err != nil { t.Fatalf("mesh-sdk's manifest reader refuses the manifest: %v", err) } return m } // 1297/B2a: the controller's reader (mesh-sdk catalogue, which the controller reads manifests with) takes the // manifest; it reads exactly the buckets the assigner opens (the program's list, held equal in its own test), keeps // its three states, and holds a credential of its own. func TestManifest(t *testing.T) { m := load(t) if m.Module != "mesh-delivery-assigner" { t.Errorf("module = %q", m.Module) } reads := slices.Clone(m.Reads) slices.Sort(reads) want := []string{"mesh-build-go.steps", "mesh-controller.assignments", "mesh-controller.builds", "mesh-controller.grants", "mesh-delivery-builder.builds", "mesh-delivery-indexer.candidates", "mesh-delivery-indexer.manifests", "mesh-delivery-indexer.modules", "mesh-delivery-watchman.presence", "node-engine.have"} if !reflect.DeepEqual(reads, want) { t.Errorf("reads = %v, want exactly %v", reads, want) } states := map[string]int{} for _, s := range m.State { states[s.Name] = s.History } if want := map[string]int{"asks": 5, "compositions": 5, "differences": 64, "wants": 20}; !reflect.DeepEqual(states, want) { t.Errorf("state = %v, want %v", states, want) } if _, ok := m.OwnSecrets["broker"]; !ok || len(m.OwnSecrets) != 1 { t.Errorf("own-secrets = %v, want exactly broker (or no credential is issued)", m.OwnSecrets) } if m.SecretsOwner != "mesh-delivery-assigner" { t.Errorf("secrets-owner = %q", m.SecretsOwner) } // 1622: the assigner puts its compose asks on the Go build seat, as the checker puts its checks. if !slices.Equal(m.Uses, []string{"node-build-go"}) { t.Errorf("uses = %v, want exactly node-build-go", m.Uses) } if len(m.Claims) != 0 || len(m.Tools) != 0 || len(m.Invokes) != 0 { t.Errorf("the assigner claims, serves or calls something: claims %v, tools %v, invokes %v", m.Claims, m.Tools, m.Invokes) } }