77 lines
2.8 KiB
Go
77 lines
2.8 KiB
Go
package build
|
|
|
|
import (
|
|
"errors"
|
|
"git.novox.be/novox/mesh-sdk/go/delivery/buildrun"
|
|
"strings"
|
|
"testing"
|
|
|
|
"git.novox.be/novox/mesh-sdk/go/catalogue"
|
|
)
|
|
|
|
// manifestOf is a manifest holding these artifacts: the plan reads only their name, kind and language.
|
|
func manifestOf(artifacts ...catalogue.Artifact) catalogue.Manifest {
|
|
return catalogue.Manifest{Module: "m", Build: &catalogue.Build{Artifacts: artifacts}}
|
|
}
|
|
|
|
func TestPlanRoutesEachKindToItsBuildModule(t *testing.T) { // 1607/AC2
|
|
m := manifestOf(
|
|
catalogue.Artifact{Name: "tool", Kind: "bundle", Language: "go"},
|
|
catalogue.Artifact{Name: "web", Kind: "bundle", Language: "typescript"},
|
|
catalogue.Artifact{Name: "files", Kind: "archive"})
|
|
p, err := PlanOf(m)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
want := []Task{
|
|
{Artifact: "files", Kind: "archive", Module: buildrun.GoBuildModule, Language: "go"},
|
|
{Artifact: "tool", Kind: "bundle", Module: buildrun.GoBuildModule, Language: "go"},
|
|
{Artifact: "web", Kind: "bundle", Module: buildrun.NodeBuildModule, Language: "typescript"},
|
|
}
|
|
if len(p.Tasks) != len(want) {
|
|
t.Fatalf("tasks = %+v, want %+v", p.Tasks, want)
|
|
}
|
|
for i := range want {
|
|
if p.Tasks[i] != want[i] {
|
|
t.Errorf("task %d = %+v, want %+v", i, p.Tasks[i], want[i])
|
|
}
|
|
}
|
|
if modules := p.Modules(); len(modules) != 2 || modules[0] != buildrun.GoBuildModule || modules[1] != buildrun.NodeBuildModule {
|
|
t.Errorf("modules = %v", modules)
|
|
}
|
|
}
|
|
|
|
func TestPlanRefusesImageUpstreamAndPackageByName(t *testing.T) { // 1607/AC2, ADR 0478 clause 2
|
|
for _, c := range []struct {
|
|
artifact catalogue.Artifact
|
|
kind string
|
|
}{
|
|
{catalogue.Artifact{Name: "img", Kind: "image"}, "image"},
|
|
{catalogue.Artifact{Name: "up", Kind: "upstream"}, "upstream"},
|
|
{catalogue.Artifact{Name: "pkg", Kind: "package", Language: "typescript"}, "package"},
|
|
} {
|
|
m := manifestOf(catalogue.Artifact{Name: "ok", Kind: "archive"}, c.artifact)
|
|
p, err := PlanOf(m)
|
|
if err == nil {
|
|
t.Errorf("%s: plan %+v, want a refusal", c.kind, p)
|
|
continue
|
|
}
|
|
var r *Refused
|
|
if !asRefused(err, &r) || !strings.HasPrefix(err.Error(), RefusedPrefix) || !strings.Contains(err.Error(), c.kind) || !strings.Contains(err.Error(), "build-agent") {
|
|
t.Errorf("%s: error = %v, want it to open %q and name the kind and build-agent", c.kind, err, RefusedPrefix)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestPlanRefusesABundleOfAnotherLanguageAndAModuleWithNoArtifact(t *testing.T) {
|
|
if _, err := PlanOf(manifestOf(catalogue.Artifact{Name: "x", Kind: "bundle", Language: "python"})); err == nil || !strings.HasPrefix(err.Error(), RefusedPrefix) {
|
|
t.Errorf("a python bundle: error = %v, want a refusal", err)
|
|
}
|
|
p, err := PlanOf(manifestOf())
|
|
if err != nil || len(p.Tasks) != 0 {
|
|
t.Errorf("no artifact: plan %+v error %v, want an empty plan", p, err)
|
|
}
|
|
}
|
|
|
|
func asRefused(err error, target **Refused) bool { return errors.As(err, target) }
|