mirror of
https://github.com/project-zot/zot.git
synced 2026-06-17 04:48:26 +08:00
refactor(storage): refactoring storage (#1459)
Signed-off-by: Laurentiu Niculae <niculae.laurentiu1@gmail.com>
This commit is contained in:
+19
-18
@@ -47,6 +47,7 @@ import (
|
||||
|
||||
"zotregistry.io/zot/pkg/meta/repodb"
|
||||
"zotregistry.io/zot/pkg/storage"
|
||||
"zotregistry.io/zot/pkg/test/inject"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -549,7 +550,7 @@ func GetImageComponents(layerSize int) (ispec.Image, [][]byte, ispec.Manifest, e
|
||||
}
|
||||
|
||||
configBlob, err := json.Marshal(config)
|
||||
if err = Error(err); err != nil {
|
||||
if err = inject.Error(err); err != nil {
|
||||
return ispec.Image{}, [][]byte{}, ispec.Manifest{}, err
|
||||
}
|
||||
|
||||
@@ -597,7 +598,7 @@ func GetRandomImageComponents(layerSize int) (ispec.Image, [][]byte, ispec.Manif
|
||||
}
|
||||
|
||||
configBlob, err := json.Marshal(config)
|
||||
if err = Error(err); err != nil {
|
||||
if err = inject.Error(err); err != nil {
|
||||
return ispec.Image{}, [][]byte{}, ispec.Manifest{}, err
|
||||
}
|
||||
|
||||
@@ -665,7 +666,7 @@ func GetRandomImage(reference string) (Image, error) {
|
||||
|
||||
func GetImageComponentsWithConfig(conf ispec.Image) (ispec.Image, [][]byte, ispec.Manifest, error) {
|
||||
configBlob, err := json.Marshal(conf)
|
||||
if err = Error(err); err != nil {
|
||||
if err = inject.Error(err); err != nil {
|
||||
return ispec.Image{}, [][]byte{}, ispec.Manifest{}, err
|
||||
}
|
||||
|
||||
@@ -843,7 +844,7 @@ func UploadImage(img Image, baseURL, repo string) error {
|
||||
}
|
||||
// upload config
|
||||
cblob, err := json.Marshal(img.Config)
|
||||
if err = Error(err); err != nil {
|
||||
if err = inject.Error(err); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -856,11 +857,11 @@ func UploadImage(img Image, baseURL, repo string) error {
|
||||
|
||||
resp, err := resty.R().
|
||||
Post(baseURL + "/v2/" + repo + "/blobs/uploads/")
|
||||
if err = Error(err); err != nil {
|
||||
if err = inject.Error(err); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if ErrStatusCode(resp.StatusCode()) != http.StatusAccepted || ErrStatusCode(resp.StatusCode()) == -1 {
|
||||
if inject.ErrStatusCode(resp.StatusCode()) != http.StatusAccepted || inject.ErrStatusCode(resp.StatusCode()) == -1 {
|
||||
return ErrPostBlob
|
||||
}
|
||||
|
||||
@@ -873,17 +874,17 @@ func UploadImage(img Image, baseURL, repo string) error {
|
||||
SetQueryParam("digest", cdigest.String()).
|
||||
SetBody(cblob).
|
||||
Put(loc)
|
||||
if err = Error(err); err != nil {
|
||||
if err = inject.Error(err); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if ErrStatusCode(resp.StatusCode()) != http.StatusCreated || ErrStatusCode(resp.StatusCode()) == -1 {
|
||||
if inject.ErrStatusCode(resp.StatusCode()) != http.StatusCreated || inject.ErrStatusCode(resp.StatusCode()) == -1 {
|
||||
return ErrPostBlob
|
||||
}
|
||||
|
||||
// put manifest
|
||||
manifestBlob, err := json.Marshal(img.Manifest)
|
||||
if err = Error(err); err != nil {
|
||||
if err = inject.Error(err); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -892,11 +893,11 @@ func UploadImage(img Image, baseURL, repo string) error {
|
||||
SetBody(manifestBlob).
|
||||
Put(baseURL + "/v2/" + repo + "/manifests/" + img.Reference)
|
||||
|
||||
if ErrStatusCode(resp.StatusCode()) != http.StatusCreated {
|
||||
if inject.ErrStatusCode(resp.StatusCode()) != http.StatusCreated {
|
||||
return ErrPutBlob
|
||||
}
|
||||
|
||||
if ErrStatusCode(resp.StatusCode()) != http.StatusCreated {
|
||||
if inject.ErrStatusCode(resp.StatusCode()) != http.StatusCreated {
|
||||
return ErrPutBlob
|
||||
}
|
||||
|
||||
@@ -1512,7 +1513,7 @@ func UploadImageWithBasicAuth(img Image, baseURL, repo, user, password string) e
|
||||
}
|
||||
// upload config
|
||||
cblob, err := json.Marshal(img.Config)
|
||||
if err = Error(err); err != nil {
|
||||
if err = inject.Error(err); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -1526,11 +1527,11 @@ func UploadImageWithBasicAuth(img Image, baseURL, repo, user, password string) e
|
||||
resp, err := resty.R().
|
||||
SetBasicAuth(user, password).
|
||||
Post(baseURL + "/v2/" + repo + "/blobs/uploads/")
|
||||
if err = Error(err); err != nil {
|
||||
if err = inject.Error(err); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if ErrStatusCode(resp.StatusCode()) != http.StatusAccepted || ErrStatusCode(resp.StatusCode()) == -1 {
|
||||
if inject.ErrStatusCode(resp.StatusCode()) != http.StatusAccepted || inject.ErrStatusCode(resp.StatusCode()) == -1 {
|
||||
return ErrPostBlob
|
||||
}
|
||||
|
||||
@@ -1544,17 +1545,17 @@ func UploadImageWithBasicAuth(img Image, baseURL, repo, user, password string) e
|
||||
SetQueryParam("digest", cdigest.String()).
|
||||
SetBody(cblob).
|
||||
Put(loc)
|
||||
if err = Error(err); err != nil {
|
||||
if err = inject.Error(err); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if ErrStatusCode(resp.StatusCode()) != http.StatusCreated || ErrStatusCode(resp.StatusCode()) == -1 {
|
||||
if inject.ErrStatusCode(resp.StatusCode()) != http.StatusCreated || inject.ErrStatusCode(resp.StatusCode()) == -1 {
|
||||
return ErrPostBlob
|
||||
}
|
||||
|
||||
// put manifest
|
||||
manifestBlob, err := json.Marshal(img.Manifest)
|
||||
if err = Error(err); err != nil {
|
||||
if err = inject.Error(err); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -1795,7 +1796,7 @@ func UploadMultiarchImage(multiImage MultiarchImage, baseURL string, repo string
|
||||
|
||||
// put manifest
|
||||
indexBlob, err := json.Marshal(multiImage.Index)
|
||||
if err = Error(err); err != nil {
|
||||
if err = inject.Error(err); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
|
||||
+32
-11
@@ -24,6 +24,7 @@ import (
|
||||
"zotregistry.io/zot/pkg/api/config"
|
||||
"zotregistry.io/zot/pkg/storage"
|
||||
"zotregistry.io/zot/pkg/test"
|
||||
"zotregistry.io/zot/pkg/test/inject"
|
||||
"zotregistry.io/zot/pkg/test/mocks"
|
||||
)
|
||||
|
||||
@@ -174,7 +175,7 @@ func TestGetOciLayoutDigests(t *testing.T) {
|
||||
|
||||
func TestGetImageComponents(t *testing.T) {
|
||||
Convey("Inject failures for unreachable lines", t, func() {
|
||||
injected := test.InjectFailure(0)
|
||||
injected := inject.InjectFailure(0)
|
||||
if injected {
|
||||
_, _, _, err := test.GetImageComponents(100)
|
||||
So(err, ShouldNotBeNil)
|
||||
@@ -186,6 +187,26 @@ func TestGetImageComponents(t *testing.T) {
|
||||
})
|
||||
}
|
||||
|
||||
func TestGetRandomImageComponents(t *testing.T) {
|
||||
Convey("Inject failures for unreachable lines", t, func() {
|
||||
injected := inject.InjectFailure(0)
|
||||
if injected {
|
||||
_, _, _, err := test.GetRandomImageComponents(100)
|
||||
So(err, ShouldNotBeNil)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func TestGetImageComponentsWithConfig(t *testing.T) {
|
||||
Convey("Inject failures for unreachable lines", t, func() {
|
||||
injected := inject.InjectFailure(0)
|
||||
if injected {
|
||||
_, _, _, err := test.GetImageComponentsWithConfig(ispec.Image{})
|
||||
So(err, ShouldNotBeNil)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func TestWaitTillTrivyDBDownloadStarted(t *testing.T) {
|
||||
Convey("finishes successfully", t, func() {
|
||||
tempDir := t.TempDir()
|
||||
@@ -601,14 +622,14 @@ func TestUploadImage(t *testing.T) {
|
||||
}
|
||||
|
||||
Convey("CreateBlobUpload", func() {
|
||||
injected := test.InjectFailure(2)
|
||||
injected := inject.InjectFailure(2)
|
||||
if injected {
|
||||
err := test.UploadImage(img, baseURL, "test")
|
||||
So(err, ShouldNotBeNil)
|
||||
}
|
||||
})
|
||||
Convey("UpdateBlobUpload", func() {
|
||||
injected := test.InjectFailure(4)
|
||||
injected := inject.InjectFailure(4)
|
||||
if injected {
|
||||
err := test.UploadImage(img, baseURL, "test")
|
||||
So(err, ShouldNotBeNil)
|
||||
@@ -662,28 +683,28 @@ func TestInjectUploadImage(t *testing.T) {
|
||||
}
|
||||
|
||||
Convey("first marshal", func() {
|
||||
injected := test.InjectFailure(0)
|
||||
injected := inject.InjectFailure(0)
|
||||
if injected {
|
||||
err := test.UploadImage(img, baseURL, "test")
|
||||
So(err, ShouldNotBeNil)
|
||||
}
|
||||
})
|
||||
Convey("CreateBlobUpload POST call", func() {
|
||||
injected := test.InjectFailure(1)
|
||||
injected := inject.InjectFailure(1)
|
||||
if injected {
|
||||
err := test.UploadImage(img, baseURL, "test")
|
||||
So(err, ShouldNotBeNil)
|
||||
}
|
||||
})
|
||||
Convey("UpdateBlobUpload PUT call", func() {
|
||||
injected := test.InjectFailure(3)
|
||||
injected := inject.InjectFailure(3)
|
||||
if injected {
|
||||
err := test.UploadImage(img, baseURL, "test")
|
||||
So(err, ShouldNotBeNil)
|
||||
}
|
||||
})
|
||||
Convey("second marshal", func() {
|
||||
injected := test.InjectFailure(5)
|
||||
injected := inject.InjectFailure(5)
|
||||
if injected {
|
||||
err := test.UploadImage(img, baseURL, "test")
|
||||
So(err, ShouldNotBeNil)
|
||||
@@ -791,28 +812,28 @@ func TestInjectUploadImageWithBasicAuth(t *testing.T) {
|
||||
}
|
||||
|
||||
Convey("first marshal", func() {
|
||||
injected := test.InjectFailure(0)
|
||||
injected := inject.InjectFailure(0)
|
||||
if injected {
|
||||
err := test.UploadImageWithBasicAuth(img, baseURL, "test", "user", "password")
|
||||
So(err, ShouldNotBeNil)
|
||||
}
|
||||
})
|
||||
Convey("CreateBlobUpload POST call", func() {
|
||||
injected := test.InjectFailure(1)
|
||||
injected := inject.InjectFailure(1)
|
||||
if injected {
|
||||
err := test.UploadImageWithBasicAuth(img, baseURL, "test", "user", "password")
|
||||
So(err, ShouldNotBeNil)
|
||||
}
|
||||
})
|
||||
Convey("UpdateBlobUpload PUT call", func() {
|
||||
injected := test.InjectFailure(3)
|
||||
injected := inject.InjectFailure(3)
|
||||
if injected {
|
||||
err := test.UploadImageWithBasicAuth(img, baseURL, "test", "user", "password")
|
||||
So(err, ShouldNotBeNil)
|
||||
}
|
||||
})
|
||||
Convey("second marshal", func() {
|
||||
injected := test.InjectFailure(5)
|
||||
injected := inject.InjectFailure(5)
|
||||
if injected {
|
||||
err := test.UploadImageWithBasicAuth(img, baseURL, "test", "user", "password")
|
||||
So(err, ShouldNotBeNil)
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
// This file should be linked only in **development** mode.
|
||||
|
||||
package test
|
||||
package inject
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
// This file should be linked only in **development** mode.
|
||||
|
||||
package test_test
|
||||
package inject_test
|
||||
|
||||
import (
|
||||
"errors"
|
||||
@@ -11,7 +11,7 @@ import (
|
||||
|
||||
. "github.com/smartystreets/goconvey/convey"
|
||||
|
||||
"zotregistry.io/zot/pkg/test"
|
||||
"zotregistry.io/zot/pkg/test/inject"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -26,12 +26,12 @@ func foo() error {
|
||||
fmap := map[string]string{"key1": "val1", "key2": "val2"}
|
||||
|
||||
_, ok := fmap["key1"] // should never fail
|
||||
if !test.Ok(ok) {
|
||||
if !inject.Ok(ok) {
|
||||
return errKey1
|
||||
}
|
||||
|
||||
_, ok = fmap["key2"] // should never fail
|
||||
if !test.Ok(ok) {
|
||||
if !inject.Ok(ok) {
|
||||
return errKey2
|
||||
}
|
||||
|
||||
@@ -48,12 +48,12 @@ func errgen(i int) error {
|
||||
|
||||
func bar() error {
|
||||
err := errgen(0) // should never fail
|
||||
if test.Error(err) != nil {
|
||||
if inject.Error(err) != nil {
|
||||
return errCall1
|
||||
}
|
||||
|
||||
err = errgen(0) // should never fail
|
||||
if test.Error(err) != nil {
|
||||
if inject.Error(err) != nil {
|
||||
return errCall2
|
||||
}
|
||||
|
||||
@@ -61,11 +61,11 @@ func bar() error {
|
||||
}
|
||||
|
||||
func baz() error {
|
||||
if test.ErrStatusCode(0) != 0 {
|
||||
if inject.ErrStatusCode(0) != 0 {
|
||||
return errCall1
|
||||
}
|
||||
|
||||
if test.ErrStatusCode(0) != 0 {
|
||||
if inject.ErrStatusCode(0) != 0 {
|
||||
return errCall2
|
||||
}
|
||||
|
||||
@@ -88,15 +88,15 @@ func TestInject(t *testing.T) {
|
||||
|
||||
Convey("Check Ok", func() {
|
||||
Convey("Without skipping", func() {
|
||||
test.InjectFailure(0) // inject a failure
|
||||
inject.InjectFailure(0) // inject a failure
|
||||
err := foo() // should be a failure
|
||||
So(err, ShouldNotBeNil) // should be a failure
|
||||
So(errors.Is(err, errKey1), ShouldBeTrue)
|
||||
})
|
||||
|
||||
Convey("With skipping", func() {
|
||||
test.InjectFailure(1) // inject a failure but skip first one
|
||||
err := foo() // should be a failure
|
||||
inject.InjectFailure(1) // inject a failure but skip first one
|
||||
err := foo() // should be a failure
|
||||
So(errors.Is(err, errKey1), ShouldBeFalse)
|
||||
So(errors.Is(err, errKey2), ShouldBeTrue)
|
||||
})
|
||||
@@ -108,15 +108,15 @@ func TestInject(t *testing.T) {
|
||||
|
||||
Convey("Check Err", func() {
|
||||
Convey("Without skipping", func() {
|
||||
test.InjectFailure(0) // inject a failure
|
||||
inject.InjectFailure(0) // inject a failure
|
||||
err := bar() // should be a failure
|
||||
So(err, ShouldNotBeNil) // should be a failure
|
||||
So(errors.Is(err, errCall1), ShouldBeTrue)
|
||||
})
|
||||
|
||||
Convey("With skipping", func() {
|
||||
test.InjectFailure(1) // inject a failure but skip first one
|
||||
err := bar() // should be a failure
|
||||
inject.InjectFailure(1) // inject a failure but skip first one
|
||||
err := bar() // should be a failure
|
||||
So(errors.Is(err, errCall1), ShouldBeFalse)
|
||||
So(errors.Is(err, errCall2), ShouldBeTrue)
|
||||
})
|
||||
@@ -124,15 +124,15 @@ func TestInject(t *testing.T) {
|
||||
|
||||
Convey("Check ErrStatusCode", func() {
|
||||
Convey("Without skipping", func() {
|
||||
test.InjectFailure(0) // inject a failure
|
||||
inject.InjectFailure(0) // inject a failure
|
||||
err := baz() // should be a failure
|
||||
So(err, ShouldNotBeNil) // should be a failure
|
||||
So(errors.Is(err, errCall1), ShouldBeTrue)
|
||||
})
|
||||
|
||||
Convey("With skipping", func() {
|
||||
test.InjectFailure(1) // inject a failure but skip first one
|
||||
err := baz() // should be a failure
|
||||
inject.InjectFailure(1) // inject a failure but skip first one
|
||||
err := baz() // should be a failure
|
||||
So(errors.Is(err, errCall1), ShouldBeFalse)
|
||||
So(errors.Is(err, errCall2), ShouldBeTrue)
|
||||
})
|
||||
@@ -141,14 +141,14 @@ func TestInject(t *testing.T) {
|
||||
|
||||
Convey("Without injected failure", t, func(c C) {
|
||||
err := alwaysErr()
|
||||
So(test.Error(err), ShouldNotBeNil)
|
||||
So(inject.Error(err), ShouldNotBeNil)
|
||||
|
||||
ok := alwaysNotOk()
|
||||
So(test.Ok(ok), ShouldBeFalse)
|
||||
So(inject.Ok(ok), ShouldBeFalse)
|
||||
})
|
||||
|
||||
Convey("Incomplete injected failure", t, func(c C) {
|
||||
test.InjectFailure(0) // inject a failure
|
||||
So(func() { test.InjectFailure(0) }, ShouldPanic)
|
||||
inject.InjectFailure(0) // inject a failure
|
||||
So(func() { inject.InjectFailure(0) }, ShouldPanic)
|
||||
})
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
//go:build !dev
|
||||
// +build !dev
|
||||
|
||||
package test
|
||||
package inject
|
||||
|
||||
func Error(err error) error {
|
||||
return err
|
||||
@@ -3,14 +3,15 @@ package mocks
|
||||
import (
|
||||
godigest "github.com/opencontainers/go-digest"
|
||||
|
||||
"zotregistry.io/zot/pkg/storage"
|
||||
storageTypes "zotregistry.io/zot/pkg/storage/types"
|
||||
)
|
||||
|
||||
type MockedLint struct {
|
||||
LintFn func(repo string, manifestDigest godigest.Digest, imageStore storage.ImageStore) (bool, error)
|
||||
LintFn func(repo string, manifestDigest godigest.Digest, imageStore storageTypes.ImageStore) (bool, error)
|
||||
}
|
||||
|
||||
func (lint MockedLint) Lint(repo string, manifestDigest godigest.Digest, imageStore storage.ImageStore) (bool, error) {
|
||||
func (lint MockedLint) Lint(repo string, manifestDigest godigest.Digest, imageStore storageTypes.ImageStore,
|
||||
) (bool, error) {
|
||||
if lint.LintFn != nil {
|
||||
return lint.LintFn(repo, manifestDigest, imageStore)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user