43 lines
1.7 KiB
Go
43 lines
1.7 KiB
Go
package main
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"git.novox.be/novox/mesh-sdk/go/catalogue"
|
|
"github.com/novox/mesh-controller/internal/inventory"
|
|
)
|
|
|
|
// A merge that rebuilds a base rebuilds what stands on it, through every layer, and nothing else
|
|
// (novox/hq issue 186): the runtime image moving means every module built on it moves too, and a
|
|
// module built on one of those moves as well.
|
|
func TestAMergeOfABaseTakesWhatStandsOnItAlong(t *testing.T) {
|
|
entry := func(name string) inventory.Entry {
|
|
return inventory.Entry{Manifest: catalogue.Manifest{Module: name}}
|
|
}
|
|
entries := []inventory.Entry{entry("mesh-tools"), entry("shop"), entry("shop-plugin"), entry("postgres"), entry("unrelated")}
|
|
against := map[string][]string{
|
|
"shop": {catalogue.ArtifactStoreScheme + "mesh-tools/runtime@sha256:a"},
|
|
"shop-plugin": {catalogue.ArtifactStoreScheme + "shop/runtime@sha256:b"},
|
|
"postgres": {catalogue.ArtifactStoreScheme + "mesh-tools/runtime@sha256:a"},
|
|
"unrelated": {catalogue.ArtifactStoreScheme + "alpine/base@sha256:c"},
|
|
}
|
|
got := dependentsOf([]inventory.Entry{entry("mesh-tools")}, entries, against)
|
|
var names []string
|
|
for _, e := range got {
|
|
names = append(names, e.Manifest.Module)
|
|
}
|
|
want := map[string]bool{"shop": true, "shop-plugin": true, "postgres": true}
|
|
if len(names) != len(want) {
|
|
t.Fatalf("rebuilt %v; wanted exactly the three that stand on the runtime, directly or through shop", names)
|
|
}
|
|
for _, n := range names {
|
|
if !want[n] {
|
|
t.Fatalf("%s was rebuilt and stands on nothing that moved (%v)", n, names)
|
|
}
|
|
}
|
|
// Nothing moved: nothing follows.
|
|
if more := dependentsOf(nil, entries, against); len(more) != 0 {
|
|
t.Fatalf("with nothing moved, %d module(s) were rebuilt", len(more))
|
|
}
|
|
}
|