mirror of
https://github.com/kyverno/kyverno.git
synced 2024-12-14 11:57:48 +00:00
c96199dee1
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
234 lines
4.7 KiB
Go
234 lines
4.7 KiB
Go
package wildcard
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestContainsWildcard(t *testing.T) {
|
|
type args struct {
|
|
v string
|
|
}
|
|
tests := []struct {
|
|
name string
|
|
args args
|
|
want bool
|
|
}{{
|
|
name: "no wildcard",
|
|
args: args{
|
|
v: "name",
|
|
},
|
|
want: false,
|
|
}, {
|
|
name: "empty string",
|
|
args: args{
|
|
v: "",
|
|
},
|
|
want: false,
|
|
}, {
|
|
name: "contains * at the end",
|
|
args: args{
|
|
v: "name*",
|
|
},
|
|
want: true,
|
|
}, {
|
|
name: "contains * at the beginning",
|
|
args: args{
|
|
v: "*name",
|
|
},
|
|
want: true,
|
|
}, {
|
|
name: "contains * in the middle",
|
|
args: args{
|
|
v: "start*end",
|
|
},
|
|
want: true,
|
|
}, {
|
|
name: "only *",
|
|
args: args{
|
|
v: "*",
|
|
},
|
|
want: true,
|
|
}, {
|
|
name: "contains ? at the end",
|
|
args: args{
|
|
v: "name?",
|
|
},
|
|
want: true,
|
|
}, {
|
|
name: "contains ? at the beginning",
|
|
args: args{
|
|
v: "?name",
|
|
},
|
|
want: true,
|
|
}, {
|
|
name: "contains ? in the middle",
|
|
args: args{
|
|
v: "start?end",
|
|
},
|
|
want: true,
|
|
}, {
|
|
name: "only ?",
|
|
args: args{
|
|
v: "?",
|
|
},
|
|
want: true,
|
|
}, {
|
|
name: "both * and ?",
|
|
args: args{
|
|
v: "*name?",
|
|
},
|
|
want: true,
|
|
}}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
assert.Equal(t, tt.want, ContainsWildcard(tt.args.v))
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestCheckPatterns(t *testing.T) {
|
|
var patterns []string
|
|
var res bool
|
|
patterns = []string{"*"}
|
|
res = CheckPatterns(patterns, "default")
|
|
assert.Equal(t, true, res)
|
|
|
|
patterns = []string{"*", "default"}
|
|
res = CheckPatterns(patterns, "default")
|
|
assert.Equal(t, true, res)
|
|
|
|
patterns = []string{"default2", "default"}
|
|
res = CheckPatterns(patterns, "default1")
|
|
assert.Equal(t, false, res)
|
|
|
|
patterns = []string{"d*"}
|
|
res = CheckPatterns(patterns, "default")
|
|
assert.Equal(t, true, res)
|
|
|
|
patterns = []string{"d*"}
|
|
res = CheckPatterns(patterns, "test")
|
|
assert.Equal(t, false, res)
|
|
|
|
patterns = []string{}
|
|
res = CheckPatterns(patterns, "test")
|
|
assert.Equal(t, false, res)
|
|
}
|
|
|
|
func Test_MatchPatterns(t *testing.T) {
|
|
testcases := []struct {
|
|
description string
|
|
inputPatterns []string
|
|
inputNs []string
|
|
expString1 string
|
|
expString2 string
|
|
expBool bool
|
|
}{
|
|
{
|
|
description: "tc1",
|
|
inputPatterns: []string{"default*", "test*"},
|
|
inputNs: []string{"default", "default1"},
|
|
expString1: "default*",
|
|
expString2: "default",
|
|
expBool: true,
|
|
},
|
|
{
|
|
description: "tc2",
|
|
inputPatterns: []string{"test*"},
|
|
inputNs: []string{"default1", "test"},
|
|
expString1: "test*",
|
|
expString2: "test",
|
|
expBool: true,
|
|
},
|
|
{
|
|
description: "tc3",
|
|
inputPatterns: []string{"*"},
|
|
inputNs: []string{"default1", "test"},
|
|
expString1: "*",
|
|
expString2: "default1",
|
|
expBool: true,
|
|
},
|
|
{
|
|
description: "tc4",
|
|
inputPatterns: []string{"a*"},
|
|
inputNs: []string{"default1", "test"},
|
|
expString1: "",
|
|
expString2: "",
|
|
expBool: false,
|
|
},
|
|
{
|
|
description: "tc5",
|
|
inputPatterns: nil,
|
|
inputNs: []string{"default1", "test"},
|
|
expString1: "",
|
|
expString2: "",
|
|
expBool: false,
|
|
},
|
|
{
|
|
description: "tc6",
|
|
inputPatterns: []string{"*"},
|
|
inputNs: nil,
|
|
expString1: "",
|
|
expString2: "",
|
|
expBool: false,
|
|
},
|
|
{
|
|
description: "tc7",
|
|
inputPatterns: nil,
|
|
inputNs: nil,
|
|
expString1: "",
|
|
expString2: "",
|
|
expBool: false,
|
|
},
|
|
}
|
|
for _, tc := range testcases {
|
|
t.Run(tc.description, func(t *testing.T) {
|
|
str1, str2, actualBool := MatchPatterns(tc.inputPatterns, tc.inputNs...)
|
|
assert.Equal(t, str1, tc.expString1)
|
|
assert.Equal(t, str2, tc.expString2)
|
|
assert.Equal(t, actualBool, tc.expBool)
|
|
})
|
|
}
|
|
}
|
|
|
|
func Test_SeperateWildcards(t *testing.T) {
|
|
testcases := []struct {
|
|
description string
|
|
inputList []string
|
|
expList1 []string
|
|
expList2 []string
|
|
}{
|
|
{
|
|
description: "tc1",
|
|
inputList: []string{"test*", "default", "default1", "hello"},
|
|
expList1: []string{"test*"},
|
|
expList2: []string{"default", "default1", "hello"},
|
|
},
|
|
{
|
|
description: "tc2",
|
|
inputList: []string{"test*", "default*", "default1?", "hello?"},
|
|
expList1: []string{"test*", "default*", "default1?", "hello?"},
|
|
expList2: nil,
|
|
},
|
|
{
|
|
description: "tc3",
|
|
inputList: []string{"test", "default", "default1", "hello"},
|
|
expList1: nil,
|
|
expList2: []string{"test", "default", "default1", "hello"},
|
|
},
|
|
{
|
|
description: "tc4",
|
|
inputList: nil,
|
|
expList1: nil,
|
|
expList2: nil,
|
|
},
|
|
}
|
|
for _, tc := range testcases {
|
|
t.Run(tc.description, func(t *testing.T) {
|
|
list1, list2 := SeperateWildcards(tc.inputList)
|
|
assert.Equal(t, tc.expList1, list1)
|
|
assert.Equal(t, tc.expList2, list2)
|
|
})
|
|
}
|
|
}
|