package common_test import ( "errors" "testing" "time" . "github.com/smartystreets/goconvey/convey" "zotregistry.io/zot/pkg/meta/common" mTypes "zotregistry.io/zot/pkg/meta/types" ) var ErrTestError = errors.New("test error") func TestUtils(t *testing.T) { Convey("GetPartialImageMeta", t, func() { So(func() { common.GetPartialImageMeta(mTypes.ImageMeta{}, mTypes.ImageMeta{}) }, ShouldNotPanic) }) Convey("MatchesArtifactTypes", t, func() { res := common.MatchesArtifactTypes("", nil) So(res, ShouldBeTrue) res = common.MatchesArtifactTypes("type", []string{"someOtherType"}) So(res, ShouldBeFalse) }) Convey("GetProtoPlatform", t, func() { platform := common.GetProtoPlatform(nil) So(platform, ShouldBeNil) }) Convey("ValidateRepoReferenceInput", t, func() { err := common.ValidateRepoReferenceInput("", "tag", "digest") So(err, ShouldNotBeNil) err = common.ValidateRepoReferenceInput("repo", "", "digest") So(err, ShouldNotBeNil) err = common.ValidateRepoReferenceInput("repo", "tag", "") So(err, ShouldNotBeNil) }) Convey("CheckImageLastUpdated", t, func() { Convey("No image checked, it doesn't have time", func() { repoLastUpdated := time.Time{} isSigned := false noImageChecked := true manifestFilterData := mTypes.FilterData{ DownloadCount: 10, LastUpdated: time.Time{}, IsSigned: true, } repoLastUpdated, noImageChecked, isSigned = common.CheckImageLastUpdated(repoLastUpdated, isSigned, noImageChecked, manifestFilterData) So(repoLastUpdated, ShouldResemble, manifestFilterData.LastUpdated) So(isSigned, ShouldEqual, manifestFilterData.IsSigned) So(noImageChecked, ShouldEqual, false) }) Convey("First image checked, it has time", func() { repoLastUpdated := time.Time{} isSigned := false noImageChecked := true manifestFilterData := mTypes.FilterData{ DownloadCount: 10, LastUpdated: time.Date(2000, 1, 1, 1, 1, 1, 1, time.UTC), IsSigned: true, } repoLastUpdated, noImageChecked, isSigned = common.CheckImageLastUpdated(repoLastUpdated, isSigned, noImageChecked, manifestFilterData) So(repoLastUpdated, ShouldResemble, manifestFilterData.LastUpdated) So(isSigned, ShouldEqual, manifestFilterData.IsSigned) So(noImageChecked, ShouldEqual, false) }) Convey("Not first image checked, current image is newer", func() { repoLastUpdated := time.Date(2000, 1, 1, 1, 1, 1, 1, time.UTC) isSigned := true noImageChecked := false manifestFilterData := mTypes.FilterData{ DownloadCount: 10, LastUpdated: time.Date(2023, 1, 1, 1, 1, 1, 1, time.UTC), IsSigned: false, } repoLastUpdated, noImageChecked, isSigned = common.CheckImageLastUpdated(repoLastUpdated, isSigned, noImageChecked, manifestFilterData) So(repoLastUpdated, ShouldResemble, manifestFilterData.LastUpdated) So(isSigned, ShouldEqual, manifestFilterData.IsSigned) So(noImageChecked, ShouldEqual, false) }) Convey("Not first image checked, current image is older", func() { repoLastUpdated := time.Date(2024, 1, 1, 1, 1, 1, 1, time.UTC) isSigned := false noImageChecked := false manifestFilterData := mTypes.FilterData{ DownloadCount: 10, LastUpdated: time.Date(2022, 1, 1, 1, 1, 1, 1, time.UTC), IsSigned: true, } updatedRepoLastUpdated, noImageChecked, isSigned := common.CheckImageLastUpdated(repoLastUpdated, isSigned, noImageChecked, manifestFilterData) So(updatedRepoLastUpdated, ShouldResemble, repoLastUpdated) So(isSigned, ShouldEqual, false) So(noImageChecked, ShouldEqual, false) }) }) Convey("SignatureAlreadyExists", t, func() { res := common.SignatureAlreadyExists( []mTypes.SignatureInfo{{SignatureManifestDigest: "digest"}}, mTypes.SignatureMetadata{SignatureDigest: "digest"}, ) So(res, ShouldEqual, true) res = common.SignatureAlreadyExists( []mTypes.SignatureInfo{{SignatureManifestDigest: "digest"}}, mTypes.SignatureMetadata{SignatureDigest: "digest2"}, ) So(res, ShouldEqual, false) }) }