...
1 package testutil
2
3 import (
4 "fmt"
5
6 "github.com/docker/distribution"
7 "github.com/docker/distribution/context"
8 "github.com/docker/distribution/manifest"
9 "github.com/docker/distribution/manifest/manifestlist"
10 "github.com/docker/distribution/manifest/schema1"
11 "github.com/docker/distribution/manifest/schema2"
12 "github.com/docker/libtrust"
13 "github.com/opencontainers/go-digest"
14 )
15
16
17 func MakeManifestList(blobstatter distribution.BlobStatter, manifestDigests []digest.Digest) (*manifestlist.DeserializedManifestList, error) {
18 ctx := context.Background()
19
20 var manifestDescriptors []manifestlist.ManifestDescriptor
21 for _, manifestDigest := range manifestDigests {
22 descriptor, err := blobstatter.Stat(ctx, manifestDigest)
23 if err != nil {
24 return nil, err
25 }
26 platformSpec := manifestlist.PlatformSpec{
27 Architecture: "atari2600",
28 OS: "CP/M",
29 Variant: "ternary",
30 Features: []string{"VLIW", "superscalaroutoforderdevnull"},
31 }
32 manifestDescriptor := manifestlist.ManifestDescriptor{
33 Descriptor: descriptor,
34 Platform: platformSpec,
35 }
36 manifestDescriptors = append(manifestDescriptors, manifestDescriptor)
37 }
38
39 return manifestlist.FromDescriptors(manifestDescriptors)
40 }
41
42
43
44 func MakeSchema1Manifest(digests []digest.Digest) (distribution.Manifest, error) {
45 manifest := schema1.Manifest{
46 Versioned: manifest.Versioned{
47 SchemaVersion: 1,
48 },
49 Name: "who",
50 Tag: "cares",
51 }
52
53 for _, digest := range digests {
54 manifest.FSLayers = append(manifest.FSLayers, schema1.FSLayer{BlobSum: digest})
55 manifest.History = append(manifest.History, schema1.History{V1Compatibility: ""})
56 }
57
58 pk, err := libtrust.GenerateECP256PrivateKey()
59 if err != nil {
60 return nil, fmt.Errorf("unexpected error generating private key: %v", err)
61 }
62
63 signedManifest, err := schema1.Sign(&manifest, pk)
64 if err != nil {
65 return nil, fmt.Errorf("error signing manifest: %v", err)
66 }
67
68 return signedManifest, nil
69 }
70
71
72
73 func MakeSchema2Manifest(repository distribution.Repository, digests []digest.Digest) (distribution.Manifest, error) {
74 ctx := context.Background()
75 blobStore := repository.Blobs(ctx)
76 builder := schema2.NewManifestBuilder(blobStore, schema2.MediaTypeImageConfig, []byte{})
77 for _, digest := range digests {
78 builder.AppendReference(distribution.Descriptor{Digest: digest})
79 }
80
81 manifest, err := builder.Build(ctx)
82 if err != nil {
83 return nil, fmt.Errorf("unexpected error generating manifest: %v", err)
84 }
85
86 return manifest, nil
87 }
88
View as plain text