1
0
Fork 0
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:
Charles-Edouard Brétéché 2023-02-10 07:17:36 +01:00 committed by GitHub
parent 7337d099bd
commit 3a48c1fcaa
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 393 additions and 135 deletions

View file

@ -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)
}

View file

@ -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)
}
})
}
}