zotregistry.dev/zot@v1.4.4-0.20240314164342-eec277e14d20/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.dev/zot/pkg/extensions/search/cve/model"
    15  	"zotregistry.dev/zot/pkg/meta/types"
    16  	"zotregistry.dev/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("cve.ContainsStr for package list", func() {
    24  			cve := cvemodel.CVE{
    25  				PackageList: []cvemodel.Package{
    26  					{
    27  						Name:             "NameTest",
    28  						PackagePath:      "/usr/bin/artifacts/dummy.jar",
    29  						FixedVersion:     "FixedVersionTest",
    30  						InstalledVersion: "InstalledVersionTest",
    31  					},
    32  					{
    33  						Name:             "NameTest",
    34  						PackagePath:      "/usr/local/artifacts/dummy.gem",
    35  						FixedVersion:     "FixedVersionTest",
    36  						InstalledVersion: "InstalledVersionTest",
    37  					},
    38  				},
    39  			}
    40  
    41  			So(cve.ContainsStr("NameTest"), ShouldBeTrue)
    42  			So(cve.ContainsStr("FixedVersionTest"), ShouldBeTrue)
    43  			So(cve.ContainsStr("InstalledVersionTest"), ShouldBeTrue)
    44  			So(cve.ContainsStr("/usr/bin/artifacts/dummy.jar"), ShouldBeTrue)
    45  			So(cve.ContainsStr("dummy.jar"), ShouldBeTrue)
    46  			So(cve.ContainsStr("/usr/local/artifacts/dummy.gem"), ShouldBeTrue)
    47  			So(cve.ContainsStr("dummy.gem"), ShouldBeTrue)
    48  		})
    49  		Convey("getConfigAndDigest", func() {
    50  			_, _, err := getConfigAndDigest(mocks.MetaDBMock{}, "bad-digest")
    51  			So(err, ShouldNotBeNil)
    52  
    53  			_, _, err = getConfigAndDigest(mocks.MetaDBMock{
    54  				GetImageMetaFn: func(digest digest.Digest) (types.ImageMeta, error) {
    55  					return types.ImageMeta{}, ErrTestError
    56  				},
    57  			}, ispec.DescriptorEmptyJSON.Digest.String())
    58  			So(err, ShouldNotBeNil)
    59  
    60  			// bad media type of config
    61  			_, _, err = getConfigAndDigest(mocks.MetaDBMock{
    62  				GetImageMetaFn: func(digest digest.Digest) (types.ImageMeta, error) {
    63  					return types.ImageMeta{Manifests: []types.ManifestMeta{
    64  						{Manifest: ispec.Manifest{Config: ispec.Descriptor{MediaType: "bad-type"}}},
    65  					}}, nil
    66  				},
    67  			}, ispec.DescriptorEmptyJSON.Digest.String())
    68  			So(err, ShouldNotBeNil)
    69  		})
    70  		Convey("getIndexContent", func() {
    71  			_, err := getIndexContent(mocks.MetaDBMock{}, "bad-digest")
    72  			So(err, ShouldNotBeNil)
    73  
    74  			_, err = getIndexContent(mocks.MetaDBMock{
    75  				GetImageMetaFn: func(digest digest.Digest) (types.ImageMeta, error) {
    76  					return types.ImageMeta{}, ErrTestError
    77  				},
    78  			}, ispec.DescriptorEmptyJSON.Digest.String())
    79  			So(err, ShouldNotBeNil)
    80  
    81  			// nil index
    82  			_, err = getIndexContent(mocks.MetaDBMock{
    83  				GetImageMetaFn: func(digest digest.Digest) (types.ImageMeta, error) {
    84  					return types.ImageMeta{}, nil
    85  				},
    86  			}, ispec.DescriptorEmptyJSON.Digest.String())
    87  			So(err, ShouldNotBeNil)
    88  		})
    89  
    90  		Convey("mostRecentUpdate", func() {
    91  			// empty
    92  			timestamp := mostRecentUpdate([]cvemodel.DescriptorInfo{})
    93  			So(timestamp, ShouldResemble, time.Time{})
    94  
    95  			timestamp = mostRecentUpdate([]cvemodel.DescriptorInfo{
    96  				{
    97  					Timestamp: time.Date(2000, 1, 1, 1, 1, 1, 1, time.UTC),
    98  				},
    99  				{
   100  					Timestamp: time.Date(2005, 1, 1, 1, 1, 1, 1, time.UTC),
   101  				},
   102  			})
   103  			So(timestamp, ShouldResemble, time.Date(2005, 1, 1, 1, 1, 1, 1, time.UTC))
   104  		})
   105  
   106  		Convey("GetFixedTags", func() {
   107  			tags := GetFixedTags(
   108  				[]cvemodel.TagInfo{
   109  					{},
   110  				},
   111  				[]cvemodel.TagInfo{
   112  					{
   113  						Descriptor: cvemodel.Descriptor{
   114  							MediaType: ispec.MediaTypeImageManifest,
   115  						},
   116  						Timestamp: time.Date(2010, 1, 1, 1, 1, 1, 1, time.UTC),
   117  					},
   118  					{
   119  						Descriptor: cvemodel.Descriptor{
   120  							MediaType: ispec.MediaTypeImageIndex,
   121  						},
   122  						Manifests: []cvemodel.DescriptorInfo{
   123  							{
   124  								Timestamp: time.Date(2002, 1, 1, 1, 1, 1, 1, time.UTC),
   125  							},
   126  							{
   127  								Timestamp: time.Date(2000, 1, 1, 1, 1, 1, 1, time.UTC),
   128  							},
   129  						},
   130  					},
   131  					{
   132  						Descriptor: cvemodel.Descriptor{
   133  							MediaType: "bad Type",
   134  						},
   135  					},
   136  				})
   137  			So(tags, ShouldBeEmpty)
   138  		})
   139  	})
   140  }