Skip to content

Commit ce35f75

Browse files
wip
1 parent 320eb7c commit ce35f75

File tree

5 files changed

+35
-151
lines changed

5 files changed

+35
-151
lines changed

internal/repository/oci/credential/resolver.go

Lines changed: 0 additions & 74 deletions
This file was deleted.

internal/repository/oci/credential/resolver_test.go

Lines changed: 0 additions & 50 deletions
This file was deleted.
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package oci
2+
3+
// compiled only when running tests.
4+
func SetCraneWrapper(r *RepositoryReader, cWrap craneWrapper) {
5+
r.cWrapper = cWrap
6+
}

internal/repository/oci/ocirepo.go

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@ var (
2222
// RepositoryReader provides basic support to read data from OCI repositories.
2323
type RepositoryReader struct {
2424
keyChainLookup spec.KeyChainLookup
25-
hostref string
25+
hostref string
2626
insecure bool
27-
craneClient CraneClient
27+
cWrapper craneWrapper // in runtime delegates to crane package functions
2828
}
2929

3030
// NewRepository creates a new RepositoryReader for the given hostref.
@@ -45,9 +45,9 @@ func NewRepository(kcl spec.KeyChainLookup, hostref string, insecure bool) (*Rep
4545

4646
return &RepositoryReader{
4747
keyChainLookup: kcl,
48-
hostref: hostref,
48+
hostref: hostref,
4949
insecure: insecure,
50-
craneClient: &craneClient{},
50+
cWrapper: &defaultCraneWrapper{},
5151
}, nil
5252
}
5353

@@ -59,7 +59,7 @@ func (s *RepositoryReader) GetConfigFile(ctx context.Context, name, tag string)
5959
return nil, fmt.Errorf("failed to get standard options: %w", err)
6060
}
6161
ref := s.toImageRef(name, tag)
62-
configBytes, err := s.craneClient.Config(ref, options...)
62+
configBytes, err := s.cWrapper.Config(ref, options...)
6363
if err != nil {
6464
return nil, fmt.Errorf("failed to get config file for ref=%q: %w", ref, err)
6565
}
@@ -75,7 +75,7 @@ func (s *RepositoryReader) PullLayer(ctx context.Context, name, tag, digest stri
7575
}
7676
ref := s.toImageRef(name, tag)
7777
refWithDigest := fmt.Sprintf("%s@%s", ref, digest)
78-
configBytes, err := s.craneClient.PullLayer(refWithDigest, options...)
78+
configBytes, err := s.cWrapper.PullLayer(refWithDigest, options...)
7979
if err != nil {
8080
return nil, fmt.Errorf("failed to pull layer for ref=%q: %w", refWithDigest, err)
8181
}
@@ -101,18 +101,19 @@ func (s *RepositoryReader) stdOptions(ctx context.Context) ([]crane.Option, erro
101101
return options, nil
102102
}
103103

104-
// CraneClient defines the subset of crane functions used by RepositoryReader.
105-
type CraneClient interface {
104+
// craneWrapper is a subset of crane package functions used by RepositoryReader.
105+
// It is introduced to facilitate testing.
106+
type craneWrapper interface {
106107
Config(ref string, opt ...crane.Option) ([]byte, error)
107108
PullLayer(ref string, opt ...crane.Option) (containerregistryv1.Layer, error)
108109
}
109110

110-
type craneClient struct{}
111+
type defaultCraneWrapper struct{}
111112

112-
func (c *craneClient) Config(ref string, opt ...crane.Option) ([]byte, error) {
113-
return crane.Config(ref, opt...) //nolint:wrapcheck // the craneClient wrapper is ment not to wrap errors
113+
func (c *defaultCraneWrapper) Config(ref string, opt ...crane.Option) ([]byte, error) {
114+
return crane.Config(ref, opt...) //nolint:wrapcheck // the crane wrapper should be transparent
114115
}
115116

116-
func (c *craneClient) PullLayer(ref string, opt ...crane.Option) (containerregistryv1.Layer, error) {
117-
return crane.PullLayer(ref, opt...) //nolint:wrapcheck // the craneClient wrapper is ment not to wrap errors
117+
func (c *defaultCraneWrapper) PullLayer(ref string, opt ...crane.Option) (containerregistryv1.Layer, error) {
118+
return crane.PullLayer(ref, opt...) //nolint:wrapcheck // the crane wrapper should be transparent
118119
}

internal/repository/oci/ocirepo_internal_test.go renamed to internal/repository/oci/ocirepo_test.go

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package oci
1+
package oci_test
22

33
import (
44
"context"
@@ -13,6 +13,7 @@ import (
1313
"github.com/stretchr/testify/require"
1414

1515
"github.com/kyma-project/lifecycle-manager/internal/manifest/spec"
16+
"github.com/kyma-project/lifecycle-manager/internal/repository/oci"
1617
)
1718

1819
func TestNewRepository(t *testing.T) {
@@ -62,7 +63,7 @@ func TestNewRepository(t *testing.T) {
6263

6364
for _, tt := range tests {
6465
t.Run(tt.name, func(t *testing.T) {
65-
_, err := NewRepository(tt.kcl, tt.hostPort, tt.insecure)
66+
_, err := oci.NewRepository(tt.kcl, tt.hostPort, tt.insecure)
6667
if (err != nil) != tt.expectErr {
6768
t.Errorf("NewRepository() error = %v, expectErr %v", err, tt.expectErr)
6869
}
@@ -76,9 +77,9 @@ func TestGetConfigFile(t *testing.T) {
7677
mcc := mockCraneClient{
7778
configResult: []byte("mock config data"),
7879
}
79-
repo, err := NewRepository(nil, "europe-docker.pkg.dev/kyma-project/prod", true)
80+
repo, err := oci.NewRepository(nil, "europe-docker.pkg.dev/kyma-project/prod", true)
8081
require.NoError(t, err)
81-
repo.craneClient = &mcc
82+
oci.SetCraneWrapper(repo, &mcc)
8283
// when
8384
configData, err := repo.GetConfigFile(t.Context(), "test-name", "test-version")
8485
// then
@@ -92,7 +93,7 @@ func TestGetConfigFile(t *testing.T) {
9293

9394
t.Run("should return an error from KeyChain Lookup", func(t *testing.T) {
9495
// given
95-
repo, err := NewRepository(&errorKeyChainLookup{}, "dummy", false)
96+
repo, err := oci.NewRepository(&errorKeyChainLookup{}, "dummy", false)
9697
require.NoError(t, err)
9798
// when
9899
_, err = repo.GetConfigFile(t.Context(), "test-name", "test-version")
@@ -108,9 +109,9 @@ func TestGetConfigFile(t *testing.T) {
108109
configResult: []byte("mock config data"),
109110
}
110111
mkcl := &mockKeyChainLookup{}
111-
repo, err := NewRepository(mkcl, "europe-docker.pkg.dev/kyma-project/prod", false)
112+
repo, err := oci.NewRepository(mkcl, "europe-docker.pkg.dev/kyma-project/prod", false)
112113
require.NoError(t, err)
113-
repo.craneClient = &mcc
114+
oci.SetCraneWrapper(repo, &mcc)
114115
assert.Nil(t, mkcl.ctx)
115116
// when
116117
configData, err := repo.GetConfigFile(t.Context(), "test-name", "test-version")
@@ -122,9 +123,9 @@ func TestGetConfigFile(t *testing.T) {
122123

123124
t.Run("should return an error from craneClient.Config", func(t *testing.T) {
124125
// given
125-
repo, err := NewRepository(nil, "europe-docker.pkg.dev/kyma-project/prod", true)
126+
repo, err := oci.NewRepository(nil, "europe-docker.pkg.dev/kyma-project/prod", true)
126127
require.NoError(t, err)
127-
repo.craneClient = &mockCraneClient{}
128+
oci.SetCraneWrapper(repo, &mockCraneClient{})
128129
// when
129130
_, err = repo.GetConfigFile(t.Context(), "test-name", "test-version")
130131
// then
@@ -142,9 +143,9 @@ func TestPullLayer(t *testing.T) {
142143
pullResult: mockLayer,
143144
}
144145

145-
repo, err := NewRepository(nil, "europe-docker.pkg.dev/kyma-project/prod", true)
146+
repo, err := oci.NewRepository(nil, "europe-docker.pkg.dev/kyma-project/prod", true)
146147
require.NoError(t, err)
147-
repo.craneClient = &mcc
148+
oci.SetCraneWrapper(repo, &mcc)
148149

149150
layer, err := repo.PullLayer(t.Context(), "test-name", "test-version", "sha256:abcdef1234567890")
150151
require.NoError(t, err)
@@ -156,17 +157,17 @@ func TestPullLayer(t *testing.T) {
156157
})
157158

158159
t.Run("should return an error from KeyChain Lookup", func(t *testing.T) {
159-
repo, err := NewRepository(&errorKeyChainLookup{}, "europe-docker.pkg.dev/kyma-project/prod", false)
160+
repo, err := oci.NewRepository(&errorKeyChainLookup{}, "europe-docker.pkg.dev/kyma-project/prod", false)
160161
require.NoError(t, err)
161162
_, err = repo.PullLayer(t.Context(), "test-name", "test-version", "sha256:abcdef1234567890")
162163
require.Error(t, err)
163164
assert.ErrorIs(t, err, errKeyChain)
164165
})
165166

166167
t.Run("should return an error from craneClient.PullLayer", func(t *testing.T) {
167-
repo, err := NewRepository(nil, "europe-docker.pkg.dev/kyma-project/prod", true)
168+
repo, err := oci.NewRepository(nil, "europe-docker.pkg.dev/kyma-project/prod", true)
168169
require.NoError(t, err)
169-
repo.craneClient = &mockCraneClient{}
170+
oci.SetCraneWrapper(repo, &mockCraneClient{})
170171
_, err = repo.PullLayer(t.Context(), "test-name", "test-version", "sha256:abcdef1234567890")
171172
require.Error(t, err)
172173
require.ErrorIs(t, err, errMockPull)

0 commit comments

Comments
 (0)