From 8217c8520f3f0548fca9f1a7b507e2bf26f43824 Mon Sep 17 00:00:00 2001 From: Aleksandr Zimin Date: Mon, 27 May 2024 01:25:28 +0300 Subject: [PATCH] Add some tests 2 Signed-off-by: Aleksandr Zimin --- .../local_storage_class_watcher_test.go | 181 ++++++++++++++++-- 1 file changed, 165 insertions(+), 16 deletions(-) diff --git a/images/sds-local-volume-controller/pkg/controller/local_storage_class_watcher_test.go b/images/sds-local-volume-controller/pkg/controller/local_storage_class_watcher_test.go index a0a2bcd8..4a510703 100644 --- a/images/sds-local-volume-controller/pkg/controller/local_storage_class_watcher_test.go +++ b/images/sds-local-volume-controller/pkg/controller/local_storage_class_watcher_test.go @@ -68,7 +68,7 @@ var _ = Describe(controller.LocalStorageClassCtrlName, func() { existingThinLVG1Template = generateLVMVolumeGroup(existingThinLVG1Name, []string{"dev-7777", "dev-8888"}, []string{"thin-pool-1", "thin-pool-2"}) existingThinLVG2Template = generateLVMVolumeGroup(existingThinLVG2Name, []string{"dev-9999", "dev-1010"}, []string{"thin-pool-1", "thin-pool-2"}) - // newThinLVGTemplate = generateLVMVolumeGroup(newThinLVGName, []string{"dev-1111", "dev-1212"}, []string{"thin-pool-1", "thin-pool-2"}) + newThinLVGTemplate = generateLVMVolumeGroup(newThinLVGName, []string{"dev-1111", "dev-1212"}, []string{"thin-pool-1", "thin-pool-2"}) ) It("Create_local_sc_with_existing_lvgs", func() { @@ -115,7 +115,7 @@ var _ = Describe(controller.LocalStorageClassCtrlName, func() { performStandartChecksForSC(sc, lvgSpec, nameForLocalStorageClass, controller.LocalStorageClassLvmType, controller.LVMThickType, reclaimPolicyDelete, volumeBindingModeWFFC) }) - It("Update_local_sc_add_existing_vg", func() { + It("Update_local_sc_add_existing_lvg", func() { lvgSpec := []v1alpha1.LocalStorageClassLVG{ {Name: existingThickLVG1Name}, {Name: existingThickLVG2Name}, @@ -155,7 +155,7 @@ var _ = Describe(controller.LocalStorageClassCtrlName, func() { performStandartChecksForSC(sc, lvgSpec, nameForLocalStorageClass, controller.LocalStorageClassLvmType, controller.LVMThickType, reclaimPolicyDelete, volumeBindingModeWFFC) }) - It("Update_local_sc_remove_existing_vg", func() { + It("Update_local_sc_remove_existing_lvg", func() { lvgSpec := []v1alpha1.LocalStorageClassLVG{ {Name: existingThickLVG1Name}, {Name: existingThickLVG2Name}, @@ -191,7 +191,7 @@ var _ = Describe(controller.LocalStorageClassCtrlName, func() { performStandartChecksForSC(sc, lvgSpec, nameForLocalStorageClass, controller.LocalStorageClassLvmType, controller.LVMThickType, reclaimPolicyDelete, volumeBindingModeWFFC) }) - It("Update_local_sc_add_non_existing_vg", func() { + It("Update_local_sc_add_non_existing_lvg", func() { lvgSpecOld := []v1alpha1.LocalStorageClassLVG{ {Name: existingThickLVG1Name}, {Name: existingThickLVG2Name}, @@ -233,7 +233,7 @@ var _ = Describe(controller.LocalStorageClassCtrlName, func() { performStandartChecksForSC(sc, lvgSpecOld, nameForLocalStorageClass, controller.LocalStorageClassLvmType, controller.LVMThickType, reclaimPolicyDelete, volumeBindingModeWFFC) }) - It("Remove_local_sc_with_non_existing_vg", func() { + It("Remove_local_sc_with_non_existing_lvg", func() { lvgSpec := []v1alpha1.LocalStorageClassLVG{ {Name: existingThickLVG1Name}, {Name: existingThickLVG2Name}, @@ -270,7 +270,7 @@ var _ = Describe(controller.LocalStorageClassCtrlName, func() { Expect(k8serrors.IsNotFound(err)).To(BeTrue()) }) - It("Create_local_sc_with_non_existing_vgs", func() { + It("Create_local_sc_with_non_existing_lvgs", func() { lvgSpec := []v1alpha1.LocalStorageClassLVG{ {Name: nonExistentLVG1Name}, {Name: nonExistentLVG2Name}, @@ -306,7 +306,7 @@ var _ = Describe(controller.LocalStorageClassCtrlName, func() { }) - It("Update_local_sc_with_all_existing_vgs", func() { + It("Update_local_sc_with_all_existing_lvgs", func() { lvgSpec := []v1alpha1.LocalStorageClassLVG{ {Name: existingThickLVG1Name}, {Name: existingThickLVG2Name}, @@ -343,7 +343,7 @@ var _ = Describe(controller.LocalStorageClassCtrlName, func() { performStandartChecksForSC(sc, lvgSpec, nameForLocalStorageClass, controller.LocalStorageClassLvmType, controller.LVMThickType, reclaimPolicyDelete, volumeBindingModeWFFC) }) - It("Remove_local_sc_with_existing_vgs", func() { + It("Remove_local_sc_with_existing_lvgs", func() { lvgSpec := []v1alpha1.LocalStorageClassLVG{ {Name: existingThickLVG1Name}, {Name: existingThickLVG2Name}, @@ -516,7 +516,7 @@ var _ = Describe(controller.LocalStorageClassCtrlName, func() { It("Create_local_thin_sc_with_existing_thin_lvgs", func() { lvgSpec := []v1alpha1.LocalStorageClassLVG{ {Name: existingThinLVG1Name, Thin: &v1alpha1.LocalStorageClassThinPool{PoolName: "thin-pool-1"}}, - {Name: existingThinLVG2Name, Thin: &v1alpha1.LocalStorageClassThinPool{PoolName: "thin-pool-1"}}, + {Name: existingThinLVG2Name, Thin: &v1alpha1.LocalStorageClassThinPool{PoolName: "thin-pool-2"}}, } err := cl.Create(ctx, existingThinLVG1Template) @@ -525,13 +525,6 @@ var _ = Describe(controller.LocalStorageClassCtrlName, func() { err = cl.Create(ctx, existingThinLVG2Template) Expect(err).NotTo(HaveOccurred()) - existingThinLVG1 := &v1alpha1.LvmVolumeGroup{} - err = cl.Get(ctx, client.ObjectKey{Name: existingThinLVG1Name}, existingThinLVG1) - Expect(err).NotTo(HaveOccurred()) - Expect(existingThinLVG1.Spec.ThinPools).To(HaveLen(2)) - Expect(existingThinLVG1.Spec.ThinPools[0].Name).To(Equal("thin-pool-1")) - Expect(existingThinLVG1.Spec.ThinPools[1].Name).To(Equal("thin-pool-2")) - lscTemplate := generateLocalStorageClass(nameForLocalStorageClass, reclaimPolicyRetain, volumeBindingModeIM, controller.LVMThinType, lvgSpec) err = cl.Create(ctx, lscTemplate) @@ -564,6 +557,162 @@ var _ = Describe(controller.LocalStorageClassCtrlName, func() { performStandartChecksForSC(sc, lvgSpec, nameForLocalStorageClass, controller.LocalStorageClassLvmType, controller.LVMThinType, reclaimPolicyRetain, volumeBindingModeIM) }) + It("Update_local_thin_sc_add_existing_thin_lvg", func() { + lvgSpec := []v1alpha1.LocalStorageClassLVG{ + {Name: existingThinLVG1Name, Thin: &v1alpha1.LocalStorageClassThinPool{PoolName: "thin-pool-1"}}, + {Name: existingThinLVG2Name, Thin: &v1alpha1.LocalStorageClassThinPool{PoolName: "thin-pool-2"}}, + {Name: newThinLVGName, Thin: &v1alpha1.LocalStorageClassThinPool{PoolName: "thin-pool-1"}}, + } + + err := cl.Create(ctx, newThinLVGTemplate) + Expect(err).NotTo(HaveOccurred()) + + lsc := &v1alpha1.LocalStorageClass{} + err = cl.Get(ctx, client.ObjectKey{Name: nameForLocalStorageClass}, lsc) + Expect(err).NotTo(HaveOccurred()) + + lsc.Spec.LVM.LVMVolumeGroups = append(lsc.Spec.LVM.LVMVolumeGroups, v1alpha1.LocalStorageClassLVG{Name: newThinLVGName, Thin: &v1alpha1.LocalStorageClassThinPool{PoolName: "thin-pool-1"}}) + + err = cl.Update(ctx, lsc) + Expect(err).NotTo(HaveOccurred()) + + scList := &v1.StorageClassList{} + err = cl.List(ctx, scList) + Expect(err).NotTo(HaveOccurred()) + + shouldRequeue, err := controller.RunEventReconcile(ctx, cl, log, scList, lsc) + Expect(err).NotTo(HaveOccurred()) + Expect(shouldRequeue).To(BeFalse()) + + err = cl.Get(ctx, client.ObjectKey{Name: nameForLocalStorageClass}, lsc) + Expect(err).NotTo(HaveOccurred()) + Expect(lsc.Finalizers).To(HaveLen(1)) + Expect(lsc.Finalizers).To(ContainElement(controller.LocalStorageClassFinalizerName)) + Expect(lsc.Spec.LVM.LVMVolumeGroups).To(Equal(lvgSpec)) + Expect(lsc.Status.Phase).To(Equal(controller.CreatedStatusPhase)) + + sc := &v1.StorageClass{} + err = cl.Get(ctx, client.ObjectKey{Name: nameForLocalStorageClass}, sc) + Expect(err).NotTo(HaveOccurred()) + performStandartChecksForSC(sc, lvgSpec, nameForLocalStorageClass, controller.LocalStorageClassLvmType, controller.LVMThinType, reclaimPolicyRetain, volumeBindingModeIM) + }) + + It("Update_local_thin_sc_remove_existing_thin_lvg", func() { + lvgSpec := []v1alpha1.LocalStorageClassLVG{ + {Name: existingThinLVG1Name, Thin: &v1alpha1.LocalStorageClassThinPool{PoolName: "thin-pool-1"}}, + {Name: existingThinLVG2Name, Thin: &v1alpha1.LocalStorageClassThinPool{PoolName: "thin-pool-2"}}, + } + + lsc := &v1alpha1.LocalStorageClass{} + err := cl.Get(ctx, client.ObjectKey{Name: nameForLocalStorageClass}, lsc) + Expect(err).NotTo(HaveOccurred()) + + lsc.Spec.LVM.LVMVolumeGroups = delFromSlice(lsc.Spec.LVM.LVMVolumeGroups, newThinLVGName) + + err = cl.Update(ctx, lsc) + Expect(err).NotTo(HaveOccurred()) + + scList := &v1.StorageClassList{} + err = cl.List(ctx, scList) + Expect(err).NotTo(HaveOccurred()) + + shouldRequeue, err := controller.RunEventReconcile(ctx, cl, log, scList, lsc) + Expect(err).NotTo(HaveOccurred()) + Expect(shouldRequeue).To(BeFalse()) + + err = cl.Get(ctx, client.ObjectKey{Name: nameForLocalStorageClass}, lsc) + Expect(err).NotTo(HaveOccurred()) + Expect(lsc.Finalizers).To(HaveLen(1)) + Expect(lsc.Finalizers).To(ContainElement(controller.LocalStorageClassFinalizerName)) + Expect(lsc.Spec.LVM.LVMVolumeGroups).To(Equal(lvgSpec)) + Expect(lsc.Status.Phase).To(Equal(controller.CreatedStatusPhase)) + + sc := &v1.StorageClass{} + err = cl.Get(ctx, client.ObjectKey{Name: nameForLocalStorageClass}, sc) + Expect(err).NotTo(HaveOccurred()) + performStandartChecksForSC(sc, lvgSpec, nameForLocalStorageClass, controller.LocalStorageClassLvmType, controller.LVMThinType, reclaimPolicyRetain, volumeBindingModeIM) + }) + + It("Update_local_thin_sc_add_existing_thick_lvg", func() { + lvgSpecOld := []v1alpha1.LocalStorageClassLVG{ + {Name: existingThinLVG1Name, Thin: &v1alpha1.LocalStorageClassThinPool{PoolName: "thin-pool-1"}}, + {Name: existingThinLVG2Name, Thin: &v1alpha1.LocalStorageClassThinPool{PoolName: "thin-pool-2"}}, + } + + lvgSpec := []v1alpha1.LocalStorageClassLVG{ + {Name: existingThinLVG1Name, Thin: &v1alpha1.LocalStorageClassThinPool{PoolName: "thin-pool-1"}}, + {Name: existingThinLVG2Name, Thin: &v1alpha1.LocalStorageClassThinPool{PoolName: "thin-pool-2"}}, + {Name: existingThickLVG1Name}, + } + + lsc := &v1alpha1.LocalStorageClass{} + err := cl.Get(ctx, client.ObjectKey{Name: nameForLocalStorageClass}, lsc) + Expect(err).NotTo(HaveOccurred()) + + lsc.Spec.LVM.LVMVolumeGroups = append(lsc.Spec.LVM.LVMVolumeGroups, v1alpha1.LocalStorageClassLVG{Name: existingThickLVG1Name}) + + err = cl.Update(ctx, lsc) + Expect(err).NotTo(HaveOccurred()) + + scList := &v1.StorageClassList{} + err = cl.List(ctx, scList) + Expect(err).NotTo(HaveOccurred()) + + shouldRequeue, err := controller.RunEventReconcile(ctx, cl, log, scList, lsc) + Expect(err).To(HaveOccurred()) + Expect(shouldRequeue).To(BeTrue()) + + err = cl.Get(ctx, client.ObjectKey{Name: nameForLocalStorageClass}, lsc) + Expect(err).NotTo(HaveOccurred()) + Expect(lsc.Finalizers).To(HaveLen(1)) + Expect(lsc.Finalizers).To(ContainElement(controller.LocalStorageClassFinalizerName)) + Expect(lsc.Spec.LVM.LVMVolumeGroups).To(Equal(lvgSpec)) + Expect(lsc.Status.Phase).To(Equal(controller.FailedStatusPhase)) + + sc := &v1.StorageClass{} + err = cl.Get(ctx, client.ObjectKey{Name: nameForLocalStorageClass}, sc) + Expect(err).NotTo(HaveOccurred()) + performStandartChecksForSC(sc, lvgSpecOld, nameForLocalStorageClass, controller.LocalStorageClassLvmType, controller.LVMThinType, reclaimPolicyRetain, volumeBindingModeIM) + }) + + It("Remove_local_thin_sc_with_existing_thick_lvg", func() { + lvgSpec := []v1alpha1.LocalStorageClassLVG{ + {Name: existingThinLVG1Name, Thin: &v1alpha1.LocalStorageClassThinPool{PoolName: "thin-pool-1"}}, + {Name: existingThinLVG2Name, Thin: &v1alpha1.LocalStorageClassThinPool{PoolName: "thin-pool-2"}}, + {Name: existingThickLVG1Name}, + } + + lsc := &v1alpha1.LocalStorageClass{} + err := cl.Get(ctx, client.ObjectKey{Name: nameForLocalStorageClass}, lsc) + Expect(err).NotTo(HaveOccurred()) + + err = cl.Delete(ctx, lsc) + Expect(err).NotTo(HaveOccurred()) + + lsc = &v1alpha1.LocalStorageClass{} + err = cl.Get(ctx, client.ObjectKey{Name: nameForLocalStorageClass}, lsc) + Expect(err).NotTo(HaveOccurred()) + Expect(lsc.Finalizers).To(HaveLen(1)) + Expect(lsc.Finalizers).To(ContainElement(controller.LocalStorageClassFinalizerName)) + Expect(lsc.Spec.LVM.LVMVolumeGroups).To(Equal(lvgSpec)) + + scList := &v1.StorageClassList{} + err = cl.List(ctx, scList) + Expect(err).NotTo(HaveOccurred()) + Expect(scList.Items).To(HaveLen(1)) + + shouldRequeue, err := controller.RunEventReconcile(ctx, cl, log, scList, lsc) + Expect(err).NotTo(HaveOccurred()) + Expect(shouldRequeue).To(BeFalse()) + + err = cl.Get(ctx, client.ObjectKey{Name: nameForLocalStorageClass}, lsc) + Expect(k8serrors.IsNotFound(err)).To(BeTrue()) + + sc := &v1.StorageClass{} + err = cl.Get(ctx, client.ObjectKey{Name: nameForLocalStorageClass}, sc) + Expect(k8serrors.IsNotFound(err)).To(BeTrue()) + }) + }) func generateLVMVolumeGroup(name string, devices, thinPoolNames []string) *v1alpha1.LvmVolumeGroup {