mirror of
https://github.com/kyverno/kyverno.git
synced 2025-04-09 10:42:22 +00:00
test: add pattern pkg unit tests (#6277)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
This commit is contained in:
parent
7337d099bd
commit
3a48c1fcaa
2 changed files with 393 additions and 135 deletions
|
@ -313,8 +313,6 @@ func convertNumberToString(value interface{}) (string, error) {
|
|||
return strconv.FormatInt(typed, 10), nil
|
||||
case int:
|
||||
return strconv.Itoa(typed), nil
|
||||
case nil:
|
||||
return "", fmt.Errorf("got empty string, expect %v", value)
|
||||
default:
|
||||
return "", fmt.Errorf("could not convert %v to string", typed)
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package pattern
|
||||
|
||||
import (
|
||||
"regexp"
|
||||
"testing"
|
||||
|
||||
"github.com/go-logr/logr"
|
||||
|
@ -8,80 +9,6 @@ import (
|
|||
"gotest.tools/assert"
|
||||
)
|
||||
|
||||
func TestValidateString_AsteriskTest(t *testing.T) {
|
||||
pattern := "*"
|
||||
value := "anything"
|
||||
empty := ""
|
||||
|
||||
assert.Assert(t, compareString(logr.Discard(), value, pattern, operator.Equal))
|
||||
assert.Assert(t, compareString(logr.Discard(), empty, pattern, operator.Equal))
|
||||
}
|
||||
|
||||
func TestValidateString_LeftAsteriskTest(t *testing.T) {
|
||||
pattern := "*right"
|
||||
value := "leftright"
|
||||
right := "right"
|
||||
|
||||
assert.Assert(t, compareString(logr.Discard(), value, pattern, operator.Equal))
|
||||
assert.Assert(t, compareString(logr.Discard(), right, pattern, operator.Equal))
|
||||
|
||||
value = "leftmiddle"
|
||||
middle := "middle"
|
||||
|
||||
assert.Assert(t, !compareString(logr.Discard(), value, pattern, operator.Equal))
|
||||
assert.Assert(t, !compareString(logr.Discard(), middle, pattern, operator.Equal))
|
||||
}
|
||||
|
||||
func TestValidateString_MiddleAsteriskTest(t *testing.T) {
|
||||
pattern := "ab*ba"
|
||||
value := "abbeba"
|
||||
assert.Assert(t, compareString(logr.Discard(), value, pattern, operator.Equal))
|
||||
|
||||
value = "abbca"
|
||||
assert.Assert(t, !compareString(logr.Discard(), value, pattern, operator.Equal))
|
||||
}
|
||||
|
||||
func TestValidateString_QuestionMark(t *testing.T) {
|
||||
pattern := "ab?ba"
|
||||
value := "abbba"
|
||||
assert.Assert(t, compareString(logr.Discard(), value, pattern, operator.Equal))
|
||||
|
||||
value = "abbbba"
|
||||
assert.Assert(t, !compareString(logr.Discard(), value, pattern, operator.Equal))
|
||||
}
|
||||
|
||||
func TestValidateValueWithNilPattern_NullPatternStringValue(t *testing.T) {
|
||||
assert.Assert(t, !validateNilPattern(logr.Discard(), "value"))
|
||||
}
|
||||
|
||||
func TestValidateValueWithNilPattern_NullPatternDefaultString(t *testing.T) {
|
||||
assert.Assert(t, validateNilPattern(logr.Discard(), ""))
|
||||
}
|
||||
|
||||
func TestValidateValueWithNilPattern_NullPatternDefaultFloat(t *testing.T) {
|
||||
assert.Assert(t, validateNilPattern(logr.Discard(), 0.0))
|
||||
}
|
||||
|
||||
func TestValidateValueWithNilPattern_NullPatternFloat(t *testing.T) {
|
||||
assert.Assert(t, !validateNilPattern(logr.Discard(), 0.1))
|
||||
}
|
||||
|
||||
func TestValidateValueWithNilPattern_NullPatternDefaultInt(t *testing.T) {
|
||||
assert.Assert(t, validateNilPattern(logr.Discard(), 0))
|
||||
}
|
||||
|
||||
func TestValidateValueWithNilPattern_NullPatternInt(t *testing.T) {
|
||||
assert.Assert(t, !validateNilPattern(logr.Discard(), 1))
|
||||
}
|
||||
|
||||
func TestValidateValueWithNilPattern_NullPatternDefaultBool(t *testing.T) {
|
||||
assert.Assert(t, validateNilPattern(logr.Discard(), false))
|
||||
}
|
||||
|
||||
func TestValidateValueWithNilPattern_NullPatternTrueBool(t *testing.T) {
|
||||
assert.Assert(t, !validateNilPattern(logr.Discard(), true))
|
||||
}
|
||||
|
||||
func TestValidateValueWithFloatPattern_FloatValue(t *testing.T) {
|
||||
assert.Assert(t, validateFloatPattern(logr.Discard(), 7.9914, 7.9914))
|
||||
}
|
||||
|
@ -229,14 +156,6 @@ func TestGetOperatorFromStringPattern_EmptyString(t *testing.T) {
|
|||
assert.Equal(t, operator.GetOperatorFromStringPattern(""), operator.Equal)
|
||||
}
|
||||
|
||||
func TestValidateKernelVersion_NotEquals(t *testing.T) {
|
||||
assert.Assert(t, validateStringPattern(logr.Discard(), "5.16.5-arch1-1", "!5.10.84-1"))
|
||||
assert.Assert(t, !validateStringPattern(logr.Discard(), "5.10.84-1", "!5.10.84-1"))
|
||||
assert.Assert(t, validateStringPatterns(logr.Discard(), "5.16.5-arch1-1", "!5.10.84-1 & !5.15.2-1"))
|
||||
assert.Assert(t, !validateStringPatterns(logr.Discard(), "5.10.84-1", "!5.10.84-1 & !5.15.2-1"))
|
||||
assert.Assert(t, !validateStringPatterns(logr.Discard(), "5.15.2-1", "!5.10.84-1 & !5.15.2-1"))
|
||||
}
|
||||
|
||||
func TestValidate(t *testing.T) {
|
||||
type args struct {
|
||||
value interface{}
|
||||
|
@ -428,57 +347,55 @@ func TestValidate(t *testing.T) {
|
|||
pattern: 8,
|
||||
},
|
||||
want: false,
|
||||
},
|
||||
|
||||
{
|
||||
args: args{
|
||||
value: 8,
|
||||
pattern: 8.0,
|
||||
},
|
||||
want: true,
|
||||
}, {
|
||||
args: args{
|
||||
value: 8,
|
||||
pattern: 8.1,
|
||||
},
|
||||
want: false,
|
||||
}, {
|
||||
args: args{
|
||||
value: int64(8),
|
||||
pattern: 8.0,
|
||||
},
|
||||
want: true,
|
||||
}, {
|
||||
args: args{
|
||||
value: int64(8),
|
||||
pattern: 8.1,
|
||||
},
|
||||
want: false,
|
||||
}, {
|
||||
args: args{
|
||||
value: "8",
|
||||
pattern: 8.0,
|
||||
},
|
||||
want: true,
|
||||
}, {
|
||||
args: args{
|
||||
value: "8.1",
|
||||
pattern: 8.1,
|
||||
},
|
||||
want: true,
|
||||
}, {
|
||||
args: args{
|
||||
value: "abc",
|
||||
pattern: 8.1,
|
||||
},
|
||||
want: false,
|
||||
}, {
|
||||
args: args{
|
||||
value: false,
|
||||
pattern: 8.0,
|
||||
},
|
||||
want: false,
|
||||
}}
|
||||
}, {
|
||||
args: args{
|
||||
value: 8,
|
||||
pattern: 8.0,
|
||||
},
|
||||
want: true,
|
||||
}, {
|
||||
args: args{
|
||||
value: 8,
|
||||
pattern: 8.1,
|
||||
},
|
||||
want: false,
|
||||
}, {
|
||||
args: args{
|
||||
value: int64(8),
|
||||
pattern: 8.0,
|
||||
},
|
||||
want: true,
|
||||
}, {
|
||||
args: args{
|
||||
value: int64(8),
|
||||
pattern: 8.1,
|
||||
},
|
||||
want: false,
|
||||
}, {
|
||||
args: args{
|
||||
value: "8",
|
||||
pattern: 8.0,
|
||||
},
|
||||
want: true,
|
||||
}, {
|
||||
args: args{
|
||||
value: "8.1",
|
||||
pattern: 8.1,
|
||||
},
|
||||
want: true,
|
||||
}, {
|
||||
args: args{
|
||||
value: "abc",
|
||||
pattern: 8.1,
|
||||
},
|
||||
want: false,
|
||||
}, {
|
||||
args: args{
|
||||
value: false,
|
||||
pattern: 8.0,
|
||||
},
|
||||
want: false,
|
||||
}}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
if got := Validate(logr.Discard(), tt.args.value, tt.args.pattern); got != tt.want {
|
||||
|
@ -643,3 +560,346 @@ func Test_validateMapPattern(t *testing.T) {
|
|||
})
|
||||
}
|
||||
}
|
||||
|
||||
func Test_validateNilPattern(t *testing.T) {
|
||||
type args struct {
|
||||
value interface{}
|
||||
}
|
||||
tests := []struct {
|
||||
name string
|
||||
args args
|
||||
want bool
|
||||
}{{
|
||||
args: args{
|
||||
value: nil,
|
||||
},
|
||||
want: true,
|
||||
}, {
|
||||
args: args{
|
||||
value: 0.0,
|
||||
},
|
||||
want: true,
|
||||
}, {
|
||||
args: args{
|
||||
value: 0,
|
||||
},
|
||||
want: true,
|
||||
}, {
|
||||
args: args{
|
||||
value: int64(0),
|
||||
},
|
||||
want: true,
|
||||
}, {
|
||||
args: args{
|
||||
value: "",
|
||||
},
|
||||
want: true,
|
||||
}, {
|
||||
args: args{
|
||||
value: false,
|
||||
},
|
||||
want: true,
|
||||
}, {
|
||||
args: args{
|
||||
value: map[string]interface{}{},
|
||||
},
|
||||
want: false,
|
||||
}, {
|
||||
args: args{
|
||||
value: []interface{}{},
|
||||
},
|
||||
want: false,
|
||||
}, {
|
||||
args: args{
|
||||
value: map[string]string{},
|
||||
},
|
||||
want: false,
|
||||
}, {
|
||||
args: args{
|
||||
value: 1.0,
|
||||
},
|
||||
want: false,
|
||||
}, {
|
||||
args: args{
|
||||
value: 1,
|
||||
},
|
||||
want: false,
|
||||
}, {
|
||||
args: args{
|
||||
value: int64(1),
|
||||
},
|
||||
want: false,
|
||||
}, {
|
||||
args: args{
|
||||
value: "abc",
|
||||
},
|
||||
want: false,
|
||||
}, {
|
||||
args: args{
|
||||
value: true,
|
||||
},
|
||||
want: false,
|
||||
}}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
if got := validateNilPattern(logr.Discard(), tt.args.value); got != tt.want {
|
||||
t.Errorf("validateNilPattern() = %v, want %v", got, tt.want)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func Test_validateStringPatterns(t *testing.T) {
|
||||
type args struct {
|
||||
value interface{}
|
||||
pattern string
|
||||
}
|
||||
tests := []struct {
|
||||
name string
|
||||
args args
|
||||
want bool
|
||||
}{
|
||||
{
|
||||
args: args{
|
||||
value: "5.16.5-arch1-1",
|
||||
pattern: "!5.10.84-1",
|
||||
},
|
||||
want: true,
|
||||
},
|
||||
{
|
||||
args: args{
|
||||
value: "5.10.84-1",
|
||||
pattern: "5.10.84-1",
|
||||
},
|
||||
want: true,
|
||||
},
|
||||
{
|
||||
args: args{
|
||||
value: "!5.10.84-1",
|
||||
pattern: "!5.10.84-1",
|
||||
},
|
||||
want: true,
|
||||
},
|
||||
{
|
||||
args: args{
|
||||
value: "5.10.84-1",
|
||||
pattern: "!5.10.84-1",
|
||||
},
|
||||
want: false,
|
||||
},
|
||||
{
|
||||
args: args{
|
||||
value: "5.16.5-arch1-1",
|
||||
pattern: "!5.10.84-1 & !5.15.2-1",
|
||||
},
|
||||
want: true,
|
||||
},
|
||||
{
|
||||
args: args{
|
||||
value: "5.10.84-1",
|
||||
pattern: "!5.10.84-1 & !5.15.2-1",
|
||||
},
|
||||
want: false,
|
||||
},
|
||||
{
|
||||
args: args{
|
||||
value: "5.15.2-1",
|
||||
pattern: "!5.10.84-1 & !5.15.2-1",
|
||||
},
|
||||
want: false,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
if got := validateStringPatterns(logr.Discard(), tt.args.value, tt.args.pattern); got != tt.want {
|
||||
t.Errorf("validateStringPatterns() = %v, want %v", got, tt.want)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func Test_split(t *testing.T) {
|
||||
type args struct {
|
||||
pattern string
|
||||
r *regexp.Regexp
|
||||
}
|
||||
tests := []struct {
|
||||
name string
|
||||
args args
|
||||
want string
|
||||
want1 string
|
||||
want2 bool
|
||||
}{{
|
||||
args: args{
|
||||
pattern: "",
|
||||
r: operator.InRangeRegex,
|
||||
},
|
||||
want: "",
|
||||
want1: "",
|
||||
want2: false,
|
||||
}, {
|
||||
args: args{
|
||||
pattern: "",
|
||||
r: operator.NotInRangeRegex,
|
||||
},
|
||||
want: "",
|
||||
want1: "",
|
||||
want2: false,
|
||||
}}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
got, got1, got2 := split(tt.args.pattern, tt.args.r)
|
||||
if got != tt.want {
|
||||
t.Errorf("split() got = %v, want %v", got, tt.want)
|
||||
}
|
||||
if got1 != tt.want1 {
|
||||
t.Errorf("split() got1 = %v, want %v", got1, tt.want1)
|
||||
}
|
||||
if got2 != tt.want2 {
|
||||
t.Errorf("split() got2 = %v, want %v", got2, tt.want2)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func Test_compareString(t *testing.T) {
|
||||
type args struct {
|
||||
value interface{}
|
||||
pattern string
|
||||
operatorVariable operator.Operator
|
||||
}
|
||||
tests := []struct {
|
||||
name string
|
||||
args args
|
||||
want bool
|
||||
}{
|
||||
{
|
||||
args: args{
|
||||
value: "anything",
|
||||
pattern: "*",
|
||||
operatorVariable: operator.Equal,
|
||||
},
|
||||
want: true,
|
||||
}, {
|
||||
args: args{
|
||||
value: "",
|
||||
pattern: "*",
|
||||
operatorVariable: operator.Equal,
|
||||
},
|
||||
want: true,
|
||||
}, {
|
||||
args: args{
|
||||
value: "leftright",
|
||||
pattern: "*right",
|
||||
operatorVariable: operator.Equal,
|
||||
},
|
||||
want: true,
|
||||
}, {
|
||||
args: args{
|
||||
value: "right",
|
||||
pattern: "*right",
|
||||
operatorVariable: operator.Equal,
|
||||
},
|
||||
want: true,
|
||||
}, {
|
||||
args: args{
|
||||
value: "leftmiddle",
|
||||
pattern: "*right",
|
||||
operatorVariable: operator.Equal,
|
||||
},
|
||||
want: false,
|
||||
}, {
|
||||
args: args{
|
||||
value: "middle",
|
||||
pattern: "*right",
|
||||
operatorVariable: operator.Equal,
|
||||
},
|
||||
want: false,
|
||||
}, {
|
||||
args: args{
|
||||
value: "abbeba",
|
||||
pattern: "ab*ba",
|
||||
operatorVariable: operator.Equal,
|
||||
},
|
||||
want: true,
|
||||
}, {
|
||||
args: args{
|
||||
value: "abbca",
|
||||
pattern: "ab*ba",
|
||||
operatorVariable: operator.Equal,
|
||||
},
|
||||
want: false,
|
||||
}, {
|
||||
args: args{
|
||||
value: "abbba",
|
||||
pattern: "ab?ba",
|
||||
operatorVariable: operator.Equal,
|
||||
},
|
||||
want: true,
|
||||
}, {
|
||||
args: args{
|
||||
value: "abbbba",
|
||||
pattern: "ab?ba",
|
||||
operatorVariable: operator.Equal,
|
||||
},
|
||||
want: false,
|
||||
}, {
|
||||
args: args{
|
||||
value: nil,
|
||||
pattern: "ab?ba",
|
||||
operatorVariable: operator.Equal,
|
||||
},
|
||||
want: false,
|
||||
}, {
|
||||
args: args{
|
||||
value: "",
|
||||
pattern: "ab?ba",
|
||||
operatorVariable: operator.Equal,
|
||||
},
|
||||
want: false,
|
||||
}, {
|
||||
args: args{
|
||||
value: "",
|
||||
pattern: "",
|
||||
operatorVariable: operator.Equal,
|
||||
},
|
||||
want: true,
|
||||
}, {
|
||||
args: args{
|
||||
value: 1,
|
||||
pattern: "1",
|
||||
operatorVariable: operator.Equal,
|
||||
},
|
||||
want: true,
|
||||
}, {
|
||||
args: args{
|
||||
value: int64(1),
|
||||
pattern: "1",
|
||||
operatorVariable: operator.Equal,
|
||||
},
|
||||
want: true,
|
||||
}, {
|
||||
args: args{
|
||||
value: 1.0,
|
||||
pattern: "1E+*",
|
||||
operatorVariable: operator.Equal,
|
||||
},
|
||||
want: true,
|
||||
}, {
|
||||
args: args{
|
||||
value: true,
|
||||
pattern: "true",
|
||||
operatorVariable: operator.Equal,
|
||||
},
|
||||
want: true,
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
if got := compareString(logr.Discard(), tt.args.value, tt.args.pattern, tt.args.operatorVariable); got != tt.want {
|
||||
t.Errorf("compareString() = %v, want %v", got, tt.want)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue