karmada/test/e2e/clusteroverridepolicy_test.go

100 lines
3.1 KiB
Go

package e2e
import (
"context"
"fmt"
"github.com/onsi/ginkgo/v2"
"github.com/onsi/gomega"
corev1 "k8s.io/api/core/v1"
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
apierrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/rand"
"k8s.io/klog/v2"
policyv1alpha1 "github.com/karmada-io/karmada/pkg/apis/policy/v1alpha1"
"github.com/karmada-io/karmada/test/e2e/framework"
testhelper "github.com/karmada-io/karmada/test/helper"
)
var _ = ginkgo.Describe("[BasicClusterOverridePolicy] basic cluster override policy testing", func() {
ginkgo.Context("Namespace propagation testing", func() {
var (
randNamespace string
ns *corev1.Namespace
namespaceCop *policyv1alpha1.ClusterOverridePolicy
customLabelKey = "hello"
customLabelVal = "world"
plaintextOverriderValue = fmt.Sprintf("{ \"%s\": \"%s\"}", customLabelKey, customLabelVal)
)
ginkgo.BeforeEach(func() {
randNamespace = "cop-test-ns-" + rand.String(RandomStrLength)
ns = testhelper.NewNamespace(randNamespace)
namespaceCop = testhelper.NewClusterOverridePolicyByOverrideRules(ns.Name,
[]policyv1alpha1.ResourceSelector{
{
APIVersion: "v1",
Kind: "Namespace",
Name: ns.Name,
},
},
[]policyv1alpha1.RuleWithCluster{
{
TargetCluster: &policyv1alpha1.ClusterAffinity{
ClusterNames: framework.ClusterNames(),
},
Overriders: policyv1alpha1.Overriders{
Plaintext: []policyv1alpha1.PlaintextOverrider{
{
Path: "/metadata/labels",
Operator: policyv1alpha1.OverriderOpAdd,
Value: apiextensionsv1.JSON{Raw: []byte(plaintextOverriderValue)},
},
},
},
},
})
})
ginkgo.BeforeEach(func() {
framework.CreateClusterOverridePolicy(karmadaClient, namespaceCop)
framework.CreateNamespace(kubeClient, ns)
ginkgo.DeferCleanup(func() {
framework.RemoveClusterOverridePolicy(karmadaClient, namespaceCop.Name)
framework.RemoveNamespace(kubeClient, ns.Name)
framework.WaitNamespaceDisappearOnClusters(framework.ClusterNames(), ns.Name)
})
})
ginkgo.It("Namespace testing", func() {
ginkgo.By(fmt.Sprintf("Check if namespace(%s) present on member clusters", ns.Name), func() {
for _, clusterName := range framework.ClusterNames() {
clusterClient := framework.GetClusterClient(clusterName)
gomega.Expect(clusterClient).ShouldNot(gomega.BeNil())
klog.Infof("Waiting for namespace present on cluster(%s)", clusterName)
gomega.Eventually(func(g gomega.Gomega) (bool, error) {
clusterNs, err := clusterClient.CoreV1().Namespaces().Get(context.TODO(), ns.Name, metav1.GetOptions{})
if err != nil {
if apierrors.IsNotFound(err) {
return false, nil
}
return false, err
}
v, ok := clusterNs.Labels[customLabelKey]
if ok && v == customLabelVal {
return true, nil
}
return false, nil
}, pollTimeout, pollInterval).Should(gomega.Equal(true))
}
})
})
})
})