343 lines
7.9 KiB
Go
343 lines
7.9 KiB
Go
package util
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
|
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
|
)
|
|
|
|
func TestSkippedResourceConfigGVKParse(t *testing.T) {
|
|
tests := []struct {
|
|
input string
|
|
out []schema.GroupVersionKind
|
|
}{
|
|
{
|
|
input: "v1/Node,Pod;networking.k8s.io/v1beta1/Ingress,IngressClass",
|
|
out: []schema.GroupVersionKind{
|
|
{
|
|
Group: "",
|
|
Version: "v1",
|
|
Kind: "Node",
|
|
},
|
|
{
|
|
Group: "",
|
|
Version: "v1",
|
|
Kind: "Pod",
|
|
},
|
|
{
|
|
Group: "networking.k8s.io",
|
|
Version: "v1beta1",
|
|
Kind: "Ingress",
|
|
},
|
|
{
|
|
Group: "networking.k8s.io",
|
|
Version: "v1beta1",
|
|
Kind: "IngressClass",
|
|
},
|
|
}},
|
|
}
|
|
for _, test := range tests {
|
|
r := NewSkippedResourceConfig()
|
|
if err := r.Parse(test.input); err != nil {
|
|
t.Fatalf("Unexpected error: %v", err)
|
|
}
|
|
for i, o := range test.out {
|
|
ok := r.GroupVersionKindDisabled(o)
|
|
if !ok {
|
|
t.Errorf("%d: unexpected error: %v", i, o)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
func TestResourceConfigGVParse(t *testing.T) {
|
|
tests := []struct {
|
|
input string
|
|
out []schema.GroupVersion
|
|
}{
|
|
{
|
|
input: "networking.k8s.io/v1;test/v1beta1",
|
|
out: []schema.GroupVersion{
|
|
{
|
|
Group: "networking.k8s.io",
|
|
Version: "v1",
|
|
},
|
|
{
|
|
Group: "networking.k8s.io",
|
|
Version: "v1",
|
|
},
|
|
{
|
|
Group: "test",
|
|
Version: "v1beta1",
|
|
},
|
|
{
|
|
Group: "test",
|
|
Version: "v1beta1",
|
|
},
|
|
}},
|
|
}
|
|
for _, test := range tests {
|
|
r := NewSkippedResourceConfig()
|
|
if err := r.Parse(test.input); err != nil {
|
|
t.Fatalf("Unexpected error: %v", err)
|
|
}
|
|
for i, o := range test.out {
|
|
ok := r.GroupVersionDisabled(o)
|
|
if !ok {
|
|
t.Errorf("%d: unexpected error: %v", i, o)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestSkippedResourceConfigGroupParse(t *testing.T) {
|
|
tests := []struct {
|
|
input string
|
|
out []string
|
|
}{
|
|
{
|
|
input: "networking.k8s.io;test",
|
|
out: []string{
|
|
"networking.k8s.io", "test",
|
|
}},
|
|
}
|
|
for _, test := range tests {
|
|
r := NewSkippedResourceConfig()
|
|
if err := r.Parse(test.input); err != nil {
|
|
t.Fatalf("Unexpected error: %v", err)
|
|
}
|
|
for i, o := range test.out {
|
|
ok := r.GroupDisabled(o)
|
|
if !ok {
|
|
t.Errorf("%d: unexpected error: %v", i, o)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestSkippedResourceConfigMixedParse(t *testing.T) {
|
|
tests := []struct {
|
|
input string
|
|
out SkippedResourceConfig
|
|
}{
|
|
{
|
|
input: "v1/Node,Pod;networking.k8s.io/v1beta1/Ingress,IngressClass;networking.k8s.io;test.com/v1",
|
|
out: SkippedResourceConfig{
|
|
Groups: map[string]struct{}{
|
|
"networking.k8s.io": {},
|
|
},
|
|
GroupVersions: map[schema.GroupVersion]struct{}{
|
|
{
|
|
Group: "test.com",
|
|
Version: "v1",
|
|
}: {},
|
|
},
|
|
GroupVersionKinds: map[schema.GroupVersionKind]struct{}{
|
|
{
|
|
Group: "",
|
|
Version: "v1",
|
|
Kind: "Node",
|
|
}: {},
|
|
{
|
|
Group: "",
|
|
Version: "v1",
|
|
Kind: "Pod",
|
|
}: {},
|
|
{
|
|
Group: "networking.k8s.io",
|
|
Version: "v1beta1",
|
|
Kind: "Ingress",
|
|
}: {},
|
|
{
|
|
Group: "networking.k8s.io",
|
|
Version: "v1beta1",
|
|
Kind: "IngressClass",
|
|
}: {},
|
|
},
|
|
}},
|
|
}
|
|
for i, test := range tests {
|
|
r := NewSkippedResourceConfig()
|
|
if err := r.Parse(test.input); err != nil {
|
|
t.Fatalf("Unexpected error: %v", err)
|
|
}
|
|
for g := range r.Groups {
|
|
ok := r.GroupDisabled(g)
|
|
if !ok {
|
|
t.Errorf("%d: unexpected error: %v", i, g)
|
|
}
|
|
}
|
|
|
|
for gv := range r.GroupVersions {
|
|
ok := r.GroupVersionDisabled(gv)
|
|
if !ok {
|
|
t.Errorf("%d: unexpected error: %v", i, gv)
|
|
}
|
|
}
|
|
|
|
for gvk := range r.GroupVersionKinds {
|
|
ok := r.GroupVersionKindDisabled(gvk)
|
|
if !ok {
|
|
t.Errorf("%d: unexpected error: %v", i, gvk)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestDefaultSkippedResourceConfigGroupParse(t *testing.T) {
|
|
tests := []struct {
|
|
input string
|
|
out []string
|
|
}{
|
|
{
|
|
input: "",
|
|
out: []string{
|
|
"cluster.karmada.io", "policy.karmada.io", "work.karmada.io", "config.karmada.io", "events.k8s.io",
|
|
}},
|
|
}
|
|
for _, test := range tests {
|
|
r := NewSkippedResourceConfig()
|
|
if err := r.Parse(test.input); err != nil {
|
|
t.Fatalf("Unexpected error: %v", err)
|
|
}
|
|
for i, o := range test.out {
|
|
ok := r.GroupDisabled(o)
|
|
if !ok {
|
|
t.Errorf("%d: unexpected error: %v", i, o)
|
|
}
|
|
}
|
|
ok := r.GroupDisabled("")
|
|
if ok {
|
|
t.Error("unexpected error: v1")
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestDefaultSkippedResourceConfigGroupVersionKindParse(t *testing.T) {
|
|
tests := []struct {
|
|
input string
|
|
out []schema.GroupVersionKind
|
|
}{
|
|
{
|
|
input: "",
|
|
out: []schema.GroupVersionKind{
|
|
corev1EventGVK,
|
|
}},
|
|
}
|
|
for _, test := range tests {
|
|
r := NewSkippedResourceConfig()
|
|
if err := r.Parse(test.input); err != nil {
|
|
t.Fatalf("Unexpected error: %v", err)
|
|
}
|
|
for i, o := range test.out {
|
|
ok := r.GroupVersionKindDisabled(o)
|
|
if !ok {
|
|
t.Errorf("%d: unexpected error: %v", i, o)
|
|
}
|
|
}
|
|
ok := r.GroupDisabled("")
|
|
if ok {
|
|
t.Error("unexpected error: v1")
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestParseSingle(t *testing.T) {
|
|
tests := []struct {
|
|
input string
|
|
expectedGroups []string
|
|
expectedGroupVs []schema.GroupVersion
|
|
expectedGVKs []schema.GroupVersionKind
|
|
}{
|
|
{
|
|
input: "",
|
|
expectedGroups: []string{},
|
|
expectedGroupVs: []schema.GroupVersion{},
|
|
expectedGVKs: []schema.GroupVersionKind{},
|
|
},
|
|
{
|
|
input: "apps",
|
|
expectedGroups: []string{"apps"},
|
|
expectedGroupVs: []schema.GroupVersion{},
|
|
expectedGVKs: []schema.GroupVersionKind{},
|
|
},
|
|
{
|
|
input: "apps/v1",
|
|
expectedGroups: []string{},
|
|
expectedGroupVs: []schema.GroupVersion{{Group: "apps", Version: "v1"}},
|
|
expectedGVKs: []schema.GroupVersionKind{},
|
|
},
|
|
{
|
|
input: "apps/v1beta1",
|
|
expectedGroups: []string{},
|
|
expectedGroupVs: []schema.GroupVersion{{Group: "apps", Version: "v1beta1"}},
|
|
expectedGVKs: []schema.GroupVersionKind{},
|
|
},
|
|
{
|
|
input: "apps/v1/Deployment",
|
|
expectedGroups: []string{},
|
|
expectedGroupVs: []schema.GroupVersion{},
|
|
expectedGVKs: []schema.GroupVersionKind{{Group: "apps", Version: "v1", Kind: "Deployment"}},
|
|
},
|
|
{
|
|
input: "apps/v1beta1/Deployment",
|
|
expectedGroups: []string{},
|
|
expectedGroupVs: []schema.GroupVersion{},
|
|
expectedGVKs: []schema.GroupVersionKind{{Group: "apps", Version: "v1beta1", Kind: "Deployment"}},
|
|
},
|
|
{
|
|
input: "apps/v1/Deployment,ReplicaSet",
|
|
expectedGroups: []string{},
|
|
expectedGroupVs: []schema.GroupVersion{},
|
|
expectedGVKs: []schema.GroupVersionKind{
|
|
{Group: "apps", Version: "v1", Kind: "Deployment"},
|
|
{Group: "apps", Version: "v1", Kind: "ReplicaSet"},
|
|
},
|
|
},
|
|
{
|
|
input: "v1/Service",
|
|
expectedGroups: []string{},
|
|
expectedGroupVs: []schema.GroupVersion{},
|
|
expectedGVKs: []schema.GroupVersionKind{{Group: "", Version: "v1", Kind: "Service"}},
|
|
},
|
|
{
|
|
input: "v1/Service,ConfigMap",
|
|
expectedGroups: []string{},
|
|
expectedGroupVs: []schema.GroupVersion{},
|
|
expectedGVKs: []schema.GroupVersionKind{
|
|
{Group: "", Version: "v1", Kind: "Service"},
|
|
{Group: "", Version: "v1", Kind: "ConfigMap"},
|
|
},
|
|
},
|
|
}
|
|
|
|
for i, test := range tests {
|
|
t.Run(fmt.Sprintf("Test case %d", i+1), func(t *testing.T) {
|
|
// Create a new SkippedResourceConfig
|
|
r := NewSkippedResourceConfig()
|
|
|
|
// Call parseSingle with the input
|
|
if err := r.parseSingle(test.input); err != nil {
|
|
t.Error(err)
|
|
}
|
|
|
|
// Verify that skipping the correct groups, group versions, and GVKs are configured
|
|
for _, group := range test.expectedGroups {
|
|
if ok := r.GroupDisabled(group); !ok {
|
|
t.Errorf("Group %s was not found in the SkippedResourceConfig Groups", group)
|
|
}
|
|
}
|
|
for _, gv := range test.expectedGroupVs {
|
|
if ok := r.GroupVersionDisabled(gv); !ok {
|
|
t.Errorf("GroupVersion %v was not found in the SkippedResourceConfig GroupVersions", gv)
|
|
}
|
|
}
|
|
for _, gvk := range test.expectedGVKs {
|
|
if ok := r.GroupVersionKindDisabled(gvk); !ok {
|
|
t.Errorf("GVK %v was not found in the SkippedResourceConfig GroupVersionKinds", gvk)
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|