From e450f9d089c1acb3404d3a2cd509b0dc7df45752 Mon Sep 17 00:00:00 2001 From: Mathieu Cesbron Date: Fri, 19 Jan 2024 15:59:10 +0100 Subject: [PATCH 1/3] Remove commented code Signed-off-by: Mathieu Cesbron --- controllers/rediscluster_controller_test.go | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/controllers/rediscluster_controller_test.go b/controllers/rediscluster_controller_test.go index 9a3c7aed3..da9933f07 100644 --- a/controllers/rediscluster_controller_test.go +++ b/controllers/rediscluster_controller_test.go @@ -21,14 +21,12 @@ var _ = Describe("Redis cluster test", func() { redisClusterCR redisv1beta2.RedisCluster redisClusterCRName string size int32 - // version string // Used to create unique name for each test testCount int ) JustBeforeEach(func() { size = 3 - // version = "v7" redisClusterCR = redisv1beta2.RedisCluster{ TypeMeta: metav1.TypeMeta{ APIVersion: "redis.redis.opstreelabs.in/v1beta2", @@ -39,8 +37,7 @@ var _ = Describe("Redis cluster test", func() { Namespace: ns, }, Spec: redisv1beta2.RedisClusterSpec{ - Size: &size, - // ClusterVersion: &version, + Size: &size, Storage: &redisv1beta2.ClusterStorage{}, }, } @@ -54,7 +51,6 @@ var _ = Describe("Redis cluster test", func() { Context("When creating a redis cluster CR", func() { It("should create a statefulset", func() { - sts := &appsv1.StatefulSet{} Eventually(func() error { return k8sClient.Get(context.TODO(), types.NamespacedName{ From 12ad2f7aa2eaa8ff1a45ba89d52d724c9e61aa45 Mon Sep 17 00:00:00 2001 From: Mathieu Cesbron Date: Fri, 19 Jan 2024 16:45:03 +0100 Subject: [PATCH 2/3] Add redis replication reconciler in suite test Signed-off-by: Mathieu Cesbron --- controllers/suite_test.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/controllers/suite_test.go b/controllers/suite_test.go index 150022568..cb19c5b01 100644 --- a/controllers/suite_test.go +++ b/controllers/suite_test.go @@ -110,6 +110,14 @@ var _ = BeforeSuite(func() { }).SetupWithManager(k8sManager) Expect(err).ToNot(HaveOccurred()) + err = (&RedisReplicationReconciler{ + Client: k8sManager.GetClient(), + K8sClient: k8sClient, + Dk8sClient: dk8sClient, + Scheme: k8sManager.GetScheme(), + }).SetupWithManager(k8sManager) + Expect(err).ToNot(HaveOccurred()) + go func() { defer GinkgoRecover() err = k8sManager.Start(ctrl.SetupSignalHandler()) From f52353f6681467c083db367126f81df5e54922b3 Mon Sep 17 00:00:00 2001 From: Mathieu Cesbron Date: Fri, 19 Jan 2024 16:46:13 +0100 Subject: [PATCH 3/3] Add redis replication integration tests Signed-off-by: Mathieu Cesbron --- .../redisreplication_controller_test.go | 134 ++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 controllers/redisreplication_controller_test.go diff --git a/controllers/redisreplication_controller_test.go b/controllers/redisreplication_controller_test.go new file mode 100644 index 000000000..e7aee304b --- /dev/null +++ b/controllers/redisreplication_controller_test.go @@ -0,0 +1,134 @@ +package controllers + +import ( + "context" + "fmt" + + redisv1beta2 "github.com/OT-CONTAINER-KIT/redis-operator/api/v1beta2" + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" + appsv1 "k8s.io/api/apps/v1" + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" +) + +var _ = Describe("Redis replication test", func() { + var ( + redisReplicationCR redisv1beta2.RedisReplication + redisReplicationCRName string + size int32 + // Used to create unique name for each test + testCount int + ) + + JustBeforeEach(func() { + size = 3 + redisReplicationCR = redisv1beta2.RedisReplication{ + TypeMeta: metav1.TypeMeta{ + APIVersion: "redis.redis.opstreelabs.in/v1beta2", + Kind: "RedisReplication", + }, + ObjectMeta: metav1.ObjectMeta{ + Name: redisReplicationCRName, + Namespace: ns, + }, + Spec: redisv1beta2.RedisReplicationSpec{ + Size: &size, + Storage: &redisv1beta2.Storage{}, + }, + } + Expect(k8sClient.Create(context.TODO(), &redisReplicationCR)).Should(Succeed()) + testCount++ + }) + + BeforeEach(func() { + redisReplicationCRName = fmt.Sprintf("redis-replication-%d", testCount) + }) + + Context("When creating a redis replication CR", func() { + It("should create a statefulset", func() { + + sts := &appsv1.StatefulSet{} + Eventually(func() error { + return k8sClient.Get(context.TODO(), types.NamespacedName{ + Name: redisReplicationCRName, + Namespace: ns, + }, sts) + }, timeout, interval).Should(BeNil()) + + Expect(*sts.Spec.Replicas).To(BeEquivalentTo(3)) + Expect(sts.Spec.ServiceName).To(Equal(redisReplicationCRName + "-headless")) + }) + + It("should create a service", func() { + svc := &corev1.Service{} + Eventually(func() error { + return k8sClient.Get(context.TODO(), types.NamespacedName{ + Name: redisReplicationCRName, + Namespace: ns, + }, svc) + }, timeout, interval).Should(BeNil()) + + Expect(svc.Labels).To(Equal(map[string]string{ + "app": redisReplicationCRName, + "redis_setup_type": "replication", + "role": "replication", + })) + }) + + It("should create a headless service", func() { + svc := &corev1.Service{} + Eventually(func() error { + return k8sClient.Get(context.TODO(), types.NamespacedName{ + Name: redisReplicationCRName + "-headless", + Namespace: ns, + }, svc) + }, timeout, interval).Should(BeNil()) + + Expect(svc.Labels).To(Equal(map[string]string{ + "app": redisReplicationCRName, + "redis_setup_type": "replication", + "role": "replication", + })) + }) + + It("should create additional service", func() { + svc := &corev1.Service{} + Eventually(func() error { + return k8sClient.Get(context.TODO(), types.NamespacedName{ + Name: redisReplicationCRName + "-additional", + Namespace: ns, + }, svc) + }, timeout, interval).Should(BeNil()) + + Expect(svc.Labels).To(Equal(map[string]string{ + "app": redisReplicationCRName, + "redis_setup_type": "replication", + "role": "replication", + })) + }) + + Context("then deleting the redis replication CR", func() { + It("should delete the statefulset", func() { + redisReplicationCR := &redisv1beta2.RedisReplication{ + ObjectMeta: metav1.ObjectMeta{ + Name: redisReplicationCRName, + Namespace: ns, + }, + } + Expect(k8sClient.Delete(context.TODO(), redisReplicationCR)).To(BeNil()) + + Eventually(func() bool { + sts := &appsv1.StatefulSet{} + err := k8sClient.Get(context.TODO(), types.NamespacedName{ + Name: redisReplicationCRName, + Namespace: ns, + }, sts) + return errors.IsNotFound(err) + }, timeout, interval).Should(BeTrue()) + }) + }) + }) +})