debian-forge-composer/internal/container/resolver_test.go
Ondřej Budai b997142db0 common: merge all *ToPtr methods to one generic ToPtr
After introducing Go 1.18 to a project, it's required by law to convert at
least one method to a generic one.

Everyone hates IntToPtr, StringToPtr, BoolToPtr and Uint64ToPtr, so let's
convert them to the ultimate generic ToPtr one.

Signed-off-by: Ondřej Budai <ondrej@budai.cz>
2023-01-09 14:03:18 +01:00

85 lines
1.8 KiB
Go

package container_test
import (
"fmt"
"sort"
"testing"
"time"
"github.com/stretchr/testify/assert"
"github.com/osbuild/osbuild-composer/internal/common"
"github.com/osbuild/osbuild-composer/internal/container"
)
type lessCompare func(i, j int) bool
func makeSpecSorter(specs []container.Spec) lessCompare {
return func(i, j int) bool {
return specs[i].Digest < specs[j].Digest
}
}
func TestResolver(t *testing.T) {
registry := NewTestRegistry()
defer registry.Close()
repo := registry.AddRepo("library/osbuild")
ref := registry.GetRef("library/osbuild")
refs := make([]string, 10)
for i := 0; i < len(refs); i++ {
checksum := repo.AddImage(
[]Blob{NewDataBlobFromBase64(rootLayer)},
[]string{"amd64", "ppc64le"},
fmt.Sprintf("image %d", i),
time.Time{})
tag := fmt.Sprintf("%d", i)
repo.AddTag(checksum, tag)
refs[i] = fmt.Sprintf("%s:%s", ref, tag)
}
resolver := container.NewResolver("amd64")
for _, r := range refs {
resolver.Add(r, "", common.ToPtr(false))
}
have, err := resolver.Finish()
assert.NoError(t, err)
assert.NotNil(t, have)
assert.Len(t, have, len(refs))
want := make([]container.Spec, len(refs))
for i, r := range refs {
spec, err := registry.Resolve(r, "amd64")
assert.NoError(t, err)
want[i] = spec
}
sort.Slice(have, makeSpecSorter(have))
sort.Slice(want, makeSpecSorter(want))
assert.ElementsMatch(t, have, want)
}
func TestResolverFail(t *testing.T) {
resolver := container.NewResolver("amd64")
resolver.Add("invalid-reference@${IMAGE_DIGEST}", "", common.ToPtr(false))
specs, err := resolver.Finish()
assert.Error(t, err)
assert.Len(t, specs, 0)
registry := NewTestRegistry()
defer registry.Close()
resolver.Add(registry.GetRef("repo"), "", common.ToPtr(false))
specs, err = resolver.Finish()
assert.Error(t, err)
assert.Len(t, specs, 0)
}