From e3faa003a118c61d261540ca63fa1b1768aea7a6 Mon Sep 17 00:00:00 2001 From: Hemant Kumar Date: Thu, 7 Feb 2019 12:05:00 -0500 Subject: [PATCH] add e2e test when expansion is disabled Also refactor some of the code that creates resizable SC --- .../flexvolume_mounted_volume_resize.go | 13 ++++- test/e2e/storage/flexvolume_online_resize.go | 24 +++++----- test/e2e/storage/mounted_volume_resize.go | 7 +-- test/e2e/storage/testsuites/provisioning.go | 21 +++++---- test/e2e/storage/volume_expand.go | 47 ++++++++++++++++--- 5 files changed, 78 insertions(+), 34 deletions(-) diff --git a/test/e2e/storage/flexvolume_mounted_volume_resize.go b/test/e2e/storage/flexvolume_mounted_volume_resize.go index eb120773028..0d95e127fd7 100644 --- a/test/e2e/storage/flexvolume_mounted_volume_resize.go +++ b/test/e2e/storage/flexvolume_mounted_volume_resize.go @@ -18,6 +18,8 @@ package storage import ( "fmt" + "path" + . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" "k8s.io/api/core/v1" @@ -27,8 +29,8 @@ import ( utilerrors "k8s.io/apimachinery/pkg/util/errors" clientset "k8s.io/client-go/kubernetes" "k8s.io/kubernetes/test/e2e/framework" + "k8s.io/kubernetes/test/e2e/storage/testsuites" "k8s.io/kubernetes/test/e2e/storage/utils" - "path" ) var _ = utils.SIGDescribe("Mounted flexvolume expand[Slow]", func() { @@ -72,7 +74,14 @@ var _ = utils.SIGDescribe("Mounted flexvolume expand[Slow]", func() { isNodeLabeled = true } - resizableSc, err = createStorageClass(ns, c) + test := testsuites.StorageClassTest{ + Name: "flexvolume-resize", + ClaimSize: "2Gi", + AllowVolumeExpansion: true, + Provisioner: "flex-expand", + } + + resizableSc, err = createStorageClass(test, ns, "resizing", c) if err != nil { fmt.Printf("storage class creation error: %v\n", err) } diff --git a/test/e2e/storage/flexvolume_online_resize.go b/test/e2e/storage/flexvolume_online_resize.go index f1a915e586b..f51e078b97c 100644 --- a/test/e2e/storage/flexvolume_online_resize.go +++ b/test/e2e/storage/flexvolume_online_resize.go @@ -18,6 +18,8 @@ package storage import ( "fmt" + "path" + . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" "k8s.io/api/core/v1" @@ -26,21 +28,10 @@ import ( utilerrors "k8s.io/apimachinery/pkg/util/errors" clientset "k8s.io/client-go/kubernetes" "k8s.io/kubernetes/test/e2e/framework" + "k8s.io/kubernetes/test/e2e/storage/testsuites" "k8s.io/kubernetes/test/e2e/storage/utils" - "path" ) -func createStorageClass(ns string, c clientset.Interface) (*storage.StorageClass, error) { - bindingMode := storage.VolumeBindingImmediate - stKlass := getStorageClass("flex-expand", map[string]string{}, &bindingMode, ns, "resizing") - allowExpansion := true - stKlass.AllowVolumeExpansion = &allowExpansion - - var err error - stKlass, err = c.StorageV1().StorageClasses().Create(stKlass) - return stKlass, err -} - var _ = utils.SIGDescribe("Mounted flexvolume volume expand [Slow] [Feature:ExpandInUsePersistentVolumes]", func() { var ( c clientset.Interface @@ -82,7 +73,14 @@ var _ = utils.SIGDescribe("Mounted flexvolume volume expand [Slow] [Feature:Expa isNodeLabeled = true } - resizableSc, err = createStorageClass(ns, c) + test := testsuites.StorageClassTest{ + Name: "flexvolume-resize", + ClaimSize: "2Gi", + AllowVolumeExpansion: true, + Provisioner: "flex-expand", + } + + resizableSc, err = createStorageClass(test, ns, "resizing", c) if err != nil { fmt.Printf("storage class creation error: %v\n", err) } diff --git a/test/e2e/storage/mounted_volume_resize.go b/test/e2e/storage/mounted_volume_resize.go index 54feb244aac..29090f10ec5 100644 --- a/test/e2e/storage/mounted_volume_resize.go +++ b/test/e2e/storage/mounted_volume_resize.go @@ -74,10 +74,11 @@ var _ = utils.SIGDescribe("Mounted volume expand[Slow]", func() { } test := testsuites.StorageClassTest{ - Name: "default", - ClaimSize: "2Gi", + Name: "default", + ClaimSize: "2Gi", + AllowVolumeExpansion: true, } - resizableSc, err = createResizableStorageClass(test, ns, "resizing", c) + resizableSc, err = createStorageClass(test, ns, "resizing", c) Expect(err).NotTo(HaveOccurred(), "Error creating resizable storage class") Expect(*resizableSc.AllowVolumeExpansion).To(BeTrue()) diff --git a/test/e2e/storage/testsuites/provisioning.go b/test/e2e/storage/testsuites/provisioning.go index 74072542de8..7787efeeac4 100644 --- a/test/e2e/storage/testsuites/provisioning.go +++ b/test/e2e/storage/testsuites/provisioning.go @@ -41,16 +41,17 @@ import ( // StorageClassTest represents parameters to be used by provisioning tests. // Not all parameters are used by all tests. type StorageClassTest struct { - Name string - CloudProviders []string - Provisioner string - StorageClassName string - Parameters map[string]string - DelayBinding bool - ClaimSize string - ExpectedSize string - PvCheck func(claim *v1.PersistentVolumeClaim, volume *v1.PersistentVolume) - VolumeMode *v1.PersistentVolumeMode + Name string + CloudProviders []string + Provisioner string + StorageClassName string + Parameters map[string]string + DelayBinding bool + ClaimSize string + ExpectedSize string + PvCheck func(claim *v1.PersistentVolumeClaim, volume *v1.PersistentVolume) + VolumeMode *v1.PersistentVolumeMode + AllowVolumeExpansion bool } type provisioningTestSuite struct { diff --git a/test/e2e/storage/volume_expand.go b/test/e2e/storage/volume_expand.go index 1927e970adc..2323e26ba1c 100644 --- a/test/e2e/storage/volume_expand.go +++ b/test/e2e/storage/volume_expand.go @@ -56,10 +56,11 @@ var _ = utils.SIGDescribe("Volume expand [Slow]", func() { ns = f.Namespace.Name framework.ExpectNoError(framework.WaitForAllNodesSchedulable(c, framework.TestContext.NodeSchedulableTimeout)) test := testsuites.StorageClassTest{ - Name: "default", - ClaimSize: "2Gi", + Name: "default", + ClaimSize: "2Gi", + AllowVolumeExpansion: true, } - resizableSc, err = createResizableStorageClass(test, ns, "resizing", c) + resizableSc, err = createStorageClass(test, ns, "resizing", c) Expect(err).NotTo(HaveOccurred(), "Error creating resizable storage class") Expect(resizableSc.AllowVolumeExpansion).NotTo(BeNil()) Expect(*resizableSc.AllowVolumeExpansion).To(BeTrue()) @@ -75,6 +76,42 @@ var _ = utils.SIGDescribe("Volume expand [Slow]", func() { framework.ExpectNoError(c.StorageV1().StorageClasses().Delete(resizableSc.Name, nil)) }) + It("should not allow expansion of pvcs without AllowVolumeExpansion property", func() { + test := testsuites.StorageClassTest{ + Name: "no-expansion", + ClaimSize: "2Gi", + AllowVolumeExpansion: false, + } + regularSC, err := createStorageClass(test, ns, "noexpand", c) + Expect(err).NotTo(HaveOccurred(), "Error creating non-expandable storage class") + + defer func() { + framework.ExpectNoError(c.StorageV1().StorageClasses().Delete(regularSC.Name, nil)) + }() + + Expect(regularSC.AllowVolumeExpansion).NotTo(BeNil()) + Expect(*resizableSc.AllowVolumeExpansion).To(BeFalse()) + + noExpandPVC := newClaim(test, ns, "noexpand") + noExpandPVC.Spec.StorageClassName = ®ularSC.Name + noExpandPVC, err = c.CoreV1().PersistentVolumeClaims(noExpandPVC.Namespace).Create(noExpandPVC) + Expect(err).NotTo(HaveOccurred(), "Error creating pvc") + + defer func() { + framework.ExpectNoError(framework.DeletePersistentVolumeClaim(c, noExpandPVC.Name, noExpandPVC.Namespace)) + }() + + pvcClaims := []*v1.PersistentVolumeClaim{noExpandPVC} + pvs, err := framework.WaitForPVClaimBoundPhase(c, pvcClaims, framework.ClaimProvisionTimeout) + Expect(err).NotTo(HaveOccurred(), "Failed waiting for PVC to be bound %v", err) + Expect(len(pvs)).To(Equal(1)) + + By("Expanding non-expandable pvc") + newSize := resource.MustParse("6Gi") + pvc, err = expandPVCSize(noExpandPVC, newSize, c) + Expect(err).To(HaveOccurred(), "While updating non-expandable PVC") + }) + It("Verify if editing PVC allows resize", func() { By("Waiting for pvc to be in bound phase") pvcClaims := []*v1.PersistentVolumeClaim{pvc} @@ -134,10 +171,8 @@ var _ = utils.SIGDescribe("Volume expand [Slow]", func() { }) }) -func createResizableStorageClass(t testsuites.StorageClassTest, ns string, suffix string, c clientset.Interface) (*storage.StorageClass, error) { +func createStorageClass(t testsuites.StorageClassTest, ns string, suffix string, c clientset.Interface) (*storage.StorageClass, error) { stKlass := newStorageClass(t, ns, suffix) - allowExpansion := true - stKlass.AllowVolumeExpansion = &allowExpansion var err error stKlass, err = c.StorageV1().StorageClasses().Create(stKlass)