pkg/containerd/mock.go (79 lines of code) (raw):

// Initial Copyright (c) 2023 Xenit AB and 2024 The Spegel Authors. // Portions Copyright (c) Microsoft Corporation. // Licensed under the MIT License. package containerd import ( "context" "fmt" "io" "github.com/opencontainers/go-digest" ) const testManifestBlob = `{"schemaVersion": 2, "mediaType": "application/vnd.oci.image.manifest.v1+json", "config": {"digest": "sha256:bb863d6b95453b6b10dfaa1a52cb53f453d9a97ee775808ebaf6533bb4c9bb30", "mediaType": "application/vnd.oci.image.config.v1+json", "size": 0}, "layers": []}` type MockContainerdStore struct { validRefs []Reference sizeTooLargeRefs []Reference invalidBytesRefs []Reference } var _ Store = &MockContainerdStore{} func NewMockContainerdStore(validRefs []Reference) *MockContainerdStore { return &MockContainerdStore{ validRefs: validRefs, } } func (m *MockContainerdStore) Verify(ctx context.Context) error { return nil } func (m *MockContainerdStore) Subscribe(ctx context.Context) (<-chan Reference, <-chan error) { return nil, nil } func (m *MockContainerdStore) List(ctx context.Context) ([]Reference, error) { return m.validRefs, nil } func (m *MockContainerdStore) All(ctx context.Context, ref Reference) ([]string, error) { return []string{ref.Digest().String()}, nil } func (m *MockContainerdStore) Resolve(ctx context.Context, ref string) (digest.Digest, error) { for _, r := range m.validRefs { if r.Name() == ref { return r.Digest(), nil } } return "", nil } func (m *MockContainerdStore) Size(ctx context.Context, dgst digest.Digest) (int64, error) { for _, r := range m.validRefs { if r.Digest() == dgst { return int64(len([]byte(testManifestBlob))), nil } } for _, r := range m.sizeTooLargeRefs { if r.Digest() == dgst { return maxManifestSize + 1, nil } } for _, r := range m.invalidBytesRefs { if r.Digest() == dgst { return 100, nil } } return -1, fmt.Errorf("digest %s not found", dgst) } func (m *MockContainerdStore) Write(ctx context.Context, dst io.Writer, dgst digest.Digest) error { for _, r := range m.validRefs { if r.Digest() == dgst { _, err := dst.Write([]byte(testManifestBlob)) return err } } return fmt.Errorf("digest %s not found", dgst) } func (m *MockContainerdStore) Bytes(ctx context.Context, dgst digest.Digest) ([]byte, string, error) { for _, r := range m.validRefs { if r.Digest() == dgst { return []byte(testManifestBlob), "application/vnd.oci.image.manifest.v1+json", nil } } for _, r := range m.invalidBytesRefs { if r.Digest() == dgst { return nil, "", fmt.Errorf("unknown error while reading bytes") } } return nil, "", fmt.Errorf("digest %s not found", dgst) }