package main import ( "os" "path/filepath" "strings" "testing" ) // A read of another module's state is refused here when the owner's code announces that state not readable, or not at // all (the sweep of 2026-10-30, issue 774); an owner that announces nothing from code, or lives in another repository, // is not judged. func TestFindings(t *testing.T) { const goOwner = "package main\n\nimport \"git.novox.be/novox/mesh-sdk/go/announce\"\n\n" for _, row := range []struct { name string files map[string]string want string // empty: clean }{ {"go, readable by a constant", map[string]string{ "modules/r/module.json": `{"module":"r","reads":["o.s"]}`, "modules/o/module.json": `{"module":"o"}`, "modules/o/cmd/o/main.go": goOwner + "const S = \"s\"\n\nvar _ = announce.State{Name: S, Readable: true}\n", "modules/o/cmd/o/main_test.go": goOwner + "var _ = announce.State{Name: \"s\"}\n"}, ""}, {"go, not readable", map[string]string{ "modules/r/module.json": `{"module":"r","reads":["o.s"]}`, "modules/o/module.json": `{"module":"o"}`, "modules/o/cmd/o/main.go": goOwner + "var Kept = []announce.State{{Name: \"t\", Readable: true}, {Name: \"s\"}}\n"}, "r reads o.s, which o's code announces not readable"}, {"go, a known mesh-sdk name and readers", map[string]string{ "modules/r/module.json": `{"module":"r","reads":["o.good","o.s"]}`, "modules/o/module.json": `{"module":"o"}`, "modules/o/cmd/o/main.go": goOwner + "var _ = []announce.State{{Name: health.GoodState, Readable: true}, {Name: \"s\", Readers: []string{\"r\"}}}\n"}, ""}, {"go, a name that cannot be read", map[string]string{ "modules/r/module.json": `{"module":"r","reads":["o.s"]}`, "modules/o/module.json": `{"module":"o"}`, "modules/o/cmd/o/main.go": goOwner + "var _ = announce.State{Name: other.S, Readable: true}\n"}, "the state's name other.S cannot be read"}, {"go, a state not announced", map[string]string{ "modules/r/module.json": `{"module":"r","reads":["o.s"]}`, "modules/o/module.json": `{"module":"o"}`, "modules/o/cmd/o/main.go": goOwner + "var _ = announce.State{Name: \"t\"}\n"}, "r reads o.s, which o's code does not announce"}, {"typescript, not readable", map[string]string{ "modules/r/module.json": `{"module":"r","reads":["o.bound"]}`, "modules/o/module.json": `{"module":"o"}`, "modules/o/kept.ts": `export const KEPT = [{ name: "announced" }, { name: "bound" }];`}, "r reads o.bound, which o's code announces not readable"}, {"typescript, readable", map[string]string{ "modules/r/module.json": `{"module":"r","reads":["o.bound"]}`, "modules/o/module.json": `{"module":"o"}`, "modules/o/index.ts": `await keeps([{ name: "bound", readable: true }]);`}, ""}, {"an owner that announces nothing, and one outside the catalogue", map[string]string{ "modules/r/module.json": `{"module":"r","reads":["o.s","mesh-controller.lease"]}`, "modules/o/module.json": `{"module":"o"}`, "modules/o/cmd/o/main.go": "package main\n\nvar _ = 1\n"}, ""}, } { t.Run(row.name, func(t *testing.T) { root := t.TempDir() for path, text := range row.files { p := filepath.Join(root, path) if err := os.MkdirAll(filepath.Dir(p), 0o755); err != nil { t.Fatal(err) } if err := os.WriteFile(p, []byte(text), 0o644); err != nil { t.Fatal(err) } } got, err := Findings(root) if err != nil { t.Fatal(err) } joined := strings.Join(got, "\n") if row.want == "" && len(got) != 0 || row.want != "" && !strings.Contains(joined, row.want) { t.Errorf("findings %q, want %q", joined, row.want) } }) } } // The catalogue itself: every state a module reads of another module that announces from code is announced readable. func TestTheCatalogueReadsOnlyWhatItsOwnersAnnounceReadable(t *testing.T) { got, err := Findings(filepath.Join("..", "..")) if err != nil { t.Fatal(err) } for _, f := range got { t.Error(f) } }