Skip to content

Commit

Permalink
test: add more test about scalue down replicant
Browse files Browse the repository at this point in the history
Signed-off-by: Rory Z <[email protected]>
  • Loading branch information
Rory-Z committed Jan 10, 2024
1 parent f88dc73 commit 4be2aa2
Show file tree
Hide file tree
Showing 2 changed files with 88 additions and 17 deletions.
2 changes: 1 addition & 1 deletion controllers/apps/v2beta1/add_svc.go
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ func generateListenerService(instance *appsv2beta1.EMQX, configStr string) *core
ports,
)
svc.Spec.Selector = appsv2beta1.DefaultCoreLabels(instance)
if appsv2beta1.IsExistReplicant(instance) {
if appsv2beta1.IsExistReplicant(instance) && instance.Status.ReplicantNodesStatus.ReadyReplicas > 0 {
svc.Spec.Selector = appsv2beta1.DefaultReplicantLabels(instance)
}
return &corev1.Service{
Expand Down
103 changes: 87 additions & 16 deletions e2e/v2beta1/e2e_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -103,12 +103,13 @@ var _ = Describe("E2E Test", Label("base"), Ordered, func() {
})

It("scale up EMQX core nodes", func() {
var storage *appsv2beta1.EMQX
Expect(k8sClient.Get(ctx, client.ObjectKeyFromObject(instance), instance)).Should(Succeed())
storage := instance.DeepCopy()

Expect(retry.RetryOnConflict(retry.DefaultRetry, func() error {
if err := k8sClient.Get(ctx, client.ObjectKeyFromObject(instance), instance); err != nil {
return err
}
storage = instance.DeepCopy()
instance.Spec.CoreTemplate.Spec.Replicas = pointer.Int32Ptr(3)
return k8sClient.Update(ctx, instance)
})).Should(Succeed())
Expand Down Expand Up @@ -160,12 +161,13 @@ var _ = Describe("E2E Test", Label("base"), Ordered, func() {
})

It("scale down EMQX core nodes", func() {
var storage *appsv2beta1.EMQX
Expect(k8sClient.Get(ctx, client.ObjectKeyFromObject(instance), instance)).Should(Succeed())
storage := instance.DeepCopy()

Expect(retry.RetryOnConflict(retry.DefaultRetry, func() error {
if err := k8sClient.Get(ctx, client.ObjectKeyFromObject(instance), instance); err != nil {
return err
}
storage = instance.DeepCopy()
instance.Spec.CoreTemplate.Spec.Replicas = pointer.Int32Ptr(1)
return k8sClient.Update(ctx, instance)
})).Should(Succeed())
Expand Down Expand Up @@ -217,12 +219,13 @@ var _ = Describe("E2E Test", Label("base"), Ordered, func() {
})

It("change EMQX image", func() {
var storage *appsv2beta1.EMQX
Expect(k8sClient.Get(ctx, client.ObjectKeyFromObject(instance), instance)).Should(Succeed())
storage := instance.DeepCopy()

Expect(retry.RetryOnConflict(retry.DefaultRetry, func() error {
if err := k8sClient.Get(ctx, client.ObjectKeyFromObject(instance), instance); err != nil {
return err
}
storage = instance.DeepCopy()
instance.Spec.Image = "emqx:5"
return k8sClient.Update(ctx, instance)
})).Should(Succeed())
Expand All @@ -238,8 +241,12 @@ var _ = Describe("E2E Test", Label("base"), Ordered, func() {
WithTransform(func(instance *appsv2beta1.EMQX) appsv2beta1.EMQXNodesStatus {
return instance.Status.CoreNodesStatus
}, And(
HaveField("Replicas", Equal(int32(*instance.Spec.CoreTemplate.Spec.Replicas))),
HaveField("ReadyReplicas", Equal(int32(*instance.Spec.CoreTemplate.Spec.Replicas))),
HaveField("CurrentRevision", Not(Equal(storage.Status.CoreNodesStatus.CurrentRevision))),
HaveField("CurrentReplicas", Equal(int32(*instance.Spec.CoreTemplate.Spec.Replicas))),
HaveField("UpdateRevision", Not(Equal(storage.Status.CoreNodesStatus.CurrentRevision))),
HaveField("UpdateReplicas", Equal(int32(*instance.Spec.CoreTemplate.Spec.Replicas))),
)),
WithTransform(func(instance *appsv2beta1.EMQX) appsv2beta1.EMQXNodesStatus {
return instance.Status.ReplicantNodesStatus
Expand Down Expand Up @@ -383,12 +390,13 @@ var _ = Describe("E2E Test", Label("base"), Ordered, func() {
})

It("scale up EMQX replicant nodes", func() {
var storage *appsv2beta1.EMQX
Expect(k8sClient.Get(ctx, client.ObjectKeyFromObject(instance), instance)).Should(Succeed())
storage := instance.DeepCopy()

Expect(retry.RetryOnConflict(retry.DefaultRetry, func() error {
if err := k8sClient.Get(ctx, client.ObjectKeyFromObject(instance), instance); err != nil {
return err
}
storage = instance.DeepCopy()
instance.Spec.ReplicantTemplate.Spec.Replicas = pointer.Int32Ptr(3)
return k8sClient.Update(ctx, instance)
})).Should(Succeed())
Expand Down Expand Up @@ -440,12 +448,13 @@ var _ = Describe("E2E Test", Label("base"), Ordered, func() {
})

It("scale down EMQX replicant nodes to 0", func() {
var storage *appsv2beta1.EMQX
Expect(k8sClient.Get(ctx, client.ObjectKeyFromObject(instance), instance)).Should(Succeed())
storage := instance.DeepCopy()

Expect(retry.RetryOnConflict(retry.DefaultRetry, func() error {
if err := k8sClient.Get(ctx, client.ObjectKeyFromObject(instance), instance); err != nil {
return err
}
storage = instance.DeepCopy()
instance.Spec.ReplicantTemplate.Spec.Replicas = pointer.Int32Ptr(0)
return k8sClient.Update(ctx, instance)
})).Should(Succeed())
Expand Down Expand Up @@ -477,12 +486,12 @@ var _ = Describe("E2E Test", Label("base"), Ordered, func() {
WithTransform(func(instance *appsv2beta1.EMQX) appsv2beta1.EMQXNodesStatus {
return instance.Status.ReplicantNodesStatus
}, And(
HaveField("Replicas", Equal(int32(*instance.Spec.ReplicantTemplate.Spec.Replicas))),
HaveField("ReadyReplicas", Equal(int32(*instance.Spec.ReplicantTemplate.Spec.Replicas))),
HaveField("Replicas", Equal(int32(0))),
HaveField("ReadyReplicas", Equal(int32(0))),
HaveField("CurrentRevision", Equal(storage.Status.ReplicantNodesStatus.CurrentRevision)),
HaveField("CurrentReplicas", Equal(int32(*instance.Spec.ReplicantTemplate.Spec.Replicas))),
HaveField("CurrentReplicas", Equal(int32(0))),
HaveField("UpdateRevision", Equal(storage.Status.ReplicantNodesStatus.CurrentRevision)),
HaveField("UpdateReplicas", Equal(int32(*instance.Spec.ReplicantTemplate.Spec.Replicas))),
HaveField("UpdateReplicas", Equal(int32(0))),
)),
),
)
Expand All @@ -497,12 +506,13 @@ var _ = Describe("E2E Test", Label("base"), Ordered, func() {
})

It("change EMQX image", func() {
var storage *appsv2beta1.EMQX
Expect(k8sClient.Get(ctx, client.ObjectKeyFromObject(instance), instance)).Should(Succeed())
storage := instance.DeepCopy()

Expect(retry.RetryOnConflict(retry.DefaultRetry, func() error {
if err := k8sClient.Get(ctx, client.ObjectKeyFromObject(instance), instance); err != nil {
return err
}
storage = instance.DeepCopy()
instance.Spec.Image = "emqx/emqx:latest"
return k8sClient.Update(ctx, instance)
})).Should(Succeed())
Expand All @@ -518,14 +528,22 @@ var _ = Describe("E2E Test", Label("base"), Ordered, func() {
WithTransform(func(instance *appsv2beta1.EMQX) appsv2beta1.EMQXNodesStatus {
return instance.Status.CoreNodesStatus
}, And(
HaveField("Replicas", Equal(int32(*instance.Spec.CoreTemplate.Spec.Replicas))),
HaveField("ReadyReplicas", Equal(int32(*instance.Spec.CoreTemplate.Spec.Replicas))),
HaveField("CurrentRevision", Not(Equal(storage.Status.CoreNodesStatus.CurrentRevision))),
HaveField("CurrentReplicas", Equal(int32(*instance.Spec.CoreTemplate.Spec.Replicas))),
HaveField("UpdateRevision", Not(Equal(storage.Status.CoreNodesStatus.CurrentRevision))),
HaveField("UpdateReplicas", Equal(int32(*instance.Spec.CoreTemplate.Spec.Replicas))),
)),
WithTransform(func(instance *appsv2beta1.EMQX) appsv2beta1.EMQXNodesStatus {
return instance.Status.ReplicantNodesStatus
}, And(
HaveField("Replicas", Equal(int32(*instance.Spec.ReplicantTemplate.Spec.Replicas))),
HaveField("ReadyReplicas", Equal(int32(*instance.Spec.ReplicantTemplate.Spec.Replicas))),
HaveField("CurrentRevision", Not(Equal(storage.Status.ReplicantNodesStatus.CurrentRevision))),
HaveField("CurrentReplicas", Equal(int32(*instance.Spec.ReplicantTemplate.Spec.Replicas))),
HaveField("UpdateRevision", Not(Equal(storage.Status.ReplicantNodesStatus.CurrentRevision))),
HaveField("UpdateReplicas", Equal(int32(*instance.Spec.ReplicantTemplate.Spec.Replicas))),
)),
),
)
Expand All @@ -539,6 +557,59 @@ var _ = Describe("E2E Test", Label("base"), Ordered, func() {
))
})

It("change EMQX image and scale down EMQX replicant nodes to 0", func() {
Expect(k8sClient.Get(ctx, client.ObjectKeyFromObject(instance), instance)).Should(Succeed())
storage := instance.DeepCopy()

Expect(retry.RetryOnConflict(retry.DefaultRetry, func() error {
if err := k8sClient.Get(ctx, client.ObjectKeyFromObject(instance), instance); err != nil {
return err
}
instance.Spec.Image = "emqx:5"
instance.Spec.ReplicantTemplate.Spec.Replicas = pointer.Int32Ptr(0)
return k8sClient.Update(ctx, instance)
})).Should(Succeed())

Eventually(func() *appsv2beta1.EMQX {
_ = k8sClient.Get(ctx, client.ObjectKeyFromObject(instance), instance)
return instance
}).WithTimeout(timeout).WithPolling(interval).Should(
And(
WithTransform(func(instance *appsv2beta1.EMQX) bool {
return instance.Status.IsConditionTrue(appsv2beta1.Ready)
}, BeTrue()),
WithTransform(func(instance *appsv2beta1.EMQX) appsv2beta1.EMQXNodesStatus {
return instance.Status.CoreNodesStatus
}, And(
HaveField("Replicas", Equal(int32(*instance.Spec.CoreTemplate.Spec.Replicas))),
HaveField("ReadyReplicas", Equal(int32(*instance.Spec.CoreTemplate.Spec.Replicas))),
HaveField("CurrentRevision", Not(Equal(storage.Status.CoreNodesStatus.CurrentRevision))),
HaveField("CurrentReplicas", Equal(int32(*instance.Spec.CoreTemplate.Spec.Replicas))),
HaveField("UpdateRevision", Not(Equal(storage.Status.CoreNodesStatus.CurrentRevision))),
HaveField("UpdateReplicas", Equal(int32(*instance.Spec.CoreTemplate.Spec.Replicas))),
)),
WithTransform(func(instance *appsv2beta1.EMQX) appsv2beta1.EMQXNodesStatus {
return instance.Status.ReplicantNodesStatus
}, And(
HaveField("Replicas", Equal(int32(0))),
HaveField("ReadyReplicas", Equal(int32(0))),
HaveField("CurrentRevision", Not(Equal(storage.Status.ReplicantNodesStatus.CurrentRevision))),
HaveField("CurrentReplicas", Equal(int32(0))),
HaveField("UpdateRevision", Not(Equal(storage.Status.ReplicantNodesStatus.CurrentRevision))),
HaveField("UpdateReplicas", Equal(int32(0))),
)),
),
)

checkServices(instance)
checkPods(instance)
checkEndpoints(instance, appsv2beta1.CloneAndAddLabel(
appsv2beta1.DefaultCoreLabels(instance),
appsv2beta1.LabelsPodTemplateHashKey,
instance.Status.CoreNodesStatus.CurrentRevision,
))
})

It("old rs should scale down to 0", func() {
Expect(k8sClient.Get(ctx, client.ObjectKeyFromObject(instance), instance)).Should(Succeed())
Eventually(func() []appsv1.ReplicaSet {
Expand Down

0 comments on commit 4be2aa2

Please sign in to comment.