mirror of
https://github.com/project-zot/zot.git
synced 2026-06-16 04:17:55 +08:00
test(refactor): change upload image function signature (#1655)
Signed-off-by: Laurentiu Niculae <niculae.laurentiu1@gmail.com>
This commit is contained in:
+37
-303
@@ -278,7 +278,7 @@ func NewControllerManager(controller Controller) ControllerManager {
|
||||
return cm
|
||||
}
|
||||
|
||||
func WriteImageToFileSystem(image Image, repoName string, storeController storage.StoreController) error {
|
||||
func WriteImageToFileSystem(image Image, repoName, ref string, storeController storage.StoreController) error {
|
||||
store := storeController.GetImageStore(repoName)
|
||||
|
||||
err := store.InitRepo(repoName)
|
||||
@@ -314,7 +314,7 @@ func WriteImageToFileSystem(image Image, repoName string, storeController storag
|
||||
return err
|
||||
}
|
||||
|
||||
_, _, err = store.PutImageManifest(repoName, image.Reference, ispec.MediaTypeImageManifest, manifestBlob)
|
||||
_, _, err = store.PutImageManifest(repoName, ref, ispec.MediaTypeImageManifest, manifestBlob)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -333,7 +333,7 @@ func WriteMultiArchImageToFileSystem(multiarchImage MultiarchImage, repoName, re
|
||||
}
|
||||
|
||||
for _, image := range multiarchImage.Images {
|
||||
err := WriteImageToFileSystem(image, repoName, storeController)
|
||||
err := WriteImageToFileSystem(image, repoName, image.DigestStr(), storeController)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -503,6 +503,7 @@ func GetOciLayoutDigests(imagePath string) (godigest.Digest, godigest.Digest, go
|
||||
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{
|
||||
Platform: ispec.Platform{
|
||||
@@ -551,6 +552,7 @@ func GetImageComponents(layerSize int) (ispec.Image, [][]byte, ispec.Manifest, e
|
||||
return config, layers, manifest, nil
|
||||
}
|
||||
|
||||
// Deprecated: Should use the new functions starting with "Create".
|
||||
func GetRandomImageComponents(layerSize int) (ispec.Image, [][]byte, ispec.Manifest, error) {
|
||||
config := ispec.Image{
|
||||
Platform: ispec.Platform{
|
||||
@@ -606,7 +608,8 @@ const (
|
||||
Vulnerability3ID = "CVE-2023-2975"
|
||||
)
|
||||
|
||||
func GetVulnImageWithConfig(ref string, config ispec.Image) (Image, error) {
|
||||
// Deprecated: Should use the new functions starting with "Create".
|
||||
func GetVulnImageWithConfig(config ispec.Image) (Image, error) {
|
||||
vulnerableLayer, err := GetLayerWithVulnerability()
|
||||
if err != nil {
|
||||
return Image{}, err
|
||||
@@ -632,8 +635,6 @@ func GetVulnImageWithConfig(ref string, config ispec.Image) (Image, error) {
|
||||
return Image{}, err
|
||||
}
|
||||
|
||||
img.Reference = ref
|
||||
|
||||
return img, err
|
||||
}
|
||||
|
||||
@@ -693,7 +694,8 @@ func GetRandomLayer(size int) []byte {
|
||||
return layer
|
||||
}
|
||||
|
||||
func GetRandomImage(reference string) (Image, error) {
|
||||
// Deprecated: Should use the new functions starting with "Create".
|
||||
func GetRandomImage() (Image, error) {
|
||||
const layerSize = 20
|
||||
|
||||
config, layers, manifest, err := GetRandomImageComponents(layerSize)
|
||||
@@ -701,23 +703,14 @@ func GetRandomImage(reference string) (Image, error) {
|
||||
return Image{}, err
|
||||
}
|
||||
|
||||
if reference == "" {
|
||||
blob, err := json.Marshal(manifest)
|
||||
if err != nil {
|
||||
return Image{}, err
|
||||
}
|
||||
|
||||
reference = godigest.FromBytes(blob).String()
|
||||
}
|
||||
|
||||
return Image{
|
||||
Manifest: manifest,
|
||||
Layers: layers,
|
||||
Config: config,
|
||||
Reference: reference,
|
||||
Manifest: manifest,
|
||||
Layers: layers,
|
||||
Config: config,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// Deprecated: Should use the new functions starting with "Create".
|
||||
func GetImageComponentsWithConfig(conf ispec.Image) (ispec.Image, [][]byte, ispec.Manifest, error) {
|
||||
configBlob, err := json.Marshal(conf)
|
||||
if err = inject.Error(err); err != nil {
|
||||
@@ -762,25 +755,21 @@ func GetImageComponentsWithConfig(conf ispec.Image) (ispec.Image, [][]byte, ispe
|
||||
return conf, layers, manifest, nil
|
||||
}
|
||||
|
||||
// Deprecated: Should use the new functions starting with "Create".
|
||||
func GetImageWithConfig(conf ispec.Image) (Image, error) {
|
||||
config, layers, manifest, err := GetImageComponentsWithConfig(conf)
|
||||
if err != nil {
|
||||
return Image{}, err
|
||||
}
|
||||
|
||||
blob, err := json.Marshal(manifest)
|
||||
if err != nil {
|
||||
return Image{}, err
|
||||
}
|
||||
|
||||
return Image{
|
||||
Manifest: manifest,
|
||||
Config: config,
|
||||
Layers: layers,
|
||||
Reference: godigest.FromBytes(blob).String(),
|
||||
Manifest: manifest,
|
||||
Config: config,
|
||||
Layers: layers,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// Deprecated: Should use the new functions starting with "Create".
|
||||
func GetImageWithComponents(config ispec.Image, layers [][]byte) (Image, error) {
|
||||
configBlob, err := json.Marshal(config)
|
||||
if err != nil {
|
||||
@@ -812,16 +801,10 @@ func GetImageWithComponents(config ispec.Image, layers [][]byte) (Image, error)
|
||||
Layers: manifestLayers,
|
||||
}
|
||||
|
||||
manifestBlob, err := json.Marshal(manifest)
|
||||
if err != nil {
|
||||
return Image{}, err
|
||||
}
|
||||
|
||||
return Image{
|
||||
Manifest: manifest,
|
||||
Config: config,
|
||||
Layers: layers,
|
||||
Reference: godigest.FromBytes(manifestBlob).String(),
|
||||
Manifest: manifest,
|
||||
Config: config,
|
||||
Layers: layers,
|
||||
}, nil
|
||||
}
|
||||
|
||||
@@ -840,6 +823,7 @@ func GetCosignSignatureTagForDigest(manifestDigest godigest.Digest) string {
|
||||
return manifestDigest.Algorithm().String() + "-" + manifestDigest.Encoded() + ".sig"
|
||||
}
|
||||
|
||||
// Deprecated: Should use the new functions starting with "Create".
|
||||
func GetImageWithSubject(subjectDigest godigest.Digest, mediaType string) (Image, error) {
|
||||
num := 100
|
||||
|
||||
@@ -853,133 +837,14 @@ func GetImageWithSubject(subjectDigest godigest.Digest, mediaType string) (Image
|
||||
MediaType: mediaType,
|
||||
}
|
||||
|
||||
blob, err := json.Marshal(manifest)
|
||||
if err != nil {
|
||||
return Image{}, err
|
||||
}
|
||||
|
||||
return Image{
|
||||
Manifest: manifest,
|
||||
Config: conf,
|
||||
Layers: layers,
|
||||
Reference: godigest.FromBytes(blob).String(),
|
||||
Manifest: manifest,
|
||||
Config: conf,
|
||||
Layers: layers,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func UploadImage(img Image, baseURL, repo string) error {
|
||||
for _, blob := range img.Layers {
|
||||
resp, err := resty.R().Post(baseURL + "/v2/" + repo + "/blobs/uploads/")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if resp.StatusCode() != http.StatusAccepted {
|
||||
return ErrPostBlob
|
||||
}
|
||||
|
||||
loc := resp.Header().Get("Location")
|
||||
|
||||
digest := godigest.FromBytes(blob).String()
|
||||
|
||||
resp, err = resty.R().
|
||||
SetHeader("Content-Length", fmt.Sprintf("%d", len(blob))).
|
||||
SetHeader("Content-Type", "application/octet-stream").
|
||||
SetQueryParam("digest", digest).
|
||||
SetBody(blob).
|
||||
Put(baseURL + loc)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if resp.StatusCode() != http.StatusCreated {
|
||||
return ErrPutBlob
|
||||
}
|
||||
}
|
||||
|
||||
var err error
|
||||
|
||||
cblob := img.ConfigDescriptor.Data
|
||||
|
||||
// we'll remove this check once we make the full transition to the new way of generating test images
|
||||
if len(cblob) == 0 {
|
||||
cblob, err = json.Marshal(img.Config)
|
||||
if err = inject.Error(err); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
cdigest := godigest.FromBytes(cblob)
|
||||
|
||||
if img.Manifest.Config.MediaType == ispec.MediaTypeEmptyJSON ||
|
||||
img.Manifest.Config.Digest == ispec.DescriptorEmptyJSON.Digest {
|
||||
cblob = ispec.DescriptorEmptyJSON.Data
|
||||
cdigest = ispec.DescriptorEmptyJSON.Digest
|
||||
}
|
||||
|
||||
resp, err := resty.R().
|
||||
Post(baseURL + "/v2/" + repo + "/blobs/uploads/")
|
||||
if err = inject.Error(err); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if inject.ErrStatusCode(resp.StatusCode()) != http.StatusAccepted || inject.ErrStatusCode(resp.StatusCode()) == -1 {
|
||||
return ErrPostBlob
|
||||
}
|
||||
|
||||
loc := Location(baseURL, resp)
|
||||
|
||||
// uploading blob should get 201
|
||||
resp, err = resty.R().
|
||||
SetHeader("Content-Length", fmt.Sprintf("%d", len(cblob))).
|
||||
SetHeader("Content-Type", "application/octet-stream").
|
||||
SetQueryParam("digest", cdigest.String()).
|
||||
SetBody(cblob).
|
||||
Put(loc)
|
||||
if err = inject.Error(err); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if inject.ErrStatusCode(resp.StatusCode()) != http.StatusCreated || inject.ErrStatusCode(resp.StatusCode()) == -1 {
|
||||
return ErrPostBlob
|
||||
}
|
||||
|
||||
manifestBlob := img.ManifestDescriptor.Data
|
||||
|
||||
// we'll remove this check once we make the full transition to the new way of generating test images
|
||||
if len(manifestBlob) == 0 {
|
||||
manifestBlob, err = json.Marshal(img.Manifest)
|
||||
if err = inject.Error(err); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
// validate manifest
|
||||
if err := storageCommon.ValidateManifestSchema(manifestBlob); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if img.Reference == "" {
|
||||
img.Reference = godigest.FromBytes(manifestBlob).String()
|
||||
}
|
||||
|
||||
resp, err = resty.R().
|
||||
SetHeader("Content-type", ispec.MediaTypeImageManifest).
|
||||
SetBody(manifestBlob).
|
||||
Put(baseURL + "/v2/" + repo + "/manifests/" + img.Reference)
|
||||
|
||||
if inject.ErrStatusCode(resp.StatusCode()) != http.StatusCreated {
|
||||
return ErrPutBlob
|
||||
}
|
||||
|
||||
if inject.ErrStatusCode(resp.StatusCode()) != http.StatusCreated {
|
||||
return ErrPutBlob
|
||||
}
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
func UploadImageWithRef(img Image, baseURL, repo, ref string) error {
|
||||
func UploadImage(img Image, baseURL, repo, ref string) error {
|
||||
for _, blob := range img.Layers {
|
||||
resp, err := resty.R().Post(baseURL + "/v2/" + repo + "/blobs/uploads/")
|
||||
if err != nil {
|
||||
@@ -1137,13 +1002,13 @@ func PushTestImage(repoName string, tag string, //nolint:unparam
|
||||
) error {
|
||||
err := UploadImage(
|
||||
Image{
|
||||
Manifest: manifest,
|
||||
Config: config,
|
||||
Layers: layers,
|
||||
Reference: tag,
|
||||
Manifest: manifest,
|
||||
Config: config,
|
||||
Layers: layers,
|
||||
},
|
||||
baseURL,
|
||||
repoName,
|
||||
tag,
|
||||
)
|
||||
|
||||
return err
|
||||
@@ -1662,101 +1527,7 @@ func Contains[E isser](s []E, name string) bool {
|
||||
return Index(s, name) >= 0
|
||||
}
|
||||
|
||||
func UploadImageWithBasicAuth(img Image, baseURL, repo, user, password string) error {
|
||||
for _, blob := range img.Layers {
|
||||
resp, err := resty.R().
|
||||
SetBasicAuth(user, password).
|
||||
Post(baseURL + "/v2/" + repo + "/blobs/uploads/")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if resp.StatusCode() != http.StatusAccepted {
|
||||
return ErrPostBlob
|
||||
}
|
||||
|
||||
loc := resp.Header().Get("Location")
|
||||
|
||||
digest := godigest.FromBytes(blob).String()
|
||||
|
||||
resp, err = resty.R().
|
||||
SetBasicAuth(user, password).
|
||||
SetHeader("Content-Length", fmt.Sprintf("%d", len(blob))).
|
||||
SetHeader("Content-Type", "application/octet-stream").
|
||||
SetQueryParam("digest", digest).
|
||||
SetBody(blob).
|
||||
Put(baseURL + loc)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if resp.StatusCode() != http.StatusCreated {
|
||||
return ErrPutBlob
|
||||
}
|
||||
}
|
||||
// upload config
|
||||
cblob, err := json.Marshal(img.Config)
|
||||
if err = inject.Error(err); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
cdigest := godigest.FromBytes(cblob)
|
||||
|
||||
if img.Manifest.Config.MediaType == ispec.MediaTypeEmptyJSON {
|
||||
cblob = ispec.DescriptorEmptyJSON.Data
|
||||
cdigest = ispec.DescriptorEmptyJSON.Digest
|
||||
}
|
||||
|
||||
resp, err := resty.R().
|
||||
SetBasicAuth(user, password).
|
||||
Post(baseURL + "/v2/" + repo + "/blobs/uploads/")
|
||||
if err = inject.Error(err); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if inject.ErrStatusCode(resp.StatusCode()) != http.StatusAccepted || inject.ErrStatusCode(resp.StatusCode()) == -1 {
|
||||
return ErrPostBlob
|
||||
}
|
||||
|
||||
loc := Location(baseURL, resp)
|
||||
|
||||
// uploading blob should get 201
|
||||
resp, err = resty.R().
|
||||
SetBasicAuth(user, password).
|
||||
SetHeader("Content-Length", fmt.Sprintf("%d", len(cblob))).
|
||||
SetHeader("Content-Type", "application/octet-stream").
|
||||
SetQueryParam("digest", cdigest.String()).
|
||||
SetBody(cblob).
|
||||
Put(loc)
|
||||
if err = inject.Error(err); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if inject.ErrStatusCode(resp.StatusCode()) != http.StatusCreated || inject.ErrStatusCode(resp.StatusCode()) == -1 {
|
||||
return ErrPostBlob
|
||||
}
|
||||
|
||||
// put manifest
|
||||
manifestBlob, err := json.Marshal(img.Manifest)
|
||||
if err = inject.Error(err); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if img.Reference == "" {
|
||||
img.Reference = godigest.FromBytes(manifestBlob).String()
|
||||
}
|
||||
|
||||
_, err = resty.R().
|
||||
SetBasicAuth(user, password).
|
||||
SetHeader("Content-type", "application/vnd.oci.image.manifest.v1+json").
|
||||
SetBody(manifestBlob).
|
||||
Put(baseURL + "/v2/" + repo + "/manifests/" + img.Reference)
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
func UploadImageWithBasicAuthRef(img Image, baseURL, repo, ref, user, password string) error {
|
||||
func UploadImageWithBasicAuth(img Image, baseURL, repo, ref, user, password string) error {
|
||||
for _, blob := range img.Layers {
|
||||
resp, err := resty.R().
|
||||
SetBasicAuth(user, password).
|
||||
@@ -1922,6 +1693,7 @@ func SignImageUsingNotary(repoTag, port string) error {
|
||||
return err
|
||||
}
|
||||
|
||||
// Deprecated: Should use the new functions starting with "Create".
|
||||
func GetRandomMultiarchImageComponents() (ispec.Index, []Image, error) {
|
||||
const layerSize = 100
|
||||
|
||||
@@ -1946,8 +1718,6 @@ func GetRandomMultiarchImageComponents() (ispec.Index, []Image, error) {
|
||||
return ispec.Index{}, []Image{}, err
|
||||
}
|
||||
|
||||
image1.Reference = getManifestDigest(image1.Manifest).String()
|
||||
|
||||
randomLayer2 := make([]byte, layerSize)
|
||||
|
||||
_, err = rand.Read(randomLayer2)
|
||||
@@ -1969,8 +1739,6 @@ func GetRandomMultiarchImageComponents() (ispec.Index, []Image, error) {
|
||||
return ispec.Index{}, []Image{}, err
|
||||
}
|
||||
|
||||
image2.Reference = getManifestDigest(image2.Manifest).String()
|
||||
|
||||
randomLayer3 := make([]byte, layerSize)
|
||||
|
||||
_, err = rand.Read(randomLayer3)
|
||||
@@ -1992,8 +1760,6 @@ func GetRandomMultiarchImageComponents() (ispec.Index, []Image, error) {
|
||||
return ispec.Index{}, []Image{}, err
|
||||
}
|
||||
|
||||
image3.Reference = getManifestDigest(image3.Manifest).String()
|
||||
|
||||
index := ispec.Index{
|
||||
MediaType: ispec.MediaTypeImageIndex,
|
||||
Manifests: []ispec.Descriptor{
|
||||
@@ -2018,6 +1784,7 @@ func GetRandomMultiarchImageComponents() (ispec.Index, []Image, error) {
|
||||
return index, []Image{image1, image2, image3}, nil
|
||||
}
|
||||
|
||||
// Deprecated: Should use the new functions starting with "Create".
|
||||
func GetRandomMultiarchImage(reference string) (MultiarchImage, error) {
|
||||
index, images, err := GetRandomMultiarchImageComponents()
|
||||
if err != nil {
|
||||
@@ -2031,18 +1798,16 @@ func GetRandomMultiarchImage(reference string) (MultiarchImage, error) {
|
||||
}, err
|
||||
}
|
||||
|
||||
// Deprecated: Should use the new functions starting with "Create".
|
||||
func GetMultiarchImageForImages(images []Image) MultiarchImage {
|
||||
var index ispec.Index
|
||||
|
||||
for i, image := range images {
|
||||
for _, image := range images {
|
||||
index.Manifests = append(index.Manifests, ispec.Descriptor{
|
||||
MediaType: ispec.MediaTypeImageManifest,
|
||||
Digest: getManifestDigest(image.Manifest),
|
||||
Size: getManifestSize(image.Manifest),
|
||||
})
|
||||
|
||||
// update the reference with the digest of the manifest
|
||||
images[i].Reference = getManifestDigest(image.Manifest).String()
|
||||
}
|
||||
|
||||
index.SchemaVersion = 2
|
||||
@@ -2068,40 +1833,9 @@ func getManifestDigest(manifest ispec.Manifest) godigest.Digest {
|
||||
return godigest.FromBytes(manifestBlob)
|
||||
}
|
||||
|
||||
func UploadMultiarchImage(multiImage MultiarchImage, baseURL string, repo string) error {
|
||||
func UploadMultiarchImage(multiImage MultiarchImage, baseURL string, repo, ref string) error {
|
||||
for _, image := range multiImage.Images {
|
||||
err := UploadImage(image, baseURL, repo)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
// put manifest
|
||||
indexBlob, err := json.Marshal(multiImage.Index)
|
||||
if err = inject.Error(err); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// validate manifest
|
||||
if err := storageCommon.ValidateImageIndexSchema(indexBlob); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
resp, err := resty.R().
|
||||
SetHeader("Content-type", ispec.MediaTypeImageIndex).
|
||||
SetBody(indexBlob).
|
||||
Put(baseURL + "/v2/" + repo + "/manifests/" + multiImage.Reference)
|
||||
|
||||
if resp.StatusCode() != http.StatusCreated {
|
||||
return ErrPutIndex
|
||||
}
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
func UploadMultiarchImageWithRef(multiImage MultiarchImage, baseURL string, repo, ref string) error {
|
||||
for _, image := range multiImage.Images {
|
||||
err := UploadImageWithRef(image, baseURL, repo, image.DigestStr())
|
||||
err := UploadImage(image, baseURL, repo, image.DigestStr())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
+32
-56
@@ -433,9 +433,8 @@ func TestUploadMultiarchImage(t *testing.T) {
|
||||
},
|
||||
},
|
||||
},
|
||||
Images: []test.Image{img},
|
||||
Reference: "index",
|
||||
}, baseURL, "test")
|
||||
Images: []test.Image{img},
|
||||
}, baseURL, "test", "index")
|
||||
So(err, ShouldBeNil)
|
||||
})
|
||||
|
||||
@@ -451,9 +450,8 @@ func TestUploadMultiarchImage(t *testing.T) {
|
||||
},
|
||||
},
|
||||
},
|
||||
Images: []test.Image{img},
|
||||
Reference: "index",
|
||||
}, baseURL, "test")
|
||||
Images: []test.Image{img},
|
||||
}, baseURL, "test", "index")
|
||||
So(err, ShouldNotBeNil)
|
||||
})
|
||||
})
|
||||
@@ -493,7 +491,7 @@ func TestUploadImage(t *testing.T) {
|
||||
Config: ispec.Image{},
|
||||
}
|
||||
|
||||
err := test.UploadImage(img, baseURL, "test")
|
||||
err := test.UploadImage(img, baseURL, "test", img.DigestStr())
|
||||
So(err, ShouldNotBeNil)
|
||||
})
|
||||
|
||||
@@ -509,7 +507,7 @@ func TestUploadImage(t *testing.T) {
|
||||
Layers: make([][]byte, 10),
|
||||
}
|
||||
|
||||
err := test.UploadImage(img, baseURL, "test")
|
||||
err := test.UploadImage(img, baseURL, "test", "")
|
||||
So(err, ShouldNotBeNil)
|
||||
})
|
||||
|
||||
@@ -537,7 +535,7 @@ func TestUploadImage(t *testing.T) {
|
||||
Layers: make([][]byte, 10),
|
||||
}
|
||||
|
||||
err = test.UploadImage(img, baseURL, "test")
|
||||
err = test.UploadImage(img, baseURL, "test", "")
|
||||
So(err, ShouldNotBeNil)
|
||||
})
|
||||
|
||||
@@ -560,7 +558,7 @@ func TestUploadImage(t *testing.T) {
|
||||
Config: ispec.Image{},
|
||||
}
|
||||
|
||||
err := test.UploadImage(img, baseURL, "test")
|
||||
err := test.UploadImage(img, baseURL, "test", "")
|
||||
So(err, ShouldNotBeNil)
|
||||
})
|
||||
|
||||
@@ -600,7 +598,7 @@ func TestUploadImage(t *testing.T) {
|
||||
Config: ispec.Image{},
|
||||
}
|
||||
|
||||
err := test.UploadImage(img, baseURL, "test")
|
||||
err := test.UploadImage(img, baseURL, "test", img.DigestStr())
|
||||
So(err, ShouldBeNil)
|
||||
})
|
||||
|
||||
@@ -659,31 +657,19 @@ func TestUploadImage(t *testing.T) {
|
||||
defer ctlrManager.StopServer()
|
||||
|
||||
Convey("Request fail while pushing layer", func() {
|
||||
err := test.UploadImageWithBasicAuth(test.Image{Layers: [][]byte{{1, 2, 3}}}, "badURL", "", "", "")
|
||||
So(err, ShouldNotBeNil)
|
||||
|
||||
err = test.UploadImageWithBasicAuthRef(test.Image{Layers: [][]byte{{1, 2, 3}}}, "badURL", "", "", "", "")
|
||||
err := test.UploadImageWithBasicAuth(test.Image{Layers: [][]byte{{1, 2, 3}}}, "badURL", "", "", "", "")
|
||||
So(err, ShouldNotBeNil)
|
||||
})
|
||||
Convey("Request status is not StatusOk while pushing layer", func() {
|
||||
err := test.UploadImageWithBasicAuth(test.Image{Layers: [][]byte{{1, 2, 3}}}, baseURL, "", "repo", "")
|
||||
So(err, ShouldNotBeNil)
|
||||
|
||||
err = test.UploadImageWithBasicAuthRef(test.Image{Layers: [][]byte{{1, 2, 3}}}, baseURL, "", "repo", "", "")
|
||||
err := test.UploadImageWithBasicAuth(test.Image{Layers: [][]byte{{1, 2, 3}}}, baseURL, "", "repo", "", "")
|
||||
So(err, ShouldNotBeNil)
|
||||
})
|
||||
Convey("Request fail while pushing config", func() {
|
||||
err := test.UploadImageWithBasicAuth(test.Image{}, "badURL", "", "", "")
|
||||
So(err, ShouldNotBeNil)
|
||||
|
||||
err = test.UploadImageWithBasicAuthRef(test.Image{}, "badURL", "", "", "", "")
|
||||
err := test.UploadImageWithBasicAuth(test.Image{}, "badURL", "", "", "", "")
|
||||
So(err, ShouldNotBeNil)
|
||||
})
|
||||
Convey("Request status is not StatusOk while pushing config", func() {
|
||||
err := test.UploadImageWithBasicAuth(test.Image{}, baseURL, "", "repo", "")
|
||||
So(err, ShouldNotBeNil)
|
||||
|
||||
err = test.UploadImageWithBasicAuthRef(test.Image{}, baseURL, "", "repo", "", "")
|
||||
err := test.UploadImageWithBasicAuth(test.Image{}, baseURL, "", "repo", "", "")
|
||||
So(err, ShouldNotBeNil)
|
||||
})
|
||||
})
|
||||
@@ -737,7 +723,7 @@ func TestUploadImage(t *testing.T) {
|
||||
Config: ispec.Image{},
|
||||
}
|
||||
|
||||
err := test.UploadImage(img, baseURL, "test")
|
||||
err := test.UploadImage(img, baseURL, "test", "")
|
||||
So(err, ShouldNotBeNil)
|
||||
})
|
||||
|
||||
@@ -768,14 +754,14 @@ func TestUploadImage(t *testing.T) {
|
||||
Convey("CreateBlobUpload", func() {
|
||||
injected := inject.InjectFailure(2)
|
||||
if injected {
|
||||
err := test.UploadImage(img, baseURL, "test")
|
||||
err := test.UploadImage(img, baseURL, "test", img.DigestStr())
|
||||
So(err, ShouldNotBeNil)
|
||||
}
|
||||
})
|
||||
Convey("UpdateBlobUpload", func() {
|
||||
injected := inject.InjectFailure(4)
|
||||
if injected {
|
||||
err := test.UploadImage(img, baseURL, "test")
|
||||
err := test.UploadImage(img, baseURL, "test", img.DigestStr())
|
||||
So(err, ShouldNotBeNil)
|
||||
}
|
||||
})
|
||||
@@ -829,40 +815,28 @@ func TestInjectUploadImage(t *testing.T) {
|
||||
Convey("first marshal", func() {
|
||||
injected := inject.InjectFailure(0)
|
||||
if injected {
|
||||
err := test.UploadImage(img, baseURL, "test")
|
||||
So(err, ShouldNotBeNil)
|
||||
|
||||
err = test.UploadImageWithRef(img, baseURL, "test", img.DigestStr())
|
||||
err := test.UploadImage(img, baseURL, "test", img.DigestStr())
|
||||
So(err, ShouldNotBeNil)
|
||||
}
|
||||
})
|
||||
Convey("CreateBlobUpload POST call", func() {
|
||||
injected := inject.InjectFailure(1)
|
||||
if injected {
|
||||
err := test.UploadImage(img, baseURL, "test")
|
||||
So(err, ShouldNotBeNil)
|
||||
|
||||
err = test.UploadImageWithRef(img, baseURL, "test", img.DigestStr())
|
||||
err := test.UploadImage(img, baseURL, "test", img.DigestStr())
|
||||
So(err, ShouldNotBeNil)
|
||||
}
|
||||
})
|
||||
Convey("UpdateBlobUpload PUT call", func() {
|
||||
injected := inject.InjectFailure(3)
|
||||
if injected {
|
||||
err := test.UploadImage(img, baseURL, "test")
|
||||
So(err, ShouldNotBeNil)
|
||||
|
||||
err = test.UploadImageWithRef(img, baseURL, "test", img.DigestStr())
|
||||
err := test.UploadImage(img, baseURL, "test", img.DigestStr())
|
||||
So(err, ShouldNotBeNil)
|
||||
}
|
||||
})
|
||||
Convey("second marshal", func() {
|
||||
injected := inject.InjectFailure(5)
|
||||
if injected {
|
||||
err := test.UploadImage(img, baseURL, "test")
|
||||
So(err, ShouldNotBeNil)
|
||||
|
||||
err = test.UploadImageWithRef(img, baseURL, "test", img.DigestStr())
|
||||
err := test.UploadImage(img, baseURL, "test", img.DigestStr())
|
||||
So(err, ShouldNotBeNil)
|
||||
}
|
||||
})
|
||||
@@ -970,28 +944,28 @@ func TestInjectUploadImageWithBasicAuth(t *testing.T) {
|
||||
Convey("first marshal", func() {
|
||||
injected := inject.InjectFailure(0)
|
||||
if injected {
|
||||
err := test.UploadImageWithBasicAuth(img, baseURL, "test", "user", "password")
|
||||
err := test.UploadImageWithBasicAuth(img, baseURL, "test", img.DigestStr(), "user", "password")
|
||||
So(err, ShouldNotBeNil)
|
||||
}
|
||||
})
|
||||
Convey("CreateBlobUpload POST call", func() {
|
||||
injected := inject.InjectFailure(1)
|
||||
if injected {
|
||||
err := test.UploadImageWithBasicAuth(img, baseURL, "test", "user", "password")
|
||||
err := test.UploadImageWithBasicAuth(img, baseURL, "test", img.DigestStr(), "user", "password")
|
||||
So(err, ShouldNotBeNil)
|
||||
}
|
||||
})
|
||||
Convey("UpdateBlobUpload PUT call", func() {
|
||||
injected := inject.InjectFailure(3)
|
||||
if injected {
|
||||
err := test.UploadImageWithBasicAuth(img, baseURL, "test", "user", "password")
|
||||
err := test.UploadImageWithBasicAuth(img, baseURL, "test", img.DigestStr(), "user", "password")
|
||||
So(err, ShouldNotBeNil)
|
||||
}
|
||||
})
|
||||
Convey("second marshal", func() {
|
||||
injected := inject.InjectFailure(5)
|
||||
if injected {
|
||||
err := test.UploadImageWithBasicAuth(img, baseURL, "test", "user", "password")
|
||||
err := test.UploadImageWithBasicAuth(img, baseURL, "test", img.DigestStr(), "user", "password")
|
||||
So(err, ShouldNotBeNil)
|
||||
}
|
||||
})
|
||||
@@ -1265,11 +1239,10 @@ func TestVerifyWithNotation(t *testing.T) {
|
||||
|
||||
err = test.UploadImage(
|
||||
test.Image{
|
||||
Config: cfg,
|
||||
Layers: layers,
|
||||
Manifest: manifest,
|
||||
Reference: tag,
|
||||
}, baseURL, repoName)
|
||||
Config: cfg,
|
||||
Layers: layers,
|
||||
Manifest: manifest,
|
||||
}, baseURL, repoName, tag)
|
||||
So(err, ShouldBeNil)
|
||||
|
||||
content, err := json.Marshal(manifest)
|
||||
@@ -1478,7 +1451,7 @@ func TestGenerateNotationCerts(t *testing.T) {
|
||||
|
||||
func TestWriteImageToFileSystem(t *testing.T) {
|
||||
Convey("WriteImageToFileSystem errors", t, func() {
|
||||
err := test.WriteImageToFileSystem(test.Image{}, "repo", storage.StoreController{
|
||||
err := test.WriteImageToFileSystem(test.Image{}, "repo", "dig", storage.StoreController{
|
||||
DefaultStore: mocks.MockedImageStore{
|
||||
InitRepoFn: func(name string) error {
|
||||
return ErrTestError
|
||||
@@ -1490,6 +1463,7 @@ func TestWriteImageToFileSystem(t *testing.T) {
|
||||
err = test.WriteImageToFileSystem(
|
||||
test.Image{Layers: [][]byte{[]byte("testLayer")}},
|
||||
"repo",
|
||||
"tag",
|
||||
storage.StoreController{
|
||||
DefaultStore: mocks.MockedImageStore{
|
||||
FullBlobUploadFn: func(repo string, body io.Reader, digest godigest.Digest,
|
||||
@@ -1504,6 +1478,7 @@ func TestWriteImageToFileSystem(t *testing.T) {
|
||||
err = test.WriteImageToFileSystem(
|
||||
test.Image{Layers: [][]byte{[]byte("testLayer")}},
|
||||
"repo",
|
||||
"tag",
|
||||
storage.StoreController{
|
||||
DefaultStore: mocks.MockedImageStore{
|
||||
FullBlobUploadFn: func(repo string, body io.Reader, digest godigest.Digest,
|
||||
@@ -1523,6 +1498,7 @@ func TestWriteImageToFileSystem(t *testing.T) {
|
||||
err = test.WriteImageToFileSystem(
|
||||
test.Image{Layers: [][]byte{[]byte("testLayer")}},
|
||||
"repo",
|
||||
"tag",
|
||||
storage.StoreController{
|
||||
DefaultStore: mocks.MockedImageStore{
|
||||
PutImageManifestFn: func(repo, reference, mediaType string, body []byte,
|
||||
|
||||
+4
-6
@@ -77,10 +77,9 @@ type ManifestBuilder interface {
|
||||
}
|
||||
|
||||
type Image struct {
|
||||
Manifest ispec.Manifest
|
||||
Config ispec.Image
|
||||
Layers [][]byte
|
||||
Reference string
|
||||
Manifest ispec.Manifest
|
||||
Config ispec.Image
|
||||
Layers [][]byte
|
||||
|
||||
ConfigDescriptor ispec.Descriptor
|
||||
ManifestDescriptor ispec.Descriptor
|
||||
@@ -151,6 +150,7 @@ func CreateRandomImageWith() ManifestBuilder {
|
||||
return CreateImageWith().RandomLayers(layerCount, layerSize).RandomConfig()
|
||||
}
|
||||
|
||||
// CreateVulnerableImage creates a vulnerable image with the default config.
|
||||
func CreateVulnerableImage() Image {
|
||||
return CreateImageWith().VulnerableLayers().DefaultVulnConfig().Build()
|
||||
}
|
||||
@@ -433,8 +433,6 @@ func (ib *BaseImageBuilder) Build() Image {
|
||||
Data: manifestBlob,
|
||||
}
|
||||
|
||||
img.Reference = img.ManifestDescriptor.Digest.String()
|
||||
|
||||
return img
|
||||
}
|
||||
|
||||
|
||||
@@ -83,7 +83,6 @@ func TestImageBuilder(t *testing.T) {
|
||||
img := configBuilder.EmptyConfig().Build()
|
||||
So(img.Manifest.Config.Size, ShouldEqual, ispec.DescriptorEmptyJSON.Size)
|
||||
So(img.Manifest.Config.Digest, ShouldResemble, ispec.DescriptorEmptyJSON.Digest)
|
||||
So(img.Reference, ShouldResemble, img.Digest().String())
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
@@ -307,7 +307,7 @@ func TestBaseOciLayoutUtils(t *testing.T) {
|
||||
defer ctlrManager.StopServer()
|
||||
|
||||
// push test image to repo
|
||||
config, layers, manifest, err := GetImageComponents(100)
|
||||
config, layers, manifest, err := GetImageComponents(100) //nolint:staticcheck
|
||||
So(err, ShouldBeNil)
|
||||
|
||||
layersSize1 := 0
|
||||
@@ -319,13 +319,10 @@ func TestBaseOciLayoutUtils(t *testing.T) {
|
||||
tag := "1.0.1"
|
||||
err = UploadImage(
|
||||
Image{
|
||||
Manifest: manifest,
|
||||
Config: config,
|
||||
Layers: layers,
|
||||
Reference: tag,
|
||||
},
|
||||
baseURL,
|
||||
repo,
|
||||
Manifest: manifest,
|
||||
Config: config,
|
||||
Layers: layers,
|
||||
}, baseURL, repo, tag,
|
||||
)
|
||||
So(err, ShouldBeNil)
|
||||
|
||||
@@ -357,16 +354,15 @@ func TestExtractImageDetails(t *testing.T) {
|
||||
}
|
||||
|
||||
num := 10
|
||||
config, layers, manifest, err := GetImageComponents(num)
|
||||
config, layers, manifest, err := GetImageComponents(num) //nolint:staticcheck
|
||||
So(err, ShouldBeNil)
|
||||
|
||||
err = WriteImageToFileSystem(
|
||||
Image{
|
||||
Manifest: manifest,
|
||||
Layers: layers,
|
||||
Config: config,
|
||||
Reference: "latest",
|
||||
}, "zot-test", storeController,
|
||||
Manifest: manifest,
|
||||
Layers: layers,
|
||||
Config: config,
|
||||
}, "zot-test", "latest", storeController,
|
||||
)
|
||||
So(err, ShouldBeNil)
|
||||
|
||||
@@ -414,16 +410,15 @@ func TestExtractImageDetails(t *testing.T) {
|
||||
}
|
||||
|
||||
num := 10
|
||||
config, layers, manifest, err := GetImageComponents(num)
|
||||
config, layers, manifest, err := GetImageComponents(num) //nolint:staticcheck
|
||||
So(err, ShouldBeNil)
|
||||
|
||||
err = WriteImageToFileSystem(
|
||||
Image{
|
||||
Manifest: manifest,
|
||||
Layers: layers,
|
||||
Config: config,
|
||||
Reference: "latest",
|
||||
}, "zot-test", storeController,
|
||||
Manifest: manifest,
|
||||
Layers: layers,
|
||||
Config: config,
|
||||
}, "zot-test", "latest", storeController,
|
||||
)
|
||||
So(err, ShouldBeNil)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user