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 }