zotregistry.dev/zot@v1.4.4-0.20240314164342-eec277e14d20/pkg/meta/common/common_test.go (about) 1 package common_test 2 3 import ( 4 "errors" 5 "testing" 6 "time" 7 8 . "github.com/smartystreets/goconvey/convey" 9 10 "zotregistry.dev/zot/pkg/meta/common" 11 mTypes "zotregistry.dev/zot/pkg/meta/types" 12 ) 13 14 var ErrTestError = errors.New("test error") 15 16 func TestUtils(t *testing.T) { 17 Convey("GetPartialImageMeta", t, func() { 18 So(func() { common.GetPartialImageMeta(mTypes.ImageMeta{}, mTypes.ImageMeta{}) }, ShouldNotPanic) 19 }) 20 21 Convey("MatchesArtifactTypes", t, func() { 22 res := common.MatchesArtifactTypes("", nil) 23 So(res, ShouldBeTrue) 24 25 res = common.MatchesArtifactTypes("type", []string{"someOtherType"}) 26 So(res, ShouldBeFalse) 27 }) 28 29 Convey("GetProtoPlatform", t, func() { 30 platform := common.GetProtoPlatform(nil) 31 So(platform, ShouldBeNil) 32 }) 33 34 Convey("ValidateRepoReferenceInput", t, func() { 35 err := common.ValidateRepoReferenceInput("", "tag", "digest") 36 So(err, ShouldNotBeNil) 37 err = common.ValidateRepoReferenceInput("repo", "", "digest") 38 So(err, ShouldNotBeNil) 39 err = common.ValidateRepoReferenceInput("repo", "tag", "") 40 So(err, ShouldNotBeNil) 41 }) 42 43 Convey("CheckImageLastUpdated", t, func() { 44 Convey("No image checked, it doesn't have time", func() { 45 repoLastUpdated := time.Time{} 46 isSigned := false 47 noImageChecked := true 48 manifestFilterData := mTypes.FilterData{ 49 DownloadCount: 10, 50 LastUpdated: time.Time{}, 51 IsSigned: true, 52 } 53 54 repoLastUpdated, noImageChecked, isSigned = common.CheckImageLastUpdated(repoLastUpdated, isSigned, noImageChecked, 55 manifestFilterData) 56 So(repoLastUpdated, ShouldResemble, manifestFilterData.LastUpdated) 57 So(isSigned, ShouldEqual, manifestFilterData.IsSigned) 58 So(noImageChecked, ShouldEqual, false) 59 }) 60 61 Convey("First image checked, it has time", func() { 62 repoLastUpdated := time.Time{} 63 isSigned := false 64 noImageChecked := true 65 manifestFilterData := mTypes.FilterData{ 66 DownloadCount: 10, 67 LastUpdated: time.Date(2000, 1, 1, 1, 1, 1, 1, time.UTC), 68 IsSigned: true, 69 } 70 71 repoLastUpdated, noImageChecked, isSigned = common.CheckImageLastUpdated(repoLastUpdated, isSigned, noImageChecked, 72 manifestFilterData) 73 So(repoLastUpdated, ShouldResemble, manifestFilterData.LastUpdated) 74 So(isSigned, ShouldEqual, manifestFilterData.IsSigned) 75 So(noImageChecked, ShouldEqual, false) 76 }) 77 78 Convey("Not first image checked, current image is newer", func() { 79 repoLastUpdated := time.Date(2000, 1, 1, 1, 1, 1, 1, time.UTC) 80 isSigned := true 81 noImageChecked := false 82 manifestFilterData := mTypes.FilterData{ 83 DownloadCount: 10, 84 LastUpdated: time.Date(2023, 1, 1, 1, 1, 1, 1, time.UTC), 85 IsSigned: false, 86 } 87 88 repoLastUpdated, noImageChecked, isSigned = common.CheckImageLastUpdated(repoLastUpdated, isSigned, 89 noImageChecked, manifestFilterData) 90 So(repoLastUpdated, ShouldResemble, manifestFilterData.LastUpdated) 91 So(isSigned, ShouldEqual, manifestFilterData.IsSigned) 92 So(noImageChecked, ShouldEqual, false) 93 }) 94 95 Convey("Not first image checked, current image is older", func() { 96 repoLastUpdated := time.Date(2024, 1, 1, 1, 1, 1, 1, time.UTC) 97 isSigned := false 98 noImageChecked := false 99 manifestFilterData := mTypes.FilterData{ 100 DownloadCount: 10, 101 LastUpdated: time.Date(2022, 1, 1, 1, 1, 1, 1, time.UTC), 102 IsSigned: true, 103 } 104 105 updatedRepoLastUpdated, noImageChecked, isSigned := common.CheckImageLastUpdated(repoLastUpdated, isSigned, 106 noImageChecked, 107 manifestFilterData) 108 So(updatedRepoLastUpdated, ShouldResemble, repoLastUpdated) 109 So(isSigned, ShouldEqual, false) 110 So(noImageChecked, ShouldEqual, false) 111 }) 112 }) 113 114 Convey("SignatureAlreadyExists", t, func() { 115 res := common.SignatureAlreadyExists( 116 []mTypes.SignatureInfo{{SignatureManifestDigest: "digest"}}, 117 mTypes.SignatureMetadata{SignatureDigest: "digest"}, 118 ) 119 120 So(res, ShouldEqual, true) 121 122 res = common.SignatureAlreadyExists( 123 []mTypes.SignatureInfo{{SignatureManifestDigest: "digest"}}, 124 mTypes.SignatureMetadata{SignatureDigest: "digest2"}, 125 ) 126 127 So(res, ShouldEqual, false) 128 }) 129 }