Split the unit level from the integration level in cmd, builder, link, catalogue, inventory; cheap fixtures for the archive-entry bound, the registry waits and the catalogue copy (issue 895)
This commit is contained in:
@@ -160,26 +160,6 @@ func (f *fakeStore) seen() []string {
|
||||
return slices.Clone(f.requests)
|
||||
}
|
||||
|
||||
func TestADryRunCollectAsksOnlyAndChangesNothing(t *testing.T) {
|
||||
f := &fakeStore{}
|
||||
store := f.serve(t)
|
||||
kept := []string{archiveRef("web", "tools", 1)}
|
||||
eligible := []string{ref("web", "app", 2), archiveRef("web", "tools", 3)}
|
||||
a := runCollect(context.Background(), nil, store, eligible, kept, false,
|
||||
sweepBounds{most: 10, budget: 5 * time.Second})
|
||||
if !a.DryRun || a.Eligible != 2 || !slices.Equal(a.WouldLetGo, eligible) || len(a.LetGo) != 0 {
|
||||
t.Errorf("a dry run answered %+v", a)
|
||||
}
|
||||
if a.KeptArchives != 1 || a.Held != 0 || a.Unheld != 1 {
|
||||
t.Errorf("the kept archive is unheld in the fake store, and was said as %+v", a)
|
||||
}
|
||||
for _, r := range f.seen() {
|
||||
if !strings.HasPrefix(r, "HEAD ") {
|
||||
t.Errorf("a dry run asked the store %s", r)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestCollectSaysWhatItDoesNotListAndWithNoStoreAsksNothing(t *testing.T) {
|
||||
var many []string
|
||||
for i := range mostListed + 5 {
|
||||
@@ -192,36 +172,6 @@ func TestCollectSaysWhatItDoesNotListAndWithNoStoreAsksNothing(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestARealCollectHoldsEveryKeptArchiveBeforeItLetsAnythingGo(t *testing.T) {
|
||||
inv := inventory.ForTest(t)
|
||||
f := &fakeStore{}
|
||||
store := f.serve(t)
|
||||
kept := []string{archiveRef("web", "tools", 1)}
|
||||
eligible := []string{ref("web", "app", 2), ref("web", "app", 3), ref("web", "app", 4)}
|
||||
madeBy(t, inv, eligible)
|
||||
a := runCollect(t.Context(), inv, store, eligible, kept, true, sweepBounds{most: 2, budget: 5 * time.Second})
|
||||
if a.DryRun || a.HoldersWritten != 1 || a.Held != 1 {
|
||||
t.Errorf("the kept archive was not held first: %+v", a)
|
||||
}
|
||||
if !slices.Equal(a.LetGo, eligible[:2]) || a.Left != 1 || a.Stopped == "" {
|
||||
t.Errorf("bounded at two: let go %v, left %d, stopped %q", a.LetGo, a.Left, a.Stopped)
|
||||
}
|
||||
requests := f.seen()
|
||||
firstPut := slices.IndexFunc(requests, func(r string) bool { return strings.HasPrefix(r, "PUT ") && strings.Contains(r, "/manifests/") })
|
||||
firstDelete := slices.IndexFunc(requests, func(r string) bool { return strings.HasPrefix(r, "DELETE ") })
|
||||
if firstPut < 0 || firstDelete < 0 || firstPut > firstDelete {
|
||||
t.Errorf("the holder was not put before the first delete: %v", requests)
|
||||
}
|
||||
// What was let go is recorded collected: the sweep no longer offers it.
|
||||
left, err := inv.ToCollect(t.Context())
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if !slices.Equal(left, eligible[2:]) {
|
||||
t.Errorf("after letting go of two, the records offer %v", left)
|
||||
}
|
||||
}
|
||||
|
||||
// madeBy records one successful build, of a module the mesh does not hold, that made these images:
|
||||
// eligible, every one.
|
||||
func madeBy(t *testing.T, inv *inventory.Inventory, references []string) {
|
||||
@@ -236,17 +186,6 @@ func madeBy(t *testing.T, inv *inventory.Inventory, references []string) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestARealCollectStopsAtTheStoresFirstRefusal(t *testing.T) {
|
||||
inv := inventory.ForTest(t)
|
||||
f := &fakeStore{refuse: fmt.Sprintf("%064x", 3)}
|
||||
store := f.serve(t)
|
||||
eligible := []string{ref("web", "app", 2), ref("web", "app", 3), ref("web", "app", 4)}
|
||||
a := runCollect(t.Context(), inv, store, eligible, nil, true, sweepBounds{most: 10, budget: 5 * time.Second})
|
||||
if !slices.Equal(a.LetGo, eligible[:1]) || a.Left != 2 || !strings.Contains(a.Stopped, "kept") {
|
||||
t.Errorf("after a refusal: let go %v, left %d, stopped %q", a.LetGo, a.Left, a.Stopped)
|
||||
}
|
||||
}
|
||||
|
||||
func TestImagesAreEveryContainerImageOfTheDeclarationAndOfWhatWasSent(t *testing.T) {
|
||||
body := []byte(`{"declaration":1,"resources":[
|
||||
{"id":"web.server","type":"container","image":"store.invalid/web/server@sha256:aa"},
|
||||
|
||||
Reference in New Issue
Block a user