karmada/pkg/util/informermanager/keys/keys_test.go

240 lines
5.4 KiB
Go

package keys
import (
"fmt"
"testing"
v1 "k8s.io/api/core/v1"
rbacv1 "k8s.io/api/rbac/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
var (
secretObj = &v1.Secret{
TypeMeta: metav1.TypeMeta{
Kind: "Secret",
APIVersion: "v1",
},
ObjectMeta: metav1.ObjectMeta{
Namespace: "foo",
Name: "bar",
},
}
nodeObj = &v1.Node{
TypeMeta: metav1.TypeMeta{
Kind: "Node",
APIVersion: "v1",
},
ObjectMeta: metav1.ObjectMeta{
Namespace: "foo",
Name: "bar",
},
}
roleObj = &rbacv1.Role{
TypeMeta: metav1.TypeMeta{
Kind: "Role",
APIVersion: "v1",
},
ObjectMeta: metav1.ObjectMeta{
Namespace: "foo",
Name: "bar",
},
}
clusterRoleObj = &rbacv1.ClusterRole{
TypeMeta: metav1.TypeMeta{
Kind: "Role",
APIVersion: "v1",
},
ObjectMeta: metav1.ObjectMeta{
Namespace: "foo",
Name: "bar",
},
}
)
func TestClusterWideKeyFunc(t *testing.T) {
tests := []struct {
name string
object interface{}
expectErr bool
expectKeyStr string
}{
{
name: "namespace scoped resource in core group",
object: secretObj,
expectErr: false,
expectKeyStr: "v1, kind=Secret, foo/bar",
},
{
name: "cluster scoped resource in core group",
object: nodeObj,
expectErr: false,
expectKeyStr: "v1, kind=Node, foo/bar",
},
{
name: "namespace scoped resource not in core group",
object: roleObj,
expectErr: false,
expectKeyStr: "v1, kind=Role, foo/bar",
},
{
name: "cluster scoped resource not in core group",
object: clusterRoleObj,
expectErr: false,
expectKeyStr: "v1, kind=Role, foo/bar",
},
{
name: "non runtime object should be error",
object: "non-runtime-object",
expectErr: true,
},
{
name: "nil object should be error",
object: nil,
expectErr: true,
},
}
for _, test := range tests {
tc := test
t.Run(tc.name, func(t *testing.T) {
key, err := ClusterWideKeyFunc(tc.object)
if err != nil {
if tc.expectErr == false {
t.Fatalf("not expect error but error happed: %v", err)
}
return
}
if key.String() != tc.expectKeyStr {
t.Fatalf("expect key string: %s, but got: %s", tc.expectKeyStr, key.String())
}
})
}
}
func TestFederatedKeyFunc(t *testing.T) {
tests := []struct {
name string
object interface{}
cluster string
expectErr bool
expectKeyStr string
}{
{
name: "namespace scoped resource in core group",
object: secretObj,
cluster: "member1",
expectErr: false,
expectKeyStr: "cluster=member1, v1, kind=Secret, foo/bar",
},
{
name: "cluster scoped resource in core group",
object: nodeObj,
cluster: "member1",
expectErr: false,
expectKeyStr: "cluster=member1, v1, kind=Node, foo/bar",
},
{
name: "namespace scoped resource not in core group",
object: roleObj,
cluster: "member1",
expectErr: false,
expectKeyStr: "cluster=member1, v1, kind=Role, foo/bar",
},
{
name: "cluster scoped resource not in core group",
object: clusterRoleObj,
cluster: "member1",
expectErr: false,
expectKeyStr: "cluster=member1, v1, kind=Role, foo/bar",
},
{
name: "non runtime object should be error",
object: "non-runtime-object",
cluster: "member1",
expectErr: true,
},
{
name: "nil object should be error",
object: nil,
cluster: "member1",
expectErr: true,
},
{
name: "empty cluster name should be error",
object: clusterRoleObj,
cluster: "",
expectErr: true,
},
}
for _, test := range tests {
tc := test
t.Run(tc.name, func(t *testing.T) {
key, err := FederatedKeyFunc(tc.cluster, tc.object)
if err != nil {
if tc.expectErr == false {
t.Fatalf("not expect error but got: %v", err)
}
return
}
if key.String() != tc.expectKeyStr {
t.Fatalf("expect key string: %s, but got: %s", tc.expectKeyStr, key.String())
}
})
}
}
func ExampleClusterWideKey_String() {
key := ClusterWideKey{
Group: "apps",
Version: "v1",
Kind: "Namespace",
Namespace: "default",
Name: "foo",
}
pKey := &key
fmt.Printf("%s\n", key)
fmt.Printf("%v\n", key)
fmt.Printf("%s\n", key.String())
fmt.Printf("%s\n", pKey)
fmt.Printf("%v\n", pKey)
fmt.Printf("%s\n", pKey.String())
// Output:
// apps/v1, kind=Namespace, default/foo
// apps/v1, kind=Namespace, default/foo
// apps/v1, kind=Namespace, default/foo
// apps/v1, kind=Namespace, default/foo
// apps/v1, kind=Namespace, default/foo
// apps/v1, kind=Namespace, default/foo
}
func ExampleFederatedKey_String() {
key := FederatedKey{
Cluster: "karamda",
ClusterWideKey: ClusterWideKey{
Group: "apps",
Version: "v1",
Kind: "Namespace",
Namespace: "default",
Name: "foo"},
}
pKey := &key
fmt.Printf("%s\n", key)
fmt.Printf("%v\n", key)
fmt.Printf("%s\n", key.String())
fmt.Printf("%s\n", pKey)
fmt.Printf("%v\n", pKey)
fmt.Printf("%s\n", pKey.String())
// Output:
// cluster=karamda, apps/v1, kind=Namespace, default/foo
// cluster=karamda, apps/v1, kind=Namespace, default/foo
// cluster=karamda, apps/v1, kind=Namespace, default/foo
// cluster=karamda, apps/v1, kind=Namespace, default/foo
// cluster=karamda, apps/v1, kind=Namespace, default/foo
// cluster=karamda, apps/v1, kind=Namespace, default/foo
}