github.com/snyk/vervet/v5@v5.11.1-0.20240202085829-ad4dd7fb6101/resource_test.go (about) 1 package vervet_test 2 3 import ( 4 "context" 5 "testing" 6 "time" 7 8 qt "github.com/frankban/quicktest" 9 10 . "github.com/snyk/vervet/v5" 11 "github.com/snyk/vervet/v5/testdata" 12 ) 13 14 func TestResource(t *testing.T) { 15 c := qt.New(t) 16 eps, err := LoadResourceVersions(testdata.Path("resources/_examples/hello-world")) 17 c.Assert(err, qt.IsNil) 18 c.Assert(eps.Versions(), qt.DeepEquals, VersionSlice{{ 19 Date: time.Date(2021, time.June, 1, 0, 0, 0, 0, time.UTC), 20 Stability: StabilityExperimental, 21 }, { 22 Date: time.Date(2021, time.June, 7, 0, 0, 0, 0, time.UTC), 23 Stability: StabilityExperimental, 24 }, { 25 Date: time.Date(2021, time.June, 13, 0, 0, 0, 0, time.UTC), 26 Stability: StabilityBeta, 27 }}) 28 for _, v := range eps.Versions() { 29 e, err := eps.At(v.String()) 30 c.Assert(err, qt.IsNil) 31 c.Assert(e.Validate(context.Background()), qt.IsNil) 32 c.Assert(e.Version, qt.DeepEquals, v) 33 } 34 } 35 36 func TestVersionRangesHelloWorld(t *testing.T) { 37 c := qt.New(t) 38 eps, err := LoadResourceVersions(testdata.Path("resources/_examples/hello-world")) 39 c.Assert(err, qt.IsNil) 40 tests := []struct { 41 query, match string 42 }{{ 43 query: "2021-07-01~experimental", 44 match: "2021-06-13~beta", 45 }, { 46 query: "2021-07-01~beta", 47 match: "2021-06-13~beta", 48 }, { 49 query: "2021-06-08~experimental", 50 match: "2021-06-07~experimental", 51 }} 52 for _, t := range tests { 53 e, err := eps.At(t.query) 54 c.Assert(err, qt.IsNil) 55 c.Assert(e.Version.String(), qt.Equals, t.match) 56 } 57 } 58 59 func TestVersionRangesProjects(t *testing.T) { 60 c := qt.New(t) 61 eps, err := LoadResourceVersions(testdata.Path("resources/projects")) 62 c.Assert(err, qt.IsNil) 63 c.Assert(eps.Versions(), qt.HasLen, 3) 64 tests := []struct { 65 query, match, err string 66 }{{ 67 query: "2021-07-01~experimental", 68 match: "2021-06-04~experimental", 69 }, { 70 query: "2021-07-01~beta", 71 err: `no matching version`, 72 }, { 73 query: "2021-07-01", 74 err: `no matching version`, 75 }} 76 for i, t := range tests { 77 c.Logf("test#%d: %#v", i, t) 78 e, err := eps.At(t.query) 79 if t.err != "" { 80 c.Assert(err, qt.ErrorMatches, t.err) 81 } else { 82 c.Assert(err, qt.IsNil) 83 c.Assert(e.Version.String(), qt.Equals, t.match) 84 } 85 } 86 } 87 88 func TestIsExtensionNotFound(t *testing.T) { 89 c := qt.New(t) 90 eps, err := LoadResourceVersions(testdata.Path("resources/_examples/hello-world")) 91 c.Assert(err, qt.IsNil) 92 resource, err := eps.At("2021-06-04~experimental") 93 c.Assert(err, qt.IsNil) 94 95 _, err = ExtensionString(resource.Extensions, ExtSnykApiVersion) 96 c.Assert(IsExtensionNotFound(err), qt.IsTrue) 97 98 _, err = ExtensionString(resource.Extensions, "some-bogus-value") 99 c.Assert(IsExtensionNotFound(err), qt.IsTrue) 100 101 _, err = ExtensionString(resource.Extensions, ExtSnykApiStability) 102 c.Assert(IsExtensionNotFound(err), qt.IsFalse) 103 } 104 105 func TestLoadResourceVersionsWithDuplicateSpecs(t *testing.T) { 106 c := qt.New(t) 107 resourceVersions, err := LoadResourceVersions(testdata.Path("duplicate-specs")) 108 dirPath := testdata.Path("duplicate-specs") 109 c.Assert(resourceVersions, qt.IsNil) 110 c.Assert(err, qt.IsNotNil) 111 c.Assert(err, qt.ErrorMatches, "duplicate spec found in "+dirPath+"/2022-08-31") 112 } 113 114 func TestResourceVersionsAtSunset(t *testing.T) { 115 c := qt.New(t) 116 eps, err := LoadResourceVersions(testdata.Path("sunset-specs")) 117 c.Assert(err, qt.IsNil) 118 c.Assert(eps.Versions(), qt.HasLen, 2) 119 tests := []struct { 120 query, match, err string 121 }{{ 122 query: "2023-01-01~experimental", 123 match: "2023-01-01~experimental", 124 }, { 125 query: "2023-01-10~experimental", 126 match: "2023-01-01~experimental", 127 }, { 128 query: "2023-02-01~experimental", 129 match: "2023-02-01~experimental", 130 }, { 131 query: "2023-03-01~experimental", 132 err: "no matching version", 133 }} 134 for i, t := range tests { 135 c.Logf("test#%d: %#v", i, t) 136 e, err := eps.At(t.query) 137 if t.err != "" { 138 c.Assert(err, qt.ErrorMatches, t.err) 139 } else { 140 c.Assert(err, qt.IsNil) 141 c.Assert(e.Version.String(), qt.Equals, t.match) 142 } 143 } 144 }