65 lines
2.0 KiB
Go
65 lines
2.0 KiB
Go
package main
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"reflect"
|
|
"testing"
|
|
)
|
|
|
|
func catalogue(t *testing.T, manifests map[string]string) string {
|
|
t.Helper()
|
|
root := t.TempDir()
|
|
for name, body := range manifests {
|
|
dir := filepath.Join(root, "modules", name)
|
|
if err := os.MkdirAll(dir, 0o755); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := os.WriteFile(filepath.Join(dir, "module.json"), []byte(body), 0o644); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
return root
|
|
}
|
|
|
|
func TestOnlyTheOwnerDeclaresAToolchainPackage(t *testing.T) {
|
|
root := catalogue(t, map[string]string{
|
|
"go": `{"module":"go","resources":[{"id":"go","type":"package","package":"go"}]}`,
|
|
"nodejs": `{"module":"nodejs","resources":[{"id":"nodejs","type":"package","package":"nodejs"},{"id":"npm","type":"package","package":"npm"}]}`,
|
|
"lab": `{"module":"lab","resources":[{"id":"git","type":"package","package":"git"},{"id":"go","type":"package","package":"go"}]}`,
|
|
"builder": `{"module":"builder","resources":[{"id":"n","type":"package","package":"nodejs"},{"id":"dir","type":"directory","path":"/go"}]}`,
|
|
})
|
|
got, err := Check(root)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
want := []Finding{{Module: "builder", Package: "nodejs", Owner: "nodejs"}, {Module: "lab", Package: "go", Owner: "go"}}
|
|
if !reflect.DeepEqual(got, want) {
|
|
t.Errorf("found %v, want %v", got, want)
|
|
}
|
|
}
|
|
|
|
func TestTheOwnersMustExistAndDeclareTheirPackages(t *testing.T) {
|
|
root := catalogue(t, map[string]string{
|
|
"go": `{"module":"go","resources":[]}`,
|
|
})
|
|
got, err := Check(root)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(got) != 3 {
|
|
t.Errorf("an owner missing its packages gave %v, want three findings (go, nodejs, npm)", got)
|
|
}
|
|
}
|
|
|
|
// The catalogue as it stands: this is the check itself, run here too.
|
|
func TestTheCatalogueGivesEachToolchainPackageToItsOwnerAlone(t *testing.T) {
|
|
got, err := Check("../..")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(got) != 0 {
|
|
t.Errorf("the catalogue declares a toolchain package outside its owner: %v", got)
|
|
}
|
|
}
|