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