Replace mock OCI client with working local client
This commit is contained in:
parent
6b2c51407f
commit
4b60f70a79
101
pkg/oci/local.go
Normal file
101
pkg/oci/local.go
Normal file
@ -0,0 +1,101 @@
|
||||
package oci
|
||||
|
||||
import (
|
||||
"context"
|
||||
"io"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"sync"
|
||||
|
||||
"github.com/opencontainers/go-digest"
|
||||
)
|
||||
|
||||
var _ Client = &LocalClient{}
|
||||
|
||||
type LocalClient struct {
|
||||
mx sync.RWMutex
|
||||
rootDir string
|
||||
imageEventCh chan ImageEvent
|
||||
errCh chan error
|
||||
}
|
||||
|
||||
func NewLocalClient(rootDir string) *LocalClient {
|
||||
return &LocalClient{
|
||||
rootDir: rootDir,
|
||||
}
|
||||
}
|
||||
|
||||
func (m *LocalClient) Add() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *LocalClient) Name() string {
|
||||
return "local"
|
||||
}
|
||||
|
||||
func (m *LocalClient) Verify(ctx context.Context) error {
|
||||
_, err := os.Stat(m.rootDir)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *LocalClient) Subscribe(ctx context.Context) (<-chan ImageEvent, <-chan error, error) {
|
||||
return nil, nil, nil
|
||||
}
|
||||
|
||||
func (m *LocalClient) ListImages(ctx context.Context) ([]Image, error) {
|
||||
m.mx.RLock()
|
||||
defer m.mx.RUnlock()
|
||||
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func (m *LocalClient) AllIdentifiers(ctx context.Context, img Image) ([]string, error) {
|
||||
return []string{img.Digest.String()}, nil
|
||||
}
|
||||
|
||||
func (m *LocalClient) Resolve(ctx context.Context, ref string) (digest.Digest, error) {
|
||||
return "", nil
|
||||
}
|
||||
|
||||
func (m *LocalClient) Size(ctx context.Context, dgst digest.Digest) (int64, error) {
|
||||
m.mx.RLock()
|
||||
defer m.mx.RUnlock()
|
||||
|
||||
p := m.pathForDigest(dgst)
|
||||
fi, err := os.Stat(p)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return fi.Size(), nil
|
||||
}
|
||||
|
||||
func (m *LocalClient) GetManifest(ctx context.Context, dgst digest.Digest) ([]byte, string, error) {
|
||||
m.mx.RLock()
|
||||
defer m.mx.RUnlock()
|
||||
|
||||
p := m.pathForDigest(dgst)
|
||||
b, err := os.ReadFile(p)
|
||||
if err != nil {
|
||||
return nil, "", err
|
||||
}
|
||||
return b, "", nil
|
||||
}
|
||||
|
||||
func (m *LocalClient) GetBlob(ctx context.Context, dgst digest.Digest) (io.ReadCloser, error) {
|
||||
m.mx.RLock()
|
||||
defer m.mx.RUnlock()
|
||||
|
||||
p := m.pathForDigest(dgst)
|
||||
f, err := os.Open(p)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return f, nil
|
||||
}
|
||||
|
||||
func (m *LocalClient) pathForDigest(dgst digest.Digest) string {
|
||||
return filepath.Join(m.rootDir, "blobs", dgst.Algorithm().String(), dgst.Encoded())
|
||||
}
|
@ -1,56 +0,0 @@
|
||||
package oci
|
||||
|
||||
import (
|
||||
"context"
|
||||
"io"
|
||||
|
||||
"github.com/opencontainers/go-digest"
|
||||
)
|
||||
|
||||
var _ Client = &MockClient{}
|
||||
|
||||
type MockClient struct {
|
||||
images []Image
|
||||
}
|
||||
|
||||
func NewMockClient(images []Image) *MockClient {
|
||||
return &MockClient{
|
||||
images: images,
|
||||
}
|
||||
}
|
||||
|
||||
func (m *MockClient) Name() string {
|
||||
return "mock"
|
||||
}
|
||||
|
||||
func (m *MockClient) Verify(ctx context.Context) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *MockClient) Subscribe(ctx context.Context) (<-chan ImageEvent, <-chan error, error) {
|
||||
return nil, nil, nil
|
||||
}
|
||||
|
||||
func (m *MockClient) ListImages(ctx context.Context) ([]Image, error) {
|
||||
return m.images, nil
|
||||
}
|
||||
|
||||
func (m *MockClient) AllIdentifiers(ctx context.Context, img Image) ([]string, error) {
|
||||
return []string{img.Digest.String()}, nil
|
||||
}
|
||||
|
||||
func (m *MockClient) Resolve(ctx context.Context, ref string) (digest.Digest, error) {
|
||||
return "", nil
|
||||
}
|
||||
|
||||
func (m *MockClient) Size(ctx context.Context, dgst digest.Digest) (int64, error) {
|
||||
return 0, nil
|
||||
}
|
||||
|
||||
func (m *MockClient) GetManifest(ctx context.Context, dgst digest.Digest) ([]byte, string, error) {
|
||||
return nil, "", nil
|
||||
}
|
||||
|
||||
func (m *MockClient) GetBlob(ctx context.Context, dgst digest.Digest) (io.ReadCloser, error) {
|
||||
return nil, nil
|
||||
}
|
@ -84,7 +84,10 @@ func TestOCIClient(t *testing.T) {
|
||||
client: containerdClient,
|
||||
}
|
||||
|
||||
for _, ociClient := range []Client{remoteContainerd, localContainerd} {
|
||||
localClient := NewLocalClient(t.TempDir())
|
||||
|
||||
ociClients := []Client{remoteContainerd, localContainerd, localClient}
|
||||
for _, ociClient := range ociClients {
|
||||
t.Run(ociClient.Name(), func(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
|
@ -45,7 +45,7 @@ func TestBasic(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
imgs = append(imgs, img)
|
||||
}
|
||||
ociClient := oci.NewMockClient(imgs)
|
||||
ociClient := oci.NewLocalClient(imgs)
|
||||
router := routing.NewMemoryRouter(map[string][]netip.AddrPort{}, netip.MustParseAddrPort("127.0.0.1:5000"))
|
||||
|
||||
ctx, cancel := context.WithCancel(context.TODO())
|
||||
|
Loading…
x
Reference in New Issue
Block a user