diff --git a/pkg/api/controller_test.go b/pkg/api/controller_test.go index 29cc9ee779..8d342327c5 100644 --- a/pkg/api/controller_test.go +++ b/pkg/api/controller_test.go @@ -4350,7 +4350,7 @@ func TestInvalidCases(t *testing.T) { panic(err) } - digest := test.GetTestBlobDigest("zot-cve-test", "config").String() + digest := godigest.FromString("dummy").String() name := "zot-c-test" client := resty.New() @@ -4449,7 +4449,8 @@ func TestCrossRepoMount(t *testing.T) { ctlr.Config.Storage.RemoteCache = false ctlr.Config.Storage.Dedupe = false - err := test.WriteImageToFileSystem(CreateDefaultImage(), "zot-cve-test", "test", storage.StoreController{ + image := CreateDefaultImage() + err := test.WriteImageToFileSystem(image, "zot-cve-test", "test", storage.StoreController{ DefaultStore: test.GetDefaultImageStore(dir, ctlr.Log), }) So(err, ShouldBeNil) @@ -4459,8 +4460,7 @@ func TestCrossRepoMount(t *testing.T) { params := make(map[string]string) - var manifestDigest godigest.Digest - manifestDigest, _, _ = test.GetOciLayoutDigests(path.Join(dir, "zot-cve-test")) + manifestDigest := image.ManifestDescriptor.Digest dgst := manifestDigest name := "zot-cve-test" @@ -4487,7 +4487,7 @@ func TestCrossRepoMount(t *testing.T) { baseURL, constants.RoutePrefix, constants.Blobs, constants.Uploads)) incorrectParams := make(map[string]string) - incorrectParams["mount"] = test.GetTestBlobDigest("zot-cve-test", "manifest").String() + incorrectParams["mount"] = godigest.FromString("dummy").String() incorrectParams["from"] = "zot-x-test" postResponse, err = client.R(). diff --git a/pkg/extensions/search/search_test.go b/pkg/extensions/search/search_test.go index aafbc48b6f..16096de84b 100644 --- a/pkg/extensions/search/search_test.go +++ b/pkg/extensions/search/search_test.go @@ -381,19 +381,21 @@ func TestRepoListWithNewestImage(t *testing.T) { ctlrManager.StartAndWait(port) defer ctlrManager.StopServer() - config, layers, manifest, err := GetImageComponents(100) + config, layers, _, err := GetImageComponents(100) So(err, ShouldBeNil) - err = UploadImage(Image{Manifest: manifest, Config: config, Layers: layers}, baseURL, "zot-cve-test", "0.0.1") + uploadedImage := CreateImageWith().LayerBlobs(layers).ImageConfig(config).Build() + + err = UploadImage(uploadedImage, baseURL, "zot-cve-test", "0.0.1") So(err, ShouldBeNil) - err = UploadImage(Image{Manifest: manifest, Config: config, Layers: layers}, baseURL, "a/zot-cve-test", "0.0.1") + err = UploadImage(uploadedImage, baseURL, "a/zot-cve-test", "0.0.1") So(err, ShouldBeNil) - err = UploadImage(Image{Manifest: manifest, Config: config, Layers: layers}, baseURL, "zot-test", "0.0.1") + err = UploadImage(uploadedImage, baseURL, "zot-test", "0.0.1") So(err, ShouldBeNil) - err = UploadImage(Image{Manifest: manifest, Config: config, Layers: layers}, baseURL, "a/zot-test", "0.0.1") + err = UploadImage(uploadedImage, baseURL, "a/zot-test", "0.0.1") So(err, ShouldBeNil) resp, err := resty.R().Get(baseURL + "/v2/") @@ -590,9 +592,8 @@ func TestRepoListWithNewestImage(t *testing.T) { panic(err) } - var manifestDigest godigest.Digest - var configDigest godigest.Digest - manifestDigest, configDigest, _ = GetOciLayoutDigests(path.Join(subRootDir, "a/zot-test")) + manifestDigest := uploadedImage.ManifestDescriptor.Digest + configDigest := uploadedImage.ConfigDescriptor.Digest // Delete config blob and try. err = os.Remove(path.Join(subRootDir, "a/zot-test/blobs/sha256", configDigest.Encoded())) @@ -1269,22 +1270,25 @@ func TestExpandedRepoInfo(t *testing.T) { ctlrManager.StartAndWait(port) defer ctlrManager.StopServer() - config, layers, manifest, err := GetImageComponents(100) + config, layers, _, err := GetImageComponents(100) So(err, ShouldBeNil) - manifest.Annotations = make(map[string]string) - manifest.Annotations["org.opencontainers.image.vendor"] = "zot" + annotations := make(map[string]string) + annotations["org.opencontainers.image.vendor"] = "zot" - err = UploadImage(Image{Manifest: manifest, Config: config, Layers: layers}, baseURL, "zot-cve-test", "0.0.1") + uploadedImage := CreateImageWith().LayerBlobs(layers).ImageConfig(config). + Annotations(annotations).Build() + + err = UploadImage(uploadedImage, baseURL, "zot-cve-test", "0.0.1") So(err, ShouldBeNil) - err = UploadImage(Image{Manifest: manifest, Config: config, Layers: layers}, baseURL, "a/zot-cve-test", "0.0.1") + err = UploadImage(uploadedImage, baseURL, "a/zot-cve-test", "0.0.1") So(err, ShouldBeNil) - err = UploadImage(Image{Manifest: manifest, Config: config, Layers: layers}, baseURL, "zot-test", "0.0.1") + err = UploadImage(uploadedImage, baseURL, "zot-test", "0.0.1") So(err, ShouldBeNil) - err = UploadImage(Image{Manifest: manifest, Config: config, Layers: layers}, baseURL, "a/zot-test", "0.0.1") + err = UploadImage(uploadedImage, baseURL, "a/zot-test", "0.0.1") So(err, ShouldBeNil) log := log.NewLogger("debug", "") @@ -1456,7 +1460,7 @@ func TestExpandedRepoInfo(t *testing.T) { So(found, ShouldEqual, true) var manifestDigest godigest.Digest - manifestDigest, _, _ = GetOciLayoutDigests(path.Join(rootDir, "zot-test")) + manifestDigest = uploadedImage.ManifestDescriptor.Digest err = os.Remove(path.Join(rootDir, "zot-test/blobs/sha256", manifestDigest.Encoded())) So(err, ShouldBeNil) diff --git a/pkg/test/common.go b/pkg/test/common.go index 070bb8e157..97f0309a98 100644 --- a/pkg/test/common.go +++ b/pkg/test/common.go @@ -35,7 +35,6 @@ import ( godigest "github.com/opencontainers/go-digest" "github.com/opencontainers/image-spec/specs-go" ispec "github.com/opencontainers/image-spec/specs-go/v1" - "github.com/opencontainers/umoci" "github.com/phayes/freeport" "github.com/project-zot/mockoidc" "github.com/sigstore/cosign/v2/cmd/cosign/cli/generate" @@ -72,29 +71,6 @@ var ( var NotationPathLock = new(sync.Mutex) //nolint: gochecknoglobals -// which: manifest, config, layer -func GetTestBlobDigest(image, which string) godigest.Digest { - prePath := "../test/data" - - for _, err := os.Stat(prePath); err != nil; _, err = os.Stat(prePath) { - prePath = "../" + prePath - } - - imgPath := path.Join(prePath, image) - manifest, config, layer := GetOciLayoutDigests(imgPath) - - switch which { - case "manifest": - return manifest - case "config": - return config - case "layer": - return layer - } - - return "" -} - func GetFreePort() string { port, err := freeport.GetFreePort() if err != nil { @@ -434,57 +410,6 @@ func GetRandomImageConfig() ([]byte, godigest.Digest) { return configBlobContent, configBlobDigestRaw } -func GetOciLayoutDigests(imagePath string) (godigest.Digest, godigest.Digest, godigest.Digest) { - var ( - manifestDigest godigest.Digest - configDigest godigest.Digest - layerDigest godigest.Digest - ) - - oci, err := umoci.OpenLayout(imagePath) - if err != nil { - panic(fmt.Errorf("error opening layout at '%s' : %w", imagePath, err)) - } - - defer oci.Close() - - ctxUmoci := context.Background() - - index, err := oci.GetIndex(ctxUmoci) - if err != nil { - panic(err) - } - - for _, manifest := range index.Manifests { - manifestDigest = manifest.Digest - - manifestBlob, err := oci.GetBlob(ctxUmoci, manifest.Digest) - if err != nil { - panic(err) - } - - manifestBuf, err := io.ReadAll(manifestBlob) - if err != nil { - panic(err) - } - - var manifest ispec.Manifest - - err = json.Unmarshal(manifestBuf, &manifest) - if err != nil { - panic(err) - } - - configDigest = manifest.Config.Digest - - for _, layer := range manifest.Layers { - layerDigest = layer.Digest - } - } - - return manifestDigest, configDigest, layerDigest -} - // Deprecated: Should use the new functions starting with "Create". func GetImageComponents(layerSize int) (ispec.Image, [][]byte, ispec.Manifest, error) { config := ispec.Image{ diff --git a/pkg/test/common_test.go b/pkg/test/common_test.go index 988af0209e..9f827bd736 100644 --- a/pkg/test/common_test.go +++ b/pkg/test/common_test.go @@ -22,7 +22,6 @@ import ( "zotregistry.io/zot/pkg/api" "zotregistry.io/zot/pkg/api/config" - "zotregistry.io/zot/pkg/log" "zotregistry.io/zot/pkg/storage" "zotregistry.io/zot/pkg/test" . "zotregistry.io/zot/pkg/test/image-utils" @@ -125,64 +124,6 @@ func TestCopyFiles(t *testing.T) { }) } -func TestGetOciLayoutDigests(t *testing.T) { - dir := t.TempDir() - - Convey("image path is wrong", t, func() { - So(func() { _, _, _ = test.GetOciLayoutDigests("inexistent-image") }, ShouldPanic) - }) - - Convey("no permissions when getting index", t, func() { - storageCtlr := test.GetDefaultStoreController(dir, log.NewLogger("debug", "")) - image := CreateDefaultImage() - - err := test.WriteImageToFileSystem(image, "test-index", "0.0.1", storageCtlr) - So(err, ShouldBeNil) - - err = os.Chmod(path.Join(dir, "test-index", "index.json"), 0o000) - if err != nil { - panic(err) - } - - So(func() { _, _, _ = test.GetOciLayoutDigests(path.Join(dir, "test-index")) }, ShouldPanic) - - err = os.Chmod(path.Join(dir, "test-index", "index.json"), 0o755) - if err != nil { - panic(err) - } - }) - - Convey("can't access manifest digest", t, func() { - storageCtlr := test.GetDefaultStoreController(dir, log.NewLogger("debug", "")) - image := CreateDefaultImage() - - err := test.WriteImageToFileSystem(image, "test-manifest", "0.0.1", storageCtlr) - So(err, ShouldBeNil) - - buf, err := os.ReadFile(path.Join(dir, "test-manifest", "index.json")) - if err != nil { - panic(err) - } - - var index ispec.Index - if err := json.Unmarshal(buf, &index); err != nil { - panic(err) - } - - err = os.Chmod(path.Join(dir, "test-manifest", "blobs/sha256", index.Manifests[0].Digest.Encoded()), 0o000) - if err != nil { - panic(err) - } - - So(func() { _, _, _ = test.GetOciLayoutDigests(path.Join(dir, "test-manifest")) }, ShouldPanic) - - err = os.Chmod(path.Join(dir, "test-manifest", "blobs/sha256", index.Manifests[0].Digest.Encoded()), 0o755) - if err != nil { - panic(err) - } - }) -} - func TestGetImageComponents(t *testing.T) { Convey("Inject failures for unreachable lines", t, func() { injected := inject.InjectFailure(0) diff --git a/pkg/test/oci-layout/oci_layout_test.go b/pkg/test/oci-layout/oci_layout_test.go index 7aa3067ee1..200c77eebb 100644 --- a/pkg/test/oci-layout/oci_layout_test.go +++ b/pkg/test/oci-layout/oci_layout_test.go @@ -33,8 +33,6 @@ import ( var ErrTestError = fmt.Errorf("testError") func TestBaseOciLayoutUtils(t *testing.T) { - manifestDigest := GetTestBlobDigest("zot-test", "config").String() - Convey("GetImageManifestSize fail", t, func() { mockStoreController := mocks.MockedImageStore{ GetBlobContentFn: func(repo string, digest godigest.Digest) ([]byte, error) { @@ -64,6 +62,9 @@ func TestBaseOciLayoutUtils(t *testing.T) { }) Convey("GetImageConfigSize: config GetBlobContent fail", t, func() { + image := CreateRandomImage() + manifestDigest := image.ConfigDescriptor.Digest.String() + mockStoreController := mocks.MockedImageStore{ GetBlobContentFn: func(repo string, digest godigest.Digest) ([]byte, error) { if digest.String() == manifestDigest { @@ -83,7 +84,7 @@ func TestBaseOciLayoutUtils(t *testing.T) { "layers": [ { "mediaType": "application/vnd.oci.image.layer.v1.tar+gzip", - "digest": "` + GetTestBlobDigest("zot-test", "layer").String() + `", + "digest": "` + image.Manifest.Layers[0].Digest.String() + `", "size": 76097157 } ]