zotregistry.io/zot@v1.4.4-0.20231124084042-02a8ed785457/pkg/extensions/search/cve/cve_internal_test.go (about)

     1  //go:build search
     2  
     3  package cveinfo
     4  
     5  import (
     6  	"errors"
     7  	"testing"
     8  	"time"
     9  
    10  	"github.com/opencontainers/go-digest"
    11  	ispec "github.com/opencontainers/image-spec/specs-go/v1"
    12  	. "github.com/smartystreets/goconvey/convey"
    13  
    14  	cvemodel "zotregistry.io/zot/pkg/extensions/search/cve/model"
    15  	"zotregistry.io/zot/pkg/meta/types"
    16  	"zotregistry.io/zot/pkg/test/mocks"
    17  )
    18  
    19  var ErrTestError = errors.New("test error")
    20  
    21  func TestUtils(t *testing.T) {
    22  	Convey("Utils", t, func() {
    23  		Convey("getConfigAndDigest", func() {
    24  			_, _, err := getConfigAndDigest(mocks.MetaDBMock{}, "bad-digest")
    25  			So(err, ShouldNotBeNil)
    26  
    27  			_, _, err = getConfigAndDigest(mocks.MetaDBMock{
    28  				GetImageMetaFn: func(digest digest.Digest) (types.ImageMeta, error) {
    29  					return types.ImageMeta{}, ErrTestError
    30  				},
    31  			}, ispec.DescriptorEmptyJSON.Digest.String())
    32  			So(err, ShouldNotBeNil)
    33  
    34  			// bad media type of config
    35  			_, _, err = getConfigAndDigest(mocks.MetaDBMock{
    36  				GetImageMetaFn: func(digest digest.Digest) (types.ImageMeta, error) {
    37  					return types.ImageMeta{Manifests: []types.ManifestMeta{
    38  						{Manifest: ispec.Manifest{Config: ispec.Descriptor{MediaType: "bad-type"}}},
    39  					}}, nil
    40  				},
    41  			}, ispec.DescriptorEmptyJSON.Digest.String())
    42  			So(err, ShouldNotBeNil)
    43  		})
    44  		Convey("getIndexContent", func() {
    45  			_, err := getIndexContent(mocks.MetaDBMock{}, "bad-digest")
    46  			So(err, ShouldNotBeNil)
    47  
    48  			_, err = getIndexContent(mocks.MetaDBMock{
    49  				GetImageMetaFn: func(digest digest.Digest) (types.ImageMeta, error) {
    50  					return types.ImageMeta{}, ErrTestError
    51  				},
    52  			}, ispec.DescriptorEmptyJSON.Digest.String())
    53  			So(err, ShouldNotBeNil)
    54  
    55  			// nil index
    56  			_, err = getIndexContent(mocks.MetaDBMock{
    57  				GetImageMetaFn: func(digest digest.Digest) (types.ImageMeta, error) {
    58  					return types.ImageMeta{}, nil
    59  				},
    60  			}, ispec.DescriptorEmptyJSON.Digest.String())
    61  			So(err, ShouldNotBeNil)
    62  		})
    63  
    64  		Convey("mostRecentUpdate", func() {
    65  			// empty
    66  			timestamp := mostRecentUpdate([]cvemodel.DescriptorInfo{})
    67  			So(timestamp, ShouldResemble, time.Time{})
    68  
    69  			timestamp = mostRecentUpdate([]cvemodel.DescriptorInfo{
    70  				{
    71  					Timestamp: time.Date(2000, 1, 1, 1, 1, 1, 1, time.UTC),
    72  				},
    73  				{
    74  					Timestamp: time.Date(2005, 1, 1, 1, 1, 1, 1, time.UTC),
    75  				},
    76  			})
    77  			So(timestamp, ShouldResemble, time.Date(2005, 1, 1, 1, 1, 1, 1, time.UTC))
    78  		})
    79  
    80  		Convey("GetFixedTags", func() {
    81  			tags := GetFixedTags(
    82  				[]cvemodel.TagInfo{
    83  					{},
    84  				},
    85  				[]cvemodel.TagInfo{
    86  					{
    87  						Descriptor: cvemodel.Descriptor{
    88  							MediaType: ispec.MediaTypeImageManifest,
    89  						},
    90  						Timestamp: time.Date(2010, 1, 1, 1, 1, 1, 1, time.UTC),
    91  					},
    92  					{
    93  						Descriptor: cvemodel.Descriptor{
    94  							MediaType: ispec.MediaTypeImageIndex,
    95  						},
    96  						Manifests: []cvemodel.DescriptorInfo{
    97  							{
    98  								Timestamp: time.Date(2002, 1, 1, 1, 1, 1, 1, time.UTC),
    99  							},
   100  							{
   101  								Timestamp: time.Date(2000, 1, 1, 1, 1, 1, 1, time.UTC),
   102  							},
   103  						},
   104  					},
   105  					{
   106  						Descriptor: cvemodel.Descriptor{
   107  							MediaType: "bad Type",
   108  						},
   109  					},
   110  				})
   111  			So(tags, ShouldBeEmpty)
   112  		})
   113  	})
   114  }