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,
|
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.Run(ociClient.Name(), func(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
|
|
||||||
|
@ -45,7 +45,7 @@ func TestBasic(t *testing.T) {
|
|||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
imgs = append(imgs, img)
|
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"))
|
router := routing.NewMemoryRouter(map[string][]netip.AddrPort{}, netip.MustParseAddrPort("127.0.0.1:5000"))
|
||||||
|
|
||||||
ctx, cancel := context.WithCancel(context.TODO())
|
ctx, cancel := context.WithCancel(context.TODO())
|
||||||
|
Loading…
x
Reference in New Issue
Block a user