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  }