test: fix manifest e2e test assumption

fix an assumption in the test, that the --compression-format is
unchanged from the original image.

Instead validate that all the required architectures are part of the
manifest.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
This commit is contained in:
Giuseppe Scrivano 2024-02-29 15:40:20 +01:00
parent 8377483145
commit c50826cea9
No known key found for this signature in database
GPG Key ID: 67E38F7A8BA21772
1 changed files with 33 additions and 26 deletions

View File

@ -16,6 +16,35 @@ import (
imgspecv1 "github.com/opencontainers/image-spec/specs-go/v1" imgspecv1 "github.com/opencontainers/image-spec/specs-go/v1"
) )
// validateManifestHasAllArchs checks that the specified manifest has all
// the archs in `imageList`
func validateManifestHasAllArchs(path string) error {
data, err := os.ReadFile(path)
if err != nil {
return err
}
var result struct {
Manifests []struct {
Platform struct {
Architecture string
}
}
}
if err := json.Unmarshal(data, &result); err != nil {
return err
}
archs := map[string]bool{
"amd64": false,
"arm64": false,
"ppc64le": false,
"s390x": false,
}
for _, m := range result.Manifests {
archs[m.Platform.Architecture] = true
}
return nil
}
// Internal function to verify instance compression // Internal function to verify instance compression
func verifyInstanceCompression(descriptor []imgspecv1.Descriptor, compression string, arch string) bool { func verifyInstanceCompression(descriptor []imgspecv1.Descriptor, compression string, arch string) bool {
for _, instance := range descriptor { for _, instance := range descriptor {
@ -419,19 +448,8 @@ add_compression = ["zstd"]`), 0o644)
session.WaitWithDefaultTimeout() session.WaitWithDefaultTimeout()
Expect(session).Should(ExitCleanly()) Expect(session).Should(ExitCleanly())
files, err := filepath.Glob(dest + string(os.PathSeparator) + "*") err = validateManifestHasAllArchs(filepath.Join(dest, "manifest.json"))
Expect(err).ShouldNot(HaveOccurred()) Expect(err).ToNot(HaveOccurred())
check := SystemExec("sha256sum", files)
check.WaitWithDefaultTimeout()
Expect(check).Should(ExitCleanly())
prefix := "sha256:"
Expect(check.OutputToString()).To(
And(
ContainSubstring(strings.TrimPrefix(imageListAMD64InstanceDigest, prefix)),
ContainSubstring(strings.TrimPrefix(imageListPPC64LEInstanceDigest, prefix)),
ContainSubstring(strings.TrimPrefix(imageListS390XInstanceDigest, prefix)),
ContainSubstring(strings.TrimPrefix(imageListARM64InstanceDigest, prefix)),
))
}) })
It("push", func() { It("push", func() {
@ -451,20 +469,9 @@ add_compression = ["zstd"]`), 0o644)
session = podmanTest.Podman([]string{"push", "-q", "foo", "dir:" + dest}) session = podmanTest.Podman([]string{"push", "-q", "foo", "dir:" + dest})
session.WaitWithDefaultTimeout() session.WaitWithDefaultTimeout()
Expect(session).Should(ExitCleanly()) Expect(session).Should(ExitCleanly())
files, err := filepath.Glob(dest + string(os.PathSeparator) + "*")
Expect(err).ToNot(HaveOccurred())
check := SystemExec("sha256sum", files)
check.WaitWithDefaultTimeout()
Expect(check).Should(ExitCleanly())
prefix := "sha256:" err = validateManifestHasAllArchs(filepath.Join(dest, "manifest.json"))
Expect(check.OutputToString()).To( Expect(err).ToNot(HaveOccurred())
And(
ContainSubstring(strings.TrimPrefix(imageListAMD64InstanceDigest, prefix)),
ContainSubstring(strings.TrimPrefix(imageListPPC64LEInstanceDigest, prefix)),
ContainSubstring(strings.TrimPrefix(imageListS390XInstanceDigest, prefix)),
ContainSubstring(strings.TrimPrefix(imageListARM64InstanceDigest, prefix)),
))
}) })
It("push with compression-format and compression-level", func() { It("push with compression-format and compression-level", func() {