Files
mesh-controller/cmd/mesh-controller/switch_list_test.go
T

47 lines
2.5 KiB
Go

package main
import (
"strings"
"testing"
sdkdelivery "git.novox.be/novox/mesh-sdk/go/delivery"
"github.com/novox/mesh-controller/internal/builderkeys"
"github.com/novox/mesh-controller/internal/inventory"
)
// A13 (ADR 0453 §6; issue 1851): the switch's list names every module moved or unmoved and why: the held build's
// digests against the done key's; an image or a package as what cannot be compared; a key not done as not known.
func TestTheSwitchsListNamesWhatMovesAndWhy(t *testing.T) {
const d1, d2 = "sha256:" + "1111111111111111111111111111111111111111111111111111111111111111",
"sha256:" + "2222222222222222222222222222222222222222222222222222222222222222"
trunk := sdkdelivery.Module{FP2: "src2:" + strings.Repeat("a", 64)}
done := func(arts ...sdkdelivery.BuiltArtifact) builderkeys.Key {
return builderkeys.Key{Found: true, Fingerprint: trunk.FP2, Build: sdkdelivery.BuilderBuild{State: sdkdelivery.BuildDone,
Artifacts: arts}}
}
held := []inventory.Artifact{{Name: "tools", Kind: "bundle", Reference: "artifact-store://x/tools/blobs/" + d1}}
for _, c := range []struct {
what string
held []inventory.Artifact
trunk sdkdelivery.Module
key builderkeys.Key
verdict string
says string
}{
{"the same digest", held, trunk, done(sdkdelivery.BuiltArtifact{Name: "tools", Kind: "bundle", Digest: d1}), switchUnmoved, "no move"},
{"another digest", held, trunk, done(sdkdelivery.BuiltArtifact{Name: "tools", Kind: "bundle", Digest: d2}), switchMoves, "tools 111111111111 -> 222222222222"},
{"an image", []inventory.Artifact{{Name: "img", Kind: "image", Reference: "artifact-store://x/img@" + d1}}, trunk,
done(sdkdelivery.BuiltArtifact{Name: "img", Kind: "image", Digest: d2}), switchUncompared, "img is an image"},
{"a package", []inventory.Artifact{{Name: "lib", Kind: "package", Reference: "@novox/lib@1.2.0"}}, trunk,
done(sdkdelivery.BuiltArtifact{Name: "lib", Kind: "package", Digest: d2}), switchUncompared, "published by its version"},
{"a key building", held, trunk, builderkeys.Key{Module: "x", Fingerprint: trunk.FP2, Found: true,
Build: sdkdelivery.BuilderBuild{State: sdkdelivery.BuildBuilding}}, switchUnknown, "is building"},
{"no fingerprint", held, sdkdelivery.Module{None2: "no lock"}, builderkeys.Key{}, switchUnknown, "no lock"},
} {
l := switchLineOf("x", c.held, c.trunk, c.key)
if l.Verdict != c.verdict || !strings.Contains(l.Why, c.says) {
t.Errorf("%s: %+v, want %s saying %q", c.what, l, c.verdict, c.says)
}
}
}