forked from TrueCloudLab/distribution
Merge pull request #3807 from thaJeztah/replace_types_for_oci_step1
minor fixes and enhancements
This commit is contained in:
commit
ac302d9ce5
10 changed files with 74 additions and 74 deletions
|
@ -12,7 +12,7 @@ import (
|
||||||
v1 "github.com/opencontainers/image-spec/specs-go/v1"
|
v1 "github.com/opencontainers/image-spec/specs-go/v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
var expectedManifestListSerialization = []byte(`{
|
const expectedManifestListSerialization = `{
|
||||||
"schemaVersion": 2,
|
"schemaVersion": 2,
|
||||||
"mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
|
"mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
|
||||||
"manifests": [
|
"manifests": [
|
||||||
|
@ -38,7 +38,7 @@ var expectedManifestListSerialization = []byte(`{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}`)
|
}`
|
||||||
|
|
||||||
func makeTestManifestList(t *testing.T, mediaType string) ([]ManifestDescriptor, *DeserializedManifestList) {
|
func makeTestManifestList(t *testing.T, mediaType string) ([]ManifestDescriptor, *DeserializedManifestList) {
|
||||||
manifestDescriptors := []ManifestDescriptor{
|
manifestDescriptors := []ManifestDescriptor{
|
||||||
|
@ -85,17 +85,17 @@ func TestManifestList(t *testing.T) {
|
||||||
|
|
||||||
// Check that the canonical field is the same as json.MarshalIndent
|
// Check that the canonical field is the same as json.MarshalIndent
|
||||||
// with these parameters.
|
// with these parameters.
|
||||||
p, err := json.MarshalIndent(&deserialized.ManifestList, "", " ")
|
expected, err := json.MarshalIndent(&deserialized.ManifestList, "", " ")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("error marshaling manifest list: %v", err)
|
t.Fatalf("error marshaling manifest list: %v", err)
|
||||||
}
|
}
|
||||||
if !bytes.Equal(p, canonical) {
|
if !bytes.Equal(expected, canonical) {
|
||||||
t.Fatalf("manifest bytes not equal: %q != %q", string(canonical), string(p))
|
t.Fatalf("manifest bytes not equal:\nexpected:\n%s\nactual:\n%s\n", string(expected), string(canonical))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check that the canonical field has the expected value.
|
// Check that the canonical field has the expected value.
|
||||||
if !bytes.Equal(expectedManifestListSerialization, canonical) {
|
if !bytes.Equal([]byte(expectedManifestListSerialization), canonical) {
|
||||||
t.Fatalf("manifest bytes not equal: %q != %q", string(canonical), string(expectedManifestListSerialization))
|
t.Fatalf("manifest bytes not equal:\nexpected:\n%s\nactual:\n%s\n", expectedManifestListSerialization, string(canonical))
|
||||||
}
|
}
|
||||||
|
|
||||||
var unmarshalled DeserializedManifestList
|
var unmarshalled DeserializedManifestList
|
||||||
|
@ -136,7 +136,7 @@ func TestManifestList(t *testing.T) {
|
||||||
// Requires changes to distribution/distribution/manifest/manifestlist.ManifestList and .ManifestDescriptor
|
// Requires changes to distribution/distribution/manifest/manifestlist.ManifestList and .ManifestDescriptor
|
||||||
// and associated serialization APIs in manifestlist.go. Or split the OCI index and
|
// and associated serialization APIs in manifestlist.go. Or split the OCI index and
|
||||||
// docker manifest list implementations, which would require a lot of refactoring.
|
// docker manifest list implementations, which would require a lot of refactoring.
|
||||||
var expectedOCIImageIndexSerialization = []byte(`{
|
const expectedOCIImageIndexSerialization = `{
|
||||||
"schemaVersion": 2,
|
"schemaVersion": 2,
|
||||||
"mediaType": "application/vnd.oci.image.index.v1+json",
|
"mediaType": "application/vnd.oci.image.index.v1+json",
|
||||||
"manifests": [
|
"manifests": [
|
||||||
|
@ -177,7 +177,7 @@ var expectedOCIImageIndexSerialization = []byte(`{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}`)
|
}`
|
||||||
|
|
||||||
func makeTestOCIImageIndex(t *testing.T, mediaType string) ([]ManifestDescriptor, *DeserializedManifestList) {
|
func makeTestOCIImageIndex(t *testing.T, mediaType string) ([]ManifestDescriptor, *DeserializedManifestList) {
|
||||||
manifestDescriptors := []ManifestDescriptor{
|
manifestDescriptors := []ManifestDescriptor{
|
||||||
|
@ -234,17 +234,17 @@ func TestOCIImageIndex(t *testing.T) {
|
||||||
|
|
||||||
// Check that the canonical field is the same as json.MarshalIndent
|
// Check that the canonical field is the same as json.MarshalIndent
|
||||||
// with these parameters.
|
// with these parameters.
|
||||||
p, err := json.MarshalIndent(&deserialized.ManifestList, "", " ")
|
expected, err := json.MarshalIndent(&deserialized.ManifestList, "", " ")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("error marshaling manifest list: %v", err)
|
t.Fatalf("error marshaling manifest list: %v", err)
|
||||||
}
|
}
|
||||||
if !bytes.Equal(p, canonical) {
|
if !bytes.Equal(expected, canonical) {
|
||||||
t.Fatalf("manifest bytes not equal: %q != %q", string(canonical), string(p))
|
t.Fatalf("manifest bytes not equal:\nexpected:\n%s\nactual:\n%s\n", string(expected), string(canonical))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check that the canonical field has the expected value.
|
// Check that the canonical field has the expected value.
|
||||||
if !bytes.Equal(expectedOCIImageIndexSerialization, canonical) {
|
if !bytes.Equal([]byte(expectedOCIImageIndexSerialization), canonical) {
|
||||||
t.Fatalf("manifest bytes not equal to expected: %q != %q", string(canonical), string(expectedOCIImageIndexSerialization))
|
t.Fatalf("manifest bytes not equal:\nexpected:\n%s\nactual:\n%s\n", expectedOCIImageIndexSerialization, string(canonical))
|
||||||
}
|
}
|
||||||
|
|
||||||
var unmarshalled DeserializedManifestList
|
var unmarshalled DeserializedManifestList
|
||||||
|
|
|
@ -93,17 +93,17 @@ func (m *DeserializedManifest) UnmarshalJSON(b []byte) error {
|
||||||
copy(m.canonical, b)
|
copy(m.canonical, b)
|
||||||
|
|
||||||
// Unmarshal canonical JSON into Manifest object
|
// Unmarshal canonical JSON into Manifest object
|
||||||
var manifest Manifest
|
var mfst Manifest
|
||||||
if err := json.Unmarshal(m.canonical, &manifest); err != nil {
|
if err := json.Unmarshal(m.canonical, &mfst); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if manifest.MediaType != "" && manifest.MediaType != v1.MediaTypeImageManifest {
|
if mfst.MediaType != "" && mfst.MediaType != v1.MediaTypeImageManifest {
|
||||||
return fmt.Errorf("if present, mediaType in manifest should be '%s' not '%s'",
|
return fmt.Errorf("if present, mediaType in manifest should be '%s' not '%s'",
|
||||||
v1.MediaTypeImageManifest, manifest.MediaType)
|
v1.MediaTypeImageManifest, mfst.MediaType)
|
||||||
}
|
}
|
||||||
|
|
||||||
m.Manifest = manifest
|
m.Manifest = mfst
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,7 @@ import (
|
||||||
v1 "github.com/opencontainers/image-spec/specs-go/v1"
|
v1 "github.com/opencontainers/image-spec/specs-go/v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
var expectedManifestSerialization = []byte(`{
|
const expectedManifestSerialization = `{
|
||||||
"schemaVersion": 2,
|
"schemaVersion": 2,
|
||||||
"mediaType": "application/vnd.oci.image.manifest.v1+json",
|
"mediaType": "application/vnd.oci.image.manifest.v1+json",
|
||||||
"config": {
|
"config": {
|
||||||
|
@ -37,7 +37,7 @@ var expectedManifestSerialization = []byte(`{
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"hot": "potato"
|
"hot": "potato"
|
||||||
}
|
}
|
||||||
}`)
|
}`
|
||||||
|
|
||||||
func makeTestManifest(mediaType string) Manifest {
|
func makeTestManifest(mediaType string) Manifest {
|
||||||
return Manifest{
|
return Manifest{
|
||||||
|
@ -64,9 +64,9 @@ func makeTestManifest(mediaType string) Manifest {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestManifest(t *testing.T) {
|
func TestManifest(t *testing.T) {
|
||||||
manifest := makeTestManifest(v1.MediaTypeImageManifest)
|
mfst := makeTestManifest(v1.MediaTypeImageManifest)
|
||||||
|
|
||||||
deserialized, err := FromStruct(manifest)
|
deserialized, err := FromStruct(mfst)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("error creating DeserializedManifest: %v", err)
|
t.Fatalf("error creating DeserializedManifest: %v", err)
|
||||||
}
|
}
|
||||||
|
@ -79,17 +79,17 @@ func TestManifest(t *testing.T) {
|
||||||
|
|
||||||
// Check that the canonical field is the same as json.MarshalIndent
|
// Check that the canonical field is the same as json.MarshalIndent
|
||||||
// with these parameters.
|
// with these parameters.
|
||||||
p, err := json.MarshalIndent(&manifest, "", " ")
|
expected, err := json.MarshalIndent(&mfst, "", " ")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("error marshaling manifest: %v", err)
|
t.Fatalf("error marshaling manifest: %v", err)
|
||||||
}
|
}
|
||||||
if !bytes.Equal(p, canonical) {
|
if !bytes.Equal(expected, canonical) {
|
||||||
t.Fatalf("manifest bytes not equal: %q != %q", string(canonical), string(p))
|
t.Fatalf("manifest bytes not equal:\nexpected:\n%s\nactual:\n%s\n", string(expected), string(canonical))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check that canonical field matches expected value.
|
// Check that canonical field matches expected value.
|
||||||
if !bytes.Equal(expectedManifestSerialization, canonical) {
|
if !bytes.Equal([]byte(expectedManifestSerialization), canonical) {
|
||||||
t.Fatalf("manifest bytes not equal: %q != %q", string(canonical), string(expectedManifestSerialization))
|
t.Fatalf("manifest bytes not equal:\nexpected:\n%s\nactual:\n%s\n", expectedManifestSerialization, string(canonical))
|
||||||
}
|
}
|
||||||
|
|
||||||
var unmarshalled DeserializedManifest
|
var unmarshalled DeserializedManifest
|
||||||
|
@ -143,9 +143,9 @@ func TestManifest(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func mediaTypeTest(t *testing.T, mediaType string, shouldError bool) {
|
func mediaTypeTest(t *testing.T, mediaType string, shouldError bool) {
|
||||||
manifest := makeTestManifest(mediaType)
|
mfst := makeTestManifest(mediaType)
|
||||||
|
|
||||||
deserialized, err := FromStruct(manifest)
|
deserialized, err := FromStruct(mfst)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("error creating DeserializedManifest: %v", err)
|
t.Fatalf("error creating DeserializedManifest: %v", err)
|
||||||
}
|
}
|
||||||
|
@ -186,7 +186,7 @@ func TestMediaTypes(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestValidateManifest(t *testing.T) {
|
func TestValidateManifest(t *testing.T) {
|
||||||
manifest := Manifest{
|
mfst := Manifest{
|
||||||
Config: distribution.Descriptor{Size: 1},
|
Config: distribution.Descriptor{Size: 1},
|
||||||
Layers: []distribution.Descriptor{{Size: 2}},
|
Layers: []distribution.Descriptor{{Size: 2}},
|
||||||
}
|
}
|
||||||
|
@ -196,7 +196,7 @@ func TestValidateManifest(t *testing.T) {
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
t.Run("valid", func(t *testing.T) {
|
t.Run("valid", func(t *testing.T) {
|
||||||
b, err := json.Marshal(manifest)
|
b, err := json.Marshal(mfst)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal("unexpected error marshaling manifest", err)
|
t.Fatal("unexpected error marshaling manifest", err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -126,12 +126,12 @@ func (sm *SignedManifest) UnmarshalJSON(b []byte) error {
|
||||||
copy(sm.Canonical, bytes)
|
copy(sm.Canonical, bytes)
|
||||||
|
|
||||||
// Unmarshal canonical JSON into Manifest object
|
// Unmarshal canonical JSON into Manifest object
|
||||||
var manifest Manifest
|
var mfst Manifest
|
||||||
if err := json.Unmarshal(sm.Canonical, &manifest); err != nil {
|
if err := json.Unmarshal(sm.Canonical, &mfst); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
sm.Manifest = manifest
|
sm.Manifest = mfst
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,13 +21,13 @@ func TestManifestMarshaling(t *testing.T) {
|
||||||
|
|
||||||
// Check that the all field is the same as json.MarshalIndent with these
|
// Check that the all field is the same as json.MarshalIndent with these
|
||||||
// parameters.
|
// parameters.
|
||||||
p, err := json.MarshalIndent(env.signed, "", " ")
|
expected, err := json.MarshalIndent(env.signed, "", " ")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("error marshaling manifest: %v", err)
|
t.Fatalf("error marshaling manifest: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if !bytes.Equal(p, env.signed.all) {
|
if !bytes.Equal(expected, env.signed.all) {
|
||||||
t.Fatalf("manifest bytes not equal: %q != %q", string(env.signed.all), string(p))
|
t.Fatalf("manifest bytes not equal:\nexpected:\n%s\nactual:\n%s\n", string(expected), string(env.signed.all))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -109,17 +109,17 @@ func (m *DeserializedManifest) UnmarshalJSON(b []byte) error {
|
||||||
copy(m.canonical, b)
|
copy(m.canonical, b)
|
||||||
|
|
||||||
// Unmarshal canonical JSON into Manifest object
|
// Unmarshal canonical JSON into Manifest object
|
||||||
var manifest Manifest
|
var mfst Manifest
|
||||||
if err := json.Unmarshal(m.canonical, &manifest); err != nil {
|
if err := json.Unmarshal(m.canonical, &mfst); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if manifest.MediaType != MediaTypeManifest {
|
if mfst.MediaType != MediaTypeManifest {
|
||||||
return fmt.Errorf("mediaType in manifest should be '%s' not '%s'",
|
return fmt.Errorf("mediaType in manifest should be '%s' not '%s'",
|
||||||
MediaTypeManifest, manifest.MediaType)
|
MediaTypeManifest, mfst.MediaType)
|
||||||
}
|
}
|
||||||
|
|
||||||
m.Manifest = manifest
|
m.Manifest = mfst
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,7 @@ import (
|
||||||
"github.com/distribution/distribution/v3/manifest"
|
"github.com/distribution/distribution/v3/manifest"
|
||||||
)
|
)
|
||||||
|
|
||||||
var expectedManifestSerialization = []byte(`{
|
const expectedManifestSerialization = `{
|
||||||
"schemaVersion": 2,
|
"schemaVersion": 2,
|
||||||
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
|
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
|
||||||
"config": {
|
"config": {
|
||||||
|
@ -25,7 +25,7 @@ var expectedManifestSerialization = []byte(`{
|
||||||
"digest": "sha256:62d8908bee94c202b2d35224a221aaa2058318bfa9879fa541efaecba272331b"
|
"digest": "sha256:62d8908bee94c202b2d35224a221aaa2058318bfa9879fa541efaecba272331b"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}`)
|
}`
|
||||||
|
|
||||||
func makeTestManifest(mediaType string) Manifest {
|
func makeTestManifest(mediaType string) Manifest {
|
||||||
return Manifest{
|
return Manifest{
|
||||||
|
@ -49,9 +49,9 @@ func makeTestManifest(mediaType string) Manifest {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestManifest(t *testing.T) {
|
func TestManifest(t *testing.T) {
|
||||||
manifest := makeTestManifest(MediaTypeManifest)
|
mfst := makeTestManifest(MediaTypeManifest)
|
||||||
|
|
||||||
deserialized, err := FromStruct(manifest)
|
deserialized, err := FromStruct(mfst)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("error creating DeserializedManifest: %v", err)
|
t.Fatalf("error creating DeserializedManifest: %v", err)
|
||||||
}
|
}
|
||||||
|
@ -64,17 +64,17 @@ func TestManifest(t *testing.T) {
|
||||||
|
|
||||||
// Check that the canonical field is the same as json.MarshalIndent
|
// Check that the canonical field is the same as json.MarshalIndent
|
||||||
// with these parameters.
|
// with these parameters.
|
||||||
p, err := json.MarshalIndent(&manifest, "", " ")
|
expected, err := json.MarshalIndent(&mfst, "", " ")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("error marshaling manifest: %v", err)
|
t.Fatalf("error marshaling manifest: %v", err)
|
||||||
}
|
}
|
||||||
if !bytes.Equal(p, canonical) {
|
if !bytes.Equal(expected, canonical) {
|
||||||
t.Fatalf("manifest bytes not equal: %q != %q", string(canonical), string(p))
|
t.Fatalf("manifest bytes not equal:\nexpected:\n%s\nactual:\n%s\n", string(expected), string(canonical))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check that canonical field matches expected value.
|
// Check that canonical field matches expected value.
|
||||||
if !bytes.Equal(expectedManifestSerialization, canonical) {
|
if !bytes.Equal([]byte(expectedManifestSerialization), canonical) {
|
||||||
t.Fatalf("manifest bytes not equal: %q != %q", string(canonical), string(expectedManifestSerialization))
|
t.Fatalf("manifest bytes not equal:\nexpected:\n%s\nactual:\n%s\n", expectedManifestSerialization, string(canonical))
|
||||||
}
|
}
|
||||||
|
|
||||||
var unmarshalled DeserializedManifest
|
var unmarshalled DeserializedManifest
|
||||||
|
@ -119,9 +119,9 @@ func TestManifest(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func mediaTypeTest(t *testing.T, mediaType string, shouldError bool) {
|
func mediaTypeTest(t *testing.T, mediaType string, shouldError bool) {
|
||||||
manifest := makeTestManifest(mediaType)
|
mfst := makeTestManifest(mediaType)
|
||||||
|
|
||||||
deserialized, err := FromStruct(manifest)
|
deserialized, err := FromStruct(mfst)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("error creating DeserializedManifest: %v", err)
|
t.Fatalf("error creating DeserializedManifest: %v", err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,8 +33,8 @@ type manifestStoreTestEnv struct {
|
||||||
|
|
||||||
func newManifestStoreTestEnv(t *testing.T, name reference.Named, tag string, options ...RegistryOption) *manifestStoreTestEnv {
|
func newManifestStoreTestEnv(t *testing.T, name reference.Named, tag string, options ...RegistryOption) *manifestStoreTestEnv {
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
driver := inmemory.New()
|
drvr := inmemory.New()
|
||||||
registry, err := NewRegistry(ctx, driver, options...)
|
registry, err := NewRegistry(ctx, drvr, options...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("error creating registry: %v", err)
|
t.Fatalf("error creating registry: %v", err)
|
||||||
}
|
}
|
||||||
|
@ -46,7 +46,7 @@ func newManifestStoreTestEnv(t *testing.T, name reference.Named, tag string, opt
|
||||||
|
|
||||||
return &manifestStoreTestEnv{
|
return &manifestStoreTestEnv{
|
||||||
ctx: ctx,
|
ctx: ctx,
|
||||||
driver: driver,
|
driver: drvr,
|
||||||
registry: registry,
|
registry: registry,
|
||||||
repository: repo,
|
repository: repo,
|
||||||
name: name,
|
name: name,
|
||||||
|
@ -434,25 +434,25 @@ func testOCIManifestStorage(t *testing.T, testname string, includeMediaTypes boo
|
||||||
builder.AppendReference(distribution.Descriptor{Digest: dgst})
|
builder.AppendReference(distribution.Descriptor{Digest: dgst})
|
||||||
}
|
}
|
||||||
|
|
||||||
manifest, err := builder.Build(ctx)
|
mfst, err := builder.Build(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("%s: unexpected error generating manifest: %v", testname, err)
|
t.Fatalf("%s: unexpected error generating manifest: %v", testname, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// before putting the manifest test for proper handling of SchemaVersion
|
// before putting the manifest test for proper handling of SchemaVersion
|
||||||
|
|
||||||
if manifest.(*ocischema.DeserializedManifest).Manifest.SchemaVersion != 2 {
|
if mfst.(*ocischema.DeserializedManifest).Manifest.SchemaVersion != 2 {
|
||||||
t.Fatalf("%s: unexpected error generating default version for oci manifest", testname)
|
t.Fatalf("%s: unexpected error generating default version for oci manifest", testname)
|
||||||
}
|
}
|
||||||
manifest.(*ocischema.DeserializedManifest).Manifest.SchemaVersion = 0
|
mfst.(*ocischema.DeserializedManifest).Manifest.SchemaVersion = 0
|
||||||
|
|
||||||
var manifestDigest digest.Digest
|
var manifestDigest digest.Digest
|
||||||
if manifestDigest, err = ms.Put(ctx, manifest); err != nil {
|
if manifestDigest, err = ms.Put(ctx, mfst); err != nil {
|
||||||
if err.Error() != "unrecognized manifest schema version 0" {
|
if err.Error() != "unrecognized manifest schema version 0" {
|
||||||
t.Fatalf("%s: unexpected error putting manifest: %v", testname, err)
|
t.Fatalf("%s: unexpected error putting manifest: %v", testname, err)
|
||||||
}
|
}
|
||||||
manifest.(*ocischema.DeserializedManifest).Manifest.SchemaVersion = 2
|
mfst.(*ocischema.DeserializedManifest).Manifest.SchemaVersion = 2
|
||||||
if manifestDigest, err = ms.Put(ctx, manifest); err != nil {
|
if manifestDigest, err = ms.Put(ctx, mfst); err != nil {
|
||||||
t.Fatalf("%s: unexpected error putting manifest: %v", testname, err)
|
t.Fatalf("%s: unexpected error putting manifest: %v", testname, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,7 +42,7 @@ func MakeManifestList(blobstatter distribution.BlobStatter, manifestDigests []di
|
||||||
// MakeSchema1Manifest constructs a schema 1 manifest from a given list of digests and returns
|
// MakeSchema1Manifest constructs a schema 1 manifest from a given list of digests and returns
|
||||||
// the digest of the manifest
|
// the digest of the manifest
|
||||||
func MakeSchema1Manifest(digests []digest.Digest) (distribution.Manifest, error) {
|
func MakeSchema1Manifest(digests []digest.Digest) (distribution.Manifest, error) {
|
||||||
manifest := schema1.Manifest{
|
mfst := schema1.Manifest{
|
||||||
Versioned: manifest.Versioned{
|
Versioned: manifest.Versioned{
|
||||||
SchemaVersion: 1,
|
SchemaVersion: 1,
|
||||||
},
|
},
|
||||||
|
@ -50,9 +50,9 @@ func MakeSchema1Manifest(digests []digest.Digest) (distribution.Manifest, error)
|
||||||
Tag: "cares",
|
Tag: "cares",
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, digest := range digests {
|
for _, d := range digests {
|
||||||
manifest.FSLayers = append(manifest.FSLayers, schema1.FSLayer{BlobSum: digest})
|
mfst.FSLayers = append(mfst.FSLayers, schema1.FSLayer{BlobSum: d})
|
||||||
manifest.History = append(manifest.History, schema1.History{V1Compatibility: ""})
|
mfst.History = append(mfst.History, schema1.History{V1Compatibility: ""})
|
||||||
}
|
}
|
||||||
|
|
||||||
pk, err := libtrust.GenerateECP256PrivateKey()
|
pk, err := libtrust.GenerateECP256PrivateKey()
|
||||||
|
@ -60,7 +60,7 @@ func MakeSchema1Manifest(digests []digest.Digest) (distribution.Manifest, error)
|
||||||
return nil, fmt.Errorf("unexpected error generating private key: %v", err)
|
return nil, fmt.Errorf("unexpected error generating private key: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
signedManifest, err := schema1.Sign(&manifest, pk)
|
signedManifest, err := schema1.Sign(&mfst, pk)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("error signing manifest: %v", err)
|
return nil, fmt.Errorf("error signing manifest: %v", err)
|
||||||
}
|
}
|
||||||
|
@ -74,14 +74,14 @@ func MakeSchema2Manifest(repository distribution.Repository, digests []digest.Di
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
blobStore := repository.Blobs(ctx)
|
blobStore := repository.Blobs(ctx)
|
||||||
builder := schema2.NewManifestBuilder(blobStore, schema2.MediaTypeImageConfig, []byte{})
|
builder := schema2.NewManifestBuilder(blobStore, schema2.MediaTypeImageConfig, []byte{})
|
||||||
for _, digest := range digests {
|
for _, d := range digests {
|
||||||
builder.AppendReference(distribution.Descriptor{Digest: digest})
|
builder.AppendReference(distribution.Descriptor{Digest: d})
|
||||||
}
|
}
|
||||||
|
|
||||||
manifest, err := builder.Build(ctx)
|
mfst, err := builder.Build(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("unexpected error generating manifest: %v", err)
|
return nil, fmt.Errorf("unexpected error generating manifest: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return manifest, nil
|
return mfst, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -96,7 +96,7 @@ func CreateRandomLayers(n int) (map[digest.Digest]io.ReadSeeker, error) {
|
||||||
// UploadBlobs lets you upload blobs to a repository
|
// UploadBlobs lets you upload blobs to a repository
|
||||||
func UploadBlobs(repository distribution.Repository, layers map[digest.Digest]io.ReadSeeker) error {
|
func UploadBlobs(repository distribution.Repository, layers map[digest.Digest]io.ReadSeeker) error {
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
for digest, rs := range layers {
|
for dgst, rs := range layers {
|
||||||
wr, err := repository.Blobs(ctx).Create(ctx)
|
wr, err := repository.Blobs(ctx).Create(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("unexpected error creating upload: %v", err)
|
return fmt.Errorf("unexpected error creating upload: %v", err)
|
||||||
|
@ -106,7 +106,7 @@ func UploadBlobs(repository distribution.Repository, layers map[digest.Digest]io
|
||||||
return fmt.Errorf("unexpected error copying to upload: %v", err)
|
return fmt.Errorf("unexpected error copying to upload: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if _, err := wr.Commit(ctx, distribution.Descriptor{Digest: digest}); err != nil {
|
if _, err := wr.Commit(ctx, distribution.Descriptor{Digest: dgst}); err != nil {
|
||||||
return fmt.Errorf("unexpected error committinng upload: %v", err)
|
return fmt.Errorf("unexpected error committinng upload: %v", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue