92 lines
3.2 KiB
Go
92 lines
3.2 KiB
Go
package e2e
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"github.com/onsi/ginkgo/v2"
|
|
"github.com/onsi/gomega"
|
|
appsv1 "k8s.io/api/apps/v1"
|
|
autoscalingv2 "k8s.io/api/autoscaling/v2"
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
"k8s.io/apimachinery/pkg/util/rand"
|
|
"k8s.io/utils/pointer"
|
|
|
|
policyv1alpha1 "github.com/karmada-io/karmada/pkg/apis/policy/v1alpha1"
|
|
"github.com/karmada-io/karmada/test/e2e/framework"
|
|
"github.com/karmada-io/karmada/test/helper"
|
|
)
|
|
|
|
var _ = ginkgo.Describe("hpa replicas synchronization testing", func() {
|
|
ginkgo.Context("Replicas synchronization testing", func() {
|
|
var policyNamespace, policyName string
|
|
var namespace, deploymentName, hpaName string
|
|
var deployment *appsv1.Deployment
|
|
var hpa *autoscalingv2.HorizontalPodAutoscaler
|
|
var policy *policyv1alpha1.PropagationPolicy
|
|
|
|
ginkgo.BeforeEach(func() {
|
|
policyNamespace = testNamespace
|
|
namespace = testNamespace
|
|
policyName = deploymentNamePrefix + rand.String(RandomStrLength)
|
|
deploymentName = policyName
|
|
hpaName = policyName
|
|
|
|
deployment = helper.NewDeployment(namespace, deploymentName)
|
|
deployment.Spec.Replicas = pointer.Int32(1)
|
|
hpa = helper.NewHPA(namespace, hpaName, deploymentName)
|
|
hpa.Spec.MinReplicas = pointer.Int32(2)
|
|
|
|
policy = helper.NewPropagationPolicy(policyNamespace, policyName, []policyv1alpha1.ResourceSelector{
|
|
{
|
|
APIVersion: deployment.APIVersion,
|
|
Kind: deployment.Kind,
|
|
Name: deployment.Name,
|
|
},
|
|
{
|
|
APIVersion: hpa.APIVersion,
|
|
Kind: hpa.Kind,
|
|
Name: hpa.Name,
|
|
},
|
|
}, policyv1alpha1.Placement{
|
|
ClusterAffinity: &policyv1alpha1.ClusterAffinity{
|
|
ClusterNames: framework.ClusterNames(),
|
|
},
|
|
})
|
|
})
|
|
|
|
ginkgo.BeforeEach(func() {
|
|
framework.CreatePropagationPolicy(karmadaClient, policy)
|
|
framework.CreateDeployment(kubeClient, deployment)
|
|
framework.CreateHPA(kubeClient, hpa)
|
|
ginkgo.DeferCleanup(func() {
|
|
framework.RemovePropagationPolicy(karmadaClient, policy.Namespace, policy.Name)
|
|
framework.RemoveDeployment(kubeClient, deployment.Namespace, deployment.Name)
|
|
framework.RemoveHPA(kubeClient, namespace, hpa.Name)
|
|
framework.WaitDeploymentDisappearOnClusters(framework.ClusterNames(), deployment.Namespace, deployment.Name)
|
|
})
|
|
})
|
|
|
|
ginkgo.It("deployment has been scaled up and synchronized to Karmada", func() {
|
|
framework.WaitDeploymentPresentOnClustersFitWith(framework.ClusterNames(), deployment.Namespace, deployment.Name,
|
|
func(deployment *appsv1.Deployment) bool {
|
|
return true
|
|
})
|
|
|
|
framework.WaitDeploymentPresentOnClustersFitWith(framework.ClusterNames(), deployment.Namespace, deployment.Name,
|
|
func(deployment *appsv1.Deployment) bool {
|
|
return *deployment.Spec.Replicas == *hpa.Spec.MinReplicas
|
|
})
|
|
|
|
expectedReplicas := *hpa.Spec.MinReplicas * int32(len(framework.ClusterNames()))
|
|
gomega.Eventually(func() bool {
|
|
deploymentExist, err := kubeClient.AppsV1().Deployments(deployment.Namespace).Get(context.TODO(), deployment.Name, metav1.GetOptions{})
|
|
if err != nil {
|
|
return false
|
|
}
|
|
return (*deploymentExist.Spec.Replicas == expectedReplicas) && (deploymentExist.Generation == deploymentExist.Status.ObservedGeneration)
|
|
}, time.Minute, pollInterval).Should(gomega.Equal(true))
|
|
})
|
|
})
|
|
})
|