425 lines
9.6 KiB
Go
425 lines
9.6 KiB
Go
package names
|
|
|
|
import (
|
|
"fmt"
|
|
"hash/fnv"
|
|
"strings"
|
|
"testing"
|
|
|
|
"k8s.io/apimachinery/pkg/util/rand"
|
|
|
|
hashutil "github.com/karmada-io/karmada/pkg/util/hash"
|
|
)
|
|
|
|
func TestGenerateExecutionSpaceName(t *testing.T) {
|
|
type args struct {
|
|
clusterName string
|
|
}
|
|
tests := []struct {
|
|
name string
|
|
args args
|
|
want string
|
|
wantErr bool
|
|
}{
|
|
{name: "normal cluster name",
|
|
args: args{clusterName: "member-cluster-normal"},
|
|
want: "karmada-es-member-cluster-normal",
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
got := GenerateExecutionSpaceName(tt.args.clusterName)
|
|
if got != tt.want {
|
|
t.Errorf("GenerateExecutionSpaceName() got = %v, want %v", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestGetClusterName(t *testing.T) {
|
|
type args struct {
|
|
executionSpaceName string
|
|
}
|
|
tests := []struct {
|
|
name string
|
|
args args
|
|
want string
|
|
wantErr bool
|
|
}{
|
|
{name: "normal execution space name",
|
|
args: args{executionSpaceName: "karmada-es-member-cluster-normal"},
|
|
want: "member-cluster-normal",
|
|
wantErr: false,
|
|
},
|
|
{name: "invalid member cluster",
|
|
args: args{executionSpaceName: "invalid"},
|
|
want: "",
|
|
wantErr: true,
|
|
},
|
|
{name: "empty execution space name",
|
|
args: args{executionSpaceName: ""},
|
|
want: "",
|
|
wantErr: true,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
got, err := GetClusterName(tt.args.executionSpaceName)
|
|
if (err != nil) != tt.wantErr {
|
|
t.Errorf("GetClusterName() error = %v, wantErr %v", err, tt.wantErr)
|
|
return
|
|
}
|
|
if got != tt.want {
|
|
t.Errorf("GetClusterName() got = %v, want %v", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestGenerateBindingReferenceKey(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
namespace string
|
|
}{
|
|
{
|
|
name: "mytest-deployment",
|
|
namespace: "prod-xxx",
|
|
},
|
|
{
|
|
name: "mytest-deployment",
|
|
namespace: "qa-xxx",
|
|
},
|
|
{
|
|
name: "mytest-deployment",
|
|
namespace: "",
|
|
},
|
|
{
|
|
name: "b-c",
|
|
namespace: "a",
|
|
},
|
|
{
|
|
name: "c",
|
|
namespace: "a-b",
|
|
},
|
|
}
|
|
result := map[string]struct{}{}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
got := GenerateBindingReferenceKey(tt.namespace, tt.name)
|
|
if _, ok := result[got]; ok {
|
|
t.Errorf("duplicate key found %v", got)
|
|
}
|
|
result[got] = struct{}{}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestGenerateBindingName(t *testing.T) {
|
|
tests := []struct {
|
|
testCase string
|
|
kind string
|
|
name string
|
|
expect string
|
|
}{
|
|
{
|
|
testCase: "uppercase kind",
|
|
kind: "Pods",
|
|
name: "pod",
|
|
expect: "pod-pods",
|
|
},
|
|
{
|
|
testCase: "uppercase name",
|
|
kind: "pods",
|
|
name: "Pod",
|
|
expect: "pod-pods",
|
|
},
|
|
{
|
|
testCase: "lowercase name",
|
|
kind: "pods",
|
|
name: "Pod",
|
|
expect: "pod-pods",
|
|
},
|
|
// RBAC kind resource test with colon character in the name
|
|
{
|
|
testCase: "role kind resource",
|
|
kind: "Role",
|
|
name: "system:controller:tom",
|
|
expect: "system.controller.tom-role",
|
|
},
|
|
{
|
|
testCase: "clusterRole kind resource",
|
|
kind: "ClusterRole",
|
|
name: "system::tom",
|
|
expect: "system..tom-clusterrole",
|
|
},
|
|
{
|
|
testCase: "roleBinding kind resource",
|
|
kind: "RoleBinding",
|
|
name: "system::tt:tom",
|
|
expect: "system..tt.tom-rolebinding",
|
|
},
|
|
{
|
|
testCase: "clusterRoleBinding kind resource",
|
|
kind: "ClusterRoleBinding",
|
|
name: "system:tt:tom",
|
|
expect: "system.tt.tom-clusterrolebinding",
|
|
},
|
|
}
|
|
for _, test := range tests {
|
|
if result := GenerateBindingName(test.kind, test.name); result != test.expect {
|
|
t.Errorf("Test %s failed: expected %v, but got %v", test.testCase, test.expect, result)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestGenerateWorkName(t *testing.T) {
|
|
tests := []struct {
|
|
testCase string
|
|
kind string
|
|
name string
|
|
namespace string
|
|
workname string
|
|
}{
|
|
{
|
|
testCase: "empty namespace",
|
|
kind: "Pod",
|
|
name: "pod",
|
|
namespace: "",
|
|
workname: "pod-pod",
|
|
},
|
|
{
|
|
testCase: "non nil namespace",
|
|
kind: "pods",
|
|
name: "Pod",
|
|
namespace: "default",
|
|
workname: "default-pod-pods",
|
|
},
|
|
}
|
|
|
|
for _, test := range tests {
|
|
got := GenerateWorkName(test.kind, test.name, test.namespace)
|
|
|
|
hash := fnv.New32a()
|
|
hashutil.DeepHashObject(hash, test.workname)
|
|
if result := fmt.Sprintf("%s-%s", strings.ToLower(test.name), rand.SafeEncodeString(fmt.Sprint(hash.Sum32()))); result != got {
|
|
t.Errorf("Test %s failed: expected %v, but got %v", test.testCase, result, got)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestGenerateServiceAccountName(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
clusterName string
|
|
expected string
|
|
}{
|
|
{
|
|
name: "non empty clusterName",
|
|
clusterName: "cluster1",
|
|
expected: "karmada-cluster1",
|
|
},
|
|
}
|
|
for _, test := range tests {
|
|
got := GenerateServiceAccountName(test.clusterName)
|
|
if got != test.expected {
|
|
t.Errorf("Test %s failed: expected %v, but got %v", test.name, test.expected, got)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestGenerateRoleName(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
serviceAccountName string
|
|
expected string
|
|
}{
|
|
{
|
|
name: "non empty serviceAccountName",
|
|
serviceAccountName: "account",
|
|
expected: "karmada-controller-manager:account",
|
|
},
|
|
}
|
|
for _, test := range tests {
|
|
got := GenerateRoleName(test.serviceAccountName)
|
|
if got != test.expected {
|
|
t.Errorf("Test %s failed: expected %v, but got %v", test.name, test.expected, got)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestGenerateEndpointSliceName(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
endpointSliceName string
|
|
cluster string
|
|
expected string
|
|
}{
|
|
{
|
|
name: "",
|
|
endpointSliceName: "endpoint",
|
|
cluster: "cluster",
|
|
expected: "imported-cluster-endpoint",
|
|
},
|
|
}
|
|
for _, test := range tests {
|
|
got := GenerateEndpointSliceName(test.endpointSliceName, test.cluster)
|
|
if got != test.expected {
|
|
t.Errorf("Test %s failed: expected %v, but got %v", test.name, test.expected, got)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestGenerateDerivedServiceName(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
serviceName string
|
|
expected string
|
|
}{
|
|
{
|
|
name: "",
|
|
serviceName: "service",
|
|
expected: "derived-service",
|
|
},
|
|
}
|
|
for _, test := range tests {
|
|
got := GenerateDerivedServiceName(test.serviceName)
|
|
if got != test.expected {
|
|
t.Errorf("Test %s failed: expected %v, but got %v", test.name, test.expected, got)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestGenerateEstimatorDeploymentName(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
clusterName string
|
|
expected string
|
|
}{
|
|
{
|
|
name: "generate estimator deployment name",
|
|
clusterName: "cluster",
|
|
expected: "karmada-scheduler-estimator-cluster",
|
|
},
|
|
}
|
|
for _, test := range tests {
|
|
got := GenerateEstimatorDeploymentName(test.clusterName)
|
|
if got != test.expected {
|
|
t.Errorf("Test %s failed: expected %v, but got %v", test.name, test.expected, got)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestGenerateEstimatorServiceName(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
clusterName string
|
|
estimatorServicePrefix string
|
|
expected string
|
|
}{
|
|
{
|
|
name: "",
|
|
clusterName: "cluster",
|
|
estimatorServicePrefix: "karmada-scheduler-estimator",
|
|
expected: "karmada-scheduler-estimator-cluster",
|
|
},
|
|
{
|
|
name: "",
|
|
clusterName: "cluster",
|
|
estimatorServicePrefix: "demo-karmada-scheduler-estimator",
|
|
expected: "demo-karmada-scheduler-estimator-cluster",
|
|
},
|
|
}
|
|
for _, test := range tests {
|
|
got := GenerateEstimatorServiceName(test.estimatorServicePrefix, test.clusterName)
|
|
if got != test.expected {
|
|
t.Errorf("Test %s failed: expected %v, but got %v", test.name, test.expected, got)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestIsReservedNamespace(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
namespace string
|
|
expected bool
|
|
}{
|
|
{
|
|
name: "karmada-system",
|
|
namespace: NamespaceKarmadaSystem,
|
|
expected: true,
|
|
},
|
|
{
|
|
name: "karmada-cluster",
|
|
namespace: NamespaceKarmadaCluster,
|
|
expected: true,
|
|
},
|
|
{
|
|
name: "karmada-es-",
|
|
namespace: ExecutionSpacePrefix,
|
|
expected: true,
|
|
},
|
|
{
|
|
name: "not reserved namespace",
|
|
namespace: "test-A",
|
|
expected: false,
|
|
},
|
|
}
|
|
for _, test := range tests {
|
|
got := IsReservedNamespace(test.namespace)
|
|
if got != test.expected {
|
|
t.Errorf("Test %s failed: expected %v, but got %v", test.name, test.expected, got)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestGenerateImpersonationSecretName(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
clusterName string
|
|
expected string
|
|
}{
|
|
{
|
|
name: "impersonator",
|
|
clusterName: "clusterA",
|
|
expected: "clusterA-impersonator",
|
|
},
|
|
}
|
|
for _, test := range tests {
|
|
got := GenerateImpersonationSecretName(test.clusterName)
|
|
if got != test.expected {
|
|
t.Errorf("Test %s failed: expected %v, but got %v", test.name, test.expected, got)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestGeneratePolicyName(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
namespace string
|
|
resourcename string
|
|
gvk string
|
|
expected string
|
|
}{
|
|
{
|
|
name: "generate policy name",
|
|
namespace: "ns-foo",
|
|
resourcename: "foo",
|
|
gvk: "rand",
|
|
expected: "foo-b4978784",
|
|
},
|
|
{
|
|
name: "generate policy name with :",
|
|
namespace: "ns-foo",
|
|
resourcename: "system:foo",
|
|
gvk: "rand",
|
|
expected: "system.foo-b4978784",
|
|
},
|
|
}
|
|
for _, test := range tests {
|
|
got := GeneratePolicyName(test.namespace, test.resourcename, test.gvk)
|
|
if got != test.expected {
|
|
t.Errorf("Test %s failed: expected %v, but got %v", test.name, test.expected, got)
|
|
}
|
|
}
|
|
}
|