Add test for ocispec.Descriptor Annotations

Make sure that Annotations we write into ocispec.Descriptors are
written into the store and can be read back.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
This commit is contained in:
Stefan Berger 2019-03-06 16:12:18 -05:00 committed by Stefan Berger
parent 0b711d616a
commit 79248fea2b

View File

@ -23,6 +23,7 @@ import (
"io/ioutil" "io/ioutil"
"math/rand" "math/rand"
"reflect"
"runtime" "runtime"
"testing" "testing"
@ -94,11 +95,11 @@ func TestImport(t *testing.T) {
c1, d2 := createConfig() c1, d2 := createConfig()
m1, d3 := createManifest(c1, [][]byte{b1}) m1, d3, expManifest := createManifest(c1, [][]byte{b1})
provider := client.ContentStore() provider := client.ContentStore()
checkManifest := func(ctx context.Context, t *testing.T, d ocispec.Descriptor) { checkManifest := func(ctx context.Context, t *testing.T, d ocispec.Descriptor, expManifest *ocispec.Manifest) {
m, err := images.Manifest(ctx, provider, d, nil) m, err := images.Manifest(ctx, provider, d, nil)
if err != nil { if err != nil {
t.Fatalf("unable to read target blob: %+v", err) t.Fatalf("unable to read target blob: %+v", err)
@ -115,6 +116,15 @@ func TestImport(t *testing.T) {
if m.Layers[0].Digest != d1 { if m.Layers[0].Digest != d1 {
t.Fatalf("unexpected layer hash %s, expected %s", m.Layers[0].Digest, d1) t.Fatalf("unexpected layer hash %s, expected %s", m.Layers[0].Digest, d1)
} }
if expManifest != nil {
if !reflect.DeepEqual(m.Layers, expManifest.Layers) {
t.Fatalf("DeepEqual on Layers failed: %v vs. %v", m.Layers, expManifest.Layers)
}
if !reflect.DeepEqual(m.Config, expManifest.Config) {
t.Fatalf("DeepEqual on Config failed: %v vs. %v", m.Config, expManifest.Config)
}
}
} }
for _, tc := range []struct { for _, tc := range []struct {
@ -154,7 +164,7 @@ func TestImport(t *testing.T) {
} }
checkImages(t, imgs[0].Target.Digest, imgs, names...) checkImages(t, imgs[0].Target.Digest, imgs, names...)
checkManifest(ctx, t, imgs[0].Target) checkManifest(ctx, t, imgs[0].Target, nil)
}, },
}, },
{ {
@ -181,7 +191,7 @@ func TestImport(t *testing.T) {
} }
checkImages(t, d3, imgs, names...) checkImages(t, d3, imgs, names...)
checkManifest(ctx, t, imgs[0].Target) checkManifest(ctx, t, imgs[0].Target, expManifest)
}, },
}, },
{ {
@ -202,7 +212,7 @@ func TestImport(t *testing.T) {
} }
checkImages(t, d3, imgs, names...) checkImages(t, d3, imgs, names...)
checkManifest(ctx, t, imgs[0].Target) checkManifest(ctx, t, imgs[0].Target, expManifest)
}, },
Opts: []ImportOpt{ Opts: []ImportOpt{
WithImageRefTranslator(archive.AddRefPrefix("localhost:5000/myimage")), WithImageRefTranslator(archive.AddRefPrefix("localhost:5000/myimage")),
@ -226,7 +236,7 @@ func TestImport(t *testing.T) {
} }
checkImages(t, d3, imgs, names...) checkImages(t, d3, imgs, names...)
checkManifest(ctx, t, imgs[0].Target) checkManifest(ctx, t, imgs[0].Target, expManifest)
}, },
Opts: []ImportOpt{ Opts: []ImportOpt{
WithImageRefTranslator(archive.FilterRefPrefix("localhost:5000/myimage")), WithImageRefTranslator(archive.FilterRefPrefix("localhost:5000/myimage")),
@ -288,7 +298,7 @@ func createConfig() ([]byte, digest.Digest) {
return b, digest.FromBytes(b) return b, digest.FromBytes(b)
} }
func createManifest(config []byte, layers [][]byte) ([]byte, digest.Digest) { func createManifest(config []byte, layers [][]byte) ([]byte, digest.Digest, *ocispec.Manifest) {
manifest := ocispec.Manifest{ manifest := ocispec.Manifest{
Versioned: specs.Versioned{ Versioned: specs.Versioned{
SchemaVersion: 2, SchemaVersion: 2,
@ -297,6 +307,9 @@ func createManifest(config []byte, layers [][]byte) ([]byte, digest.Digest) {
MediaType: ocispec.MediaTypeImageConfig, MediaType: ocispec.MediaTypeImageConfig,
Digest: digest.FromBytes(config), Digest: digest.FromBytes(config),
Size: int64(len(config)), Size: int64(len(config)),
Annotations: map[string]string{
"ocispec": "manifest.config.descriptor",
},
}, },
} }
for _, l := range layers { for _, l := range layers {
@ -304,12 +317,15 @@ func createManifest(config []byte, layers [][]byte) ([]byte, digest.Digest) {
MediaType: ocispec.MediaTypeImageLayer, MediaType: ocispec.MediaTypeImageLayer,
Digest: digest.FromBytes(l), Digest: digest.FromBytes(l),
Size: int64(len(l)), Size: int64(len(l)),
Annotations: map[string]string{
"ocispec": "manifest.layers.descriptor",
},
}) })
} }
b, _ := json.Marshal(manifest) b, _ := json.Marshal(manifest)
return b, digest.FromBytes(b) return b, digest.FromBytes(b), &manifest
} }
func createIndex(manifest []byte, tags ...string) []byte { func createIndex(manifest []byte, tags ...string) []byte {