From 1dfd0d472b346fa397220bff26a3e8b78bba8df2 Mon Sep 17 00:00:00 2001 From: Jean-Marc Andre Date: Thu, 4 Mar 2021 20:43:18 +0100 Subject: [PATCH] More BackupConf tests --- .../backupconfiguration_controller_test.go | 182 ++++++++++++------ 1 file changed, 124 insertions(+), 58 deletions(-) diff --git a/controllers/backupconfiguration_controller_test.go b/controllers/backupconfiguration_controller_test.go index 1217ac8..93200bb 100644 --- a/controllers/backupconfiguration_controller_test.go +++ b/controllers/backupconfiguration_controller_test.go @@ -4,14 +4,17 @@ import ( "context" //"k8s.io/apimachinery/pkg/types" //"reflect" + //"fmt" "time" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" //batchv1 "k8s.io/api/batch/v1" formolv1alpha1 "github.com/desmo999r/formol/api/v1alpha1" + appsv1 "k8s.io/api/apps/v1" batchv1beta1 "k8s.io/api/batch/v1beta1" 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" ) @@ -21,16 +24,45 @@ var _ = Describe("Setup the environment", func() { BackupConfName = "test-backupconf" BackupConfNamespace = "test-backupconf-namespace" RepoName = "test-repo" + DeploymentName = "test-deployment" timeout = time.Second * 10 interval = time.Millisecond * 250 ) var ( + key = types.NamespacedName{ + Name: BackupConfName, + Namespace: BackupConfNamespace, + } ctx = context.Background() namespace = &corev1.Namespace{ ObjectMeta: metav1.ObjectMeta{ Name: BackupConfNamespace, }, } + deployment = &appsv1.Deployment{ + ObjectMeta: metav1.ObjectMeta{ + Name: DeploymentName, + Namespace: BackupConfNamespace, + }, + Spec: appsv1.DeploymentSpec{ + Selector: &metav1.LabelSelector{ + MatchLabels: map[string]string{"app": "test-deployment"}, + }, + Template: corev1.PodTemplateSpec{ + ObjectMeta: metav1.ObjectMeta{ + Labels: map[string]string{"app": "test-deployment"}, + }, + Spec: corev1.PodSpec{ + Containers: []corev1.Container{ + corev1.Container{ + Name: "test-container", + Image: "test-image", + }, + }, + }, + }, + }, + } sa = &corev1.ServiceAccount{ ObjectMeta: metav1.ObjectMeta{ Name: "default", @@ -74,7 +106,7 @@ var _ = Describe("Setup the environment", func() { Targets: []formolv1alpha1.Target{ formolv1alpha1.Target{ Kind: "Deployment", - Name: "test-deployment", + Name: DeploymentName, }, }, }, @@ -86,68 +118,102 @@ var _ = Describe("Setup the environment", func() { AfterEach(func() { }) - Context("Creating a backupconf", func() { - It("Should also create a CronJob", func() { + Context("Testing backupconf", func() { + It("Requires initialisation", func() { Expect(k8sClient.Create(ctx, namespace)).Should(Succeed()) Expect(k8sClient.Create(ctx, sa)).Should(Succeed()) Expect(k8sClient.Create(ctx, secret)).Should(Succeed()) Expect(k8sClient.Create(ctx, repo)).Should(Succeed()) - Expect(k8sClient.Create(ctx, backupConf)).Should(Succeed()) - realBackupConf := &formolv1alpha1.BackupConfiguration{} - key := types.NamespacedName{ - Name: BackupConfName, - Namespace: BackupConfNamespace, - } - Eventually(func() bool { - err := k8sClient.Get(ctx, key, realBackupConf) - if err != nil { - return false - } - return true - }, timeout, interval).Should(BeTrue()) - Expect(realBackupConf.Spec.Schedule).Should(Equal("1 * * * *")) - //Expect(realBackupConf.Spec.Suspend).Should(BeFalse()) - cronJob := &batchv1beta1.CronJob{} - Eventually(func() bool { - err := k8sClient.Get(ctx, types.NamespacedName{ - Name: "backup-" + BackupConfName, - Namespace: BackupConfNamespace, - }, cronJob) - if err != nil { - return false - } - return true - }, timeout, interval).Should(BeTrue()) - Expect(cronJob.Spec.Schedule).Should(Equal("1 * * * *")) + Expect(k8sClient.Create(ctx, deployment)).Should(Succeed()) }) - }) - Context("Updating a backupconf", func() { - It("Should also update the CronJob", func() { - realBackupConf := &formolv1alpha1.BackupConfiguration{} - key := types.NamespacedName{ - Name: BackupConfName, - Namespace: BackupConfNamespace, - } - Eventually(func() bool { - err := k8sClient.Get(ctx, key, realBackupConf) - if err != nil { - return false - } - return true - }, timeout, interval).Should(BeTrue()) - realBackupConf.Spec.Schedule = "1 0 * * *" - Expect(k8sClient.Update(ctx, realBackupConf)).Should(Succeed()) - cronJob := &batchv1beta1.CronJob{} - Eventually(func() (string, error) { - err := k8sClient.Get(ctx, types.NamespacedName{ - Name: "backup-" + BackupConfName, - Namespace: BackupConfNamespace, - }, cronJob) - if err != nil { - return "", err - } - return cronJob.Spec.Schedule, nil - }, timeout, interval).Should(Equal("1 0 * * *")) + Context("Creating a backupconf", func() { + It("Requires initialisation", func() { + Expect(k8sClient.Create(ctx, backupConf)).Should(Succeed()) + realBackupConf := &formolv1alpha1.BackupConfiguration{} + Eventually(func() bool { + err := k8sClient.Get(ctx, key, realBackupConf) + if err != nil { + return false + } + return true + }, timeout, interval).Should(BeTrue()) + Expect(realBackupConf.Spec.Schedule).Should(Equal("1 * * * *")) + }) + It("Should also create a CronJob", func() { + cronJob := &batchv1beta1.CronJob{} + Eventually(func() bool { + err := k8sClient.Get(ctx, types.NamespacedName{ + Name: "backup-" + BackupConfName, + Namespace: BackupConfNamespace, + }, cronJob) + if err != nil { + return false + } + return true + }, timeout, interval).Should(BeTrue()) + Expect(cronJob.Spec.Schedule).Should(Equal("1 * * * *")) + }) + It("Should also create a sidecar container", func() { + realDeployment := &appsv1.Deployment{} + Eventually(func() (int, error) { + err := k8sClient.Get(ctx, types.NamespacedName{ + Name: DeploymentName, + Namespace: BackupConfNamespace, + }, realDeployment) + if err != nil { + return 0, err + } + return len(realDeployment.Spec.Template.Spec.Containers), nil + }, timeout, interval).Should(Equal(2)) + }) + }) + Context("Updating a backupconf", func() { + It("Should also update the CronJob", func() { + realBackupConf := &formolv1alpha1.BackupConfiguration{} + Expect(k8sClient.Get(ctx, key, realBackupConf)).Should(Succeed()) + realBackupConf.Spec.Schedule = "1 0 * * *" + suspend := true + realBackupConf.Spec.Suspend = &suspend + Expect(k8sClient.Update(ctx, realBackupConf)).Should(Succeed()) + cronJob := &batchv1beta1.CronJob{} + Eventually(func() (string, error) { + err := k8sClient.Get(ctx, types.NamespacedName{ + Name: "backup-" + BackupConfName, + Namespace: BackupConfNamespace, + }, cronJob) + if err != nil { + return "", err + } + return cronJob.Spec.Schedule, nil + }, timeout, interval).Should(Equal("1 0 * * *")) + Eventually(func() (bool, error) { + err := k8sClient.Get(ctx, types.NamespacedName{ + Name: "backup-" + BackupConfName, + Namespace: BackupConfNamespace, + }, cronJob) + if err != nil { + return false, err + } + return *cronJob.Spec.Suspend == true, nil + }, timeout, interval).Should(BeTrue()) + }) + }) + Context("Deleting a backupconf", func() { + It("Should also delete the sidecar container", func() { + Expect(k8sClient.Delete(ctx, backupConf)).Should(Succeed()) + realDeployment := &appsv1.Deployment{} + Eventually(func() (int, error) { + err := k8sClient.Get(ctx, types.NamespacedName{ + Name: DeploymentName, + Namespace: BackupConfNamespace, + }, realDeployment) + if err != nil { + return 0, err + } + return len(realDeployment.Spec.Template.Spec.Containers), nil + }, timeout, interval).Should(Equal(1)) + + }) }) })