Skip to content

Commit 0d557cb

Browse files
rmetzmanRebecca Metzman
and
Rebecca Metzman
authored
DoesRangeInclude function (guacsec#886)
* added functionality to DoesRangeInclde + tests Signed-off-by: Rebecca Metzman <[email protected]> * style Signed-off-by: Rebecca Metzman <[email protected]> * adding sign-off Signed-off-by: Rebecca Metzman <[email protected]> * adding testing for errors Signed-off-by: Rebecca Metzman <[email protected]> * resolved comments Signed-off-by: Rebecca Metzman <[email protected]> --------- Signed-off-by: Rebecca Metzman <[email protected]> Co-authored-by: Rebecca Metzman <[email protected]>
1 parent 7a87726 commit 0d557cb

File tree

2 files changed

+67
-2
lines changed

2 files changed

+67
-2
lines changed

pkg/misc/depversion/depversion.go

+11-2
Original file line numberDiff line numberDiff line change
@@ -116,9 +116,18 @@ func ParseVersionValue(s string) VersionValue {
116116
return vv
117117
}
118118

119-
// TODO: implement for more efficient traversal later
120119
func DoesRangeInclude(versions []string, versionRange string) (bool, error) {
121-
return false, fmt.Errorf("unimplemented")
120+
versionMap, err := WhichVersionMatches(versions, versionRange)
121+
122+
if err != nil {
123+
return false, fmt.Errorf("error for DoesRangeInclude %v", err)
124+
}
125+
126+
for len(versionMap) > 0 {
127+
return true, nil
128+
}
129+
130+
return false, nil
122131
}
123132

124133
type VersionRange struct {

pkg/misc/depversion/depversion_test.go

+56
Original file line numberDiff line numberDiff line change
@@ -442,3 +442,59 @@ func Test_WhichVersionMatches(t *testing.T) {
442442
})
443443
}
444444
}
445+
446+
func Test_DoesRangeInclude(t *testing.T) {
447+
testCases := []struct {
448+
versions []string
449+
versionRange string
450+
expect bool
451+
}{
452+
{
453+
versionRange: ">=1.0,<=2.0",
454+
versions: []string{"1.5"},
455+
expect: true,
456+
},
457+
{
458+
versionRange: ">=1.0,<=2.0",
459+
versions: []string{"1.0", "2.0", "3.0"},
460+
expect: true,
461+
},
462+
{
463+
versionRange: ">=1.0,<=2.0",
464+
versions: []string{"3.0", "2.1"},
465+
expect: false,
466+
},
467+
{
468+
versionRange: ">1.0,<2.0",
469+
versions: []string{"3.0", "1.0", "2.0"},
470+
expect: false,
471+
},
472+
}
473+
474+
for _, tt := range testCases {
475+
t.Run(fmt.Sprintf("does range include %s", tt.versionRange), func(t *testing.T) {
476+
got, err := DoesRangeInclude(tt.versions, tt.versionRange)
477+
if err != nil {
478+
t.Errorf("got err from DoesRangeInclude: %v", err)
479+
return
480+
}
481+
482+
if diff := cmp.Diff(tt.expect, got); len(diff) > 0 {
483+
t.Errorf("(-want +got):\n%s", diff)
484+
}
485+
})
486+
}
487+
}
488+
489+
func Test_DoesRangeInclude_Errors(t *testing.T) {
490+
res1, err1 := DoesRangeInclude([]string{"3.0", "1.0", "2.0"}, ">1.0 , <2.0")
491+
res2, err2 := DoesRangeInclude([]string{"anythinggoes", "1.0", "2.0"}, "bad range")
492+
493+
if err1 != nil || err2 != nil {
494+
t.Errorf("expected error for DoesRangeInclude and did not receive an error")
495+
}
496+
497+
if res1 != false || res2 != false {
498+
t.Errorf("expected error for DoesRangeInclude and did not receive false result as expected")
499+
}
500+
}

0 commit comments

Comments
 (0)