karmada/pkg/util/validation/validation_test.go

206 lines
4.9 KiB
Go

package validation
import (
"strings"
"testing"
policyv1alpha1 "github.com/karmada-io/karmada/pkg/apis/policy/v1alpha1"
)
func TestValidateClusterName(t *testing.T) {
var tests = []struct {
name string
cluster string
expectError bool
}{
{
name: "valid cluster",
cluster: "valid-cluster",
expectError: false,
},
{
name: "contains invalid character is not allowed",
cluster: "invalid.cluster",
expectError: true,
},
{
name: "empty name is not allowed",
cluster: "",
expectError: true,
},
{
name: "too long name is not allowed",
cluster: "abcdefghijklmnopqrstuvwxyz01234567890123456789012", // 49 characters
expectError: true,
},
}
for _, test := range tests {
tc := test
errs := ValidateClusterName(tc.cluster)
if len(errs) > 0 && tc.expectError != true {
t.Fatalf("expect no error but got: %s", strings.Join(errs, ";"))
}
if len(errs) == 0 && tc.expectError == true {
t.Fatalf("expect an error but got none")
}
}
}
func TestValidateClusterProxyURL(t *testing.T) {
var tests = []struct {
name string
proxy string
expectError bool
expectErrMsg string
}{
{
name: "valid http",
proxy: "http://example.com",
expectError: false,
},
{
name: "valid https",
proxy: "https://example.com",
expectError: false,
},
{
name: "valid socks5",
proxy: "socks5://example.com",
expectError: false,
},
{
name: "no schema is not allowed",
proxy: "example",
expectError: true,
expectErrMsg: `unsupported scheme "", must be http, https, or socks5`,
},
{
name: "schema out of range is not allowed",
proxy: "socks4://example.com",
expectError: true,
expectErrMsg: `unsupported scheme "socks4", must be http, https, or socks5`,
},
}
for _, test := range tests {
tc := test
t.Run(tc.name, func(t *testing.T) {
errs := ValidateClusterProxyURL(tc.proxy)
if !tc.expectError && len(errs) != 0 {
t.Errorf("not expect errors but got: %v", errs)
} else if tc.expectError && tc.expectErrMsg != strings.Join(errs, ",") {
t.Errorf("expected error: %v, but got: %v", tc.expectErrMsg, strings.Join(errs, ","))
}
})
}
}
func TestValidateOverrideSpec(t *testing.T) {
var tests = []struct {
name string
overrideSpec policyv1alpha1.OverrideSpec
expectError bool
}{
{
name: "overrideRules is set, overriders and targetCluster aren't set",
overrideSpec: policyv1alpha1.OverrideSpec{
OverrideRules: []policyv1alpha1.RuleWithCluster{
{
TargetCluster: &policyv1alpha1.ClusterAffinity{
ClusterNames: []string{"cluster-name"},
},
},
},
},
expectError: false,
},
{
name: "overriders and targetCluster are set, overrideRules isn't set",
overrideSpec: policyv1alpha1.OverrideSpec{
TargetCluster: &policyv1alpha1.ClusterAffinity{
ClusterNames: []string{"cluster-name"},
},
Overriders: policyv1alpha1.Overriders{
Plaintext: []policyv1alpha1.PlaintextOverrider{
{
Path: "spec/image",
},
},
},
},
expectError: false,
},
{
name: "overrideRules and targetCluster can't co-exist",
overrideSpec: policyv1alpha1.OverrideSpec{
OverrideRules: []policyv1alpha1.RuleWithCluster{
{
TargetCluster: &policyv1alpha1.ClusterAffinity{
ClusterNames: []string{"cluster-name"},
},
},
},
TargetCluster: &policyv1alpha1.ClusterAffinity{
ClusterNames: []string{"cluster-name"},
},
},
expectError: true,
},
{
name: "overrideRules and overriders can't co-exist",
overrideSpec: policyv1alpha1.OverrideSpec{
OverrideRules: []policyv1alpha1.RuleWithCluster{
{
TargetCluster: &policyv1alpha1.ClusterAffinity{
ClusterNames: []string{"cluster-name"},
},
},
},
Overriders: policyv1alpha1.Overriders{
Plaintext: []policyv1alpha1.PlaintextOverrider{
{
Path: "spec/image",
},
},
},
},
expectError: true,
},
{
name: "overrideRules, targetCluster and overriders can't co-exist",
overrideSpec: policyv1alpha1.OverrideSpec{
OverrideRules: []policyv1alpha1.RuleWithCluster{
{
TargetCluster: &policyv1alpha1.ClusterAffinity{
ClusterNames: []string{"cluster-name"},
},
},
},
TargetCluster: &policyv1alpha1.ClusterAffinity{
ClusterNames: []string{"cluster-name"},
},
Overriders: policyv1alpha1.Overriders{
Plaintext: []policyv1alpha1.PlaintextOverrider{
{
Path: "spec/image",
},
},
},
},
expectError: true,
},
}
for _, test := range tests {
tc := test
err := ValidateOverrideSpec(&tc.overrideSpec)
if err != nil && tc.expectError != true {
t.Fatalf("expect no error but got: %v", err)
}
if err == nil && tc.expectError == true {
t.Fatalf("expect an error but got none")
}
}
}