Merge pull request #1637 from AllenZMC/improve_test

add ut for rules
This commit is contained in:
karmada-bot 2022-04-22 11:41:07 +08:00 committed by GitHub
commit a3c334c3b1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 299 additions and 0 deletions

View File

@ -0,0 +1,299 @@
package interpreter
import (
"testing"
"k8s.io/apimachinery/pkg/runtime/schema"
configv1alpha1 "github.com/karmada-io/karmada/pkg/apis/config/v1alpha1"
)
func TestOperation(t *testing.T) {
tests := []struct {
name string
matcher *Matcher
expected bool
}{
{
name: "operations with wildcard",
matcher: &Matcher{
Rule: configv1alpha1.RuleWithOperations{
Operations: []configv1alpha1.InterpreterOperation{
configv1alpha1.InterpreterOperationAll,
configv1alpha1.InterpreterOperationInterpretReplica,
},
},
},
expected: true,
},
{
name: "equal operations",
matcher: &Matcher{
Operation: configv1alpha1.InterpreterOperationRetain,
Rule: configv1alpha1.RuleWithOperations{
Operations: []configv1alpha1.InterpreterOperation{
configv1alpha1.InterpreterOperationRetain,
configv1alpha1.InterpreterOperationInterpretReplica,
},
},
},
expected: true,
},
{
name: "not equal operations",
matcher: &Matcher{
Operation: configv1alpha1.InterpreterOperationPrune,
Rule: configv1alpha1.RuleWithOperations{
Operations: []configv1alpha1.InterpreterOperation{
configv1alpha1.InterpreterOperationRetain,
configv1alpha1.InterpreterOperationInterpretReplica,
},
},
},
expected: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
res := tt.matcher.operation()
if res != tt.expected {
t.Errorf("operation() = %v, want %v", res, tt.expected)
}
})
}
}
func TestGroup(t *testing.T) {
tests := []struct {
name string
matcher *Matcher
expected bool
}{
{
name: "group with wildcard",
matcher: &Matcher{
ObjGVK: schema.GroupVersionKind{
Group: "apps",
Version: "v1",
Kind: "Deployment",
},
Rule: configv1alpha1.RuleWithOperations{
Rule: configv1alpha1.Rule{
APIGroups: []string{Wildcard},
},
},
},
expected: true,
},
{
name: "equal group",
matcher: &Matcher{
ObjGVK: schema.GroupVersionKind{
Group: "apps",
Version: "v1",
Kind: "Deployment",
},
Rule: configv1alpha1.RuleWithOperations{
Rule: configv1alpha1.Rule{
APIGroups: []string{"batch", "apps"},
},
},
},
expected: true,
},
{
name: "not equal group",
matcher: &Matcher{
ObjGVK: schema.GroupVersionKind{
Group: "apps",
Version: "v1",
Kind: "Deployment",
},
Rule: configv1alpha1.RuleWithOperations{
Rule: configv1alpha1.Rule{
APIGroups: []string{"batch"},
},
},
},
expected: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
res := tt.matcher.group()
if res != tt.expected {
t.Errorf("group() = %v, want %v", res, tt.expected)
}
})
}
}
func TestVersion(t *testing.T) {
tests := []struct {
name string
matcher *Matcher
expected bool
}{
{
name: "version with wildcard",
matcher: &Matcher{
ObjGVK: schema.GroupVersionKind{
Group: "apps",
Version: "v1",
Kind: "Deployment",
},
Rule: configv1alpha1.RuleWithOperations{
Rule: configv1alpha1.Rule{
APIVersions: []string{Wildcard},
},
},
},
expected: true,
},
{
name: "equal version",
matcher: &Matcher{
ObjGVK: schema.GroupVersionKind{
Group: "apps",
Version: "v1",
Kind: "Deployment",
},
Rule: configv1alpha1.RuleWithOperations{
Rule: configv1alpha1.Rule{
APIVersions: []string{"v1", "v1beta1"},
},
},
},
expected: true,
},
{
name: "not equal version",
matcher: &Matcher{
ObjGVK: schema.GroupVersionKind{
Group: "apps",
Version: "v1",
Kind: "Deployment",
},
Rule: configv1alpha1.RuleWithOperations{
Rule: configv1alpha1.Rule{
APIVersions: []string{"v1beta1"},
},
},
},
expected: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
res := tt.matcher.version()
if res != tt.expected {
t.Errorf("version() = %v, want %v", res, tt.expected)
}
})
}
}
func TestKind(t *testing.T) {
tests := []struct {
name string
matcher *Matcher
expected bool
}{
{
name: "kind with wildcard",
matcher: &Matcher{
ObjGVK: schema.GroupVersionKind{
Group: "apps",
Version: "v1",
Kind: "Deployment",
},
Rule: configv1alpha1.RuleWithOperations{
Rule: configv1alpha1.Rule{
Kinds: []string{Wildcard},
},
},
},
expected: true,
},
{
name: "equal kind",
matcher: &Matcher{
ObjGVK: schema.GroupVersionKind{
Group: "apps",
Version: "v1",
Kind: "Deployment",
},
Rule: configv1alpha1.RuleWithOperations{
Rule: configv1alpha1.Rule{
Kinds: []string{"Pod", "Deployment"},
},
},
},
expected: true,
},
{
name: "not equal kind",
matcher: &Matcher{
ObjGVK: schema.GroupVersionKind{
Group: "apps",
Version: "v1",
Kind: "Deployment",
},
Rule: configv1alpha1.RuleWithOperations{
Rule: configv1alpha1.Rule{
Kinds: []string{"Pod"},
},
},
},
expected: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
res := tt.matcher.kind()
if res != tt.expected {
t.Errorf("kind() = %v, want %v", res, tt.expected)
}
})
}
}
func TestExactOrWildcard(t *testing.T) {
tests := []struct {
name string
requested string
items []string
expected bool
}{
{
name: "wildcard",
items: []string{Wildcard},
expected: true,
},
{
name: "equal",
requested: "foo",
items: []string{"foo", "bar"},
expected: true,
},
{
name: "not equal",
requested: "foo",
items: []string{"bar"},
expected: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
res := exactOrWildcard(tt.requested, tt.items)
if res != tt.expected {
t.Errorf("exactOrWildcard() = %v, want %v", res, tt.expected)
}
})
}
}