From e3faa003a118c61d261540ca63fa1b1768aea7a6 Mon Sep 17 00:00:00 2001 From: Hemant Kumar Date: Thu, 7 Feb 2019 12:05:00 -0500 Subject: [PATCH 1/2] 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) From 7d823e5df01a8fe8138e25a2b7ae6fa031e21691 Mon Sep 17 00:00:00 2001 From: Hemant Kumar Date: Thu, 7 Feb 2019 12:30:52 -0500 Subject: [PATCH 2/2] also remove slow tag from resizing tests --- cluster/gce/config-test.sh | 2 +- test/e2e/storage/mounted_volume_resize.go | 2 +- test/e2e/storage/volume_expand.go | 13 +++++-------- test/e2e/storage/volume_provisioning.go | 6 +++++- 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/cluster/gce/config-test.sh b/cluster/gce/config-test.sh index a601399b3f5..4bac9cedfe6 100755 --- a/cluster/gce/config-test.sh +++ b/cluster/gce/config-test.sh @@ -368,7 +368,7 @@ if [[ -n "${GCE_GLBC_IMAGE:-}" ]]; then fi if [[ -z "${KUBE_ADMISSION_CONTROL:-}" ]]; then - ADMISSION_CONTROL="NamespaceLifecycle,LimitRanger,ServiceAccount,PersistentVolumeLabel,PodPreset,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,Priority,StorageObjectInUseProtection" + ADMISSION_CONTROL="NamespaceLifecycle,LimitRanger,ServiceAccount,PersistentVolumeLabel,PodPreset,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,Priority,StorageObjectInUseProtection,PersistentVolumeClaimResize" if [[ "${ENABLE_POD_SECURITY_POLICY:-}" == "true" ]]; then ADMISSION_CONTROL="${ADMISSION_CONTROL},PodSecurityPolicy" fi diff --git a/test/e2e/storage/mounted_volume_resize.go b/test/e2e/storage/mounted_volume_resize.go index 29090f10ec5..656c9df0150 100644 --- a/test/e2e/storage/mounted_volume_resize.go +++ b/test/e2e/storage/mounted_volume_resize.go @@ -35,7 +35,7 @@ import ( "k8s.io/kubernetes/test/e2e/storage/utils" ) -var _ = utils.SIGDescribe("Mounted volume expand[Slow]", func() { +var _ = utils.SIGDescribe("Mounted volume expand", func() { var ( c clientset.Interface ns string diff --git a/test/e2e/storage/volume_expand.go b/test/e2e/storage/volume_expand.go index 2323e26ba1c..5d9486d4a94 100644 --- a/test/e2e/storage/volume_expand.go +++ b/test/e2e/storage/volume_expand.go @@ -40,7 +40,7 @@ const ( totalResizeWaitPeriod = 20 * time.Minute ) -var _ = utils.SIGDescribe("Volume expand [Slow]", func() { +var _ = utils.SIGDescribe("Volume expand", func() { var ( c clientset.Interface ns string @@ -78,9 +78,8 @@ var _ = utils.SIGDescribe("Volume expand [Slow]", func() { It("should not allow expansion of pvcs without AllowVolumeExpansion property", func() { test := testsuites.StorageClassTest{ - Name: "no-expansion", - ClaimSize: "2Gi", - AllowVolumeExpansion: false, + Name: "no-expansion", + ClaimSize: "2Gi", } regularSC, err := createStorageClass(test, ns, "noexpand", c) Expect(err).NotTo(HaveOccurred(), "Error creating non-expandable storage class") @@ -88,9 +87,7 @@ var _ = utils.SIGDescribe("Volume expand [Slow]", func() { defer func() { framework.ExpectNoError(c.StorageV1().StorageClasses().Delete(regularSC.Name, nil)) }() - - Expect(regularSC.AllowVolumeExpansion).NotTo(BeNil()) - Expect(*resizableSc.AllowVolumeExpansion).To(BeFalse()) + Expect(regularSC.AllowVolumeExpansion).To(BeNil()) noExpandPVC := newClaim(test, ns, "noexpand") noExpandPVC.Spec.StorageClassName = ®ularSC.Name @@ -108,7 +105,7 @@ var _ = utils.SIGDescribe("Volume expand [Slow]", func() { By("Expanding non-expandable pvc") newSize := resource.MustParse("6Gi") - pvc, err = expandPVCSize(noExpandPVC, newSize, c) + noExpandPVC, err = expandPVCSize(noExpandPVC, newSize, c) Expect(err).To(HaveOccurred(), "While updating non-expandable PVC") }) diff --git a/test/e2e/storage/volume_provisioning.go b/test/e2e/storage/volume_provisioning.go index 98359d17f9d..0cf1df804c3 100644 --- a/test/e2e/storage/volume_provisioning.go +++ b/test/e2e/storage/volume_provisioning.go @@ -1063,7 +1063,11 @@ func newStorageClass(t testsuites.StorageClassTest, ns string, suffix string) *s if t.DelayBinding { bindingMode = storage.VolumeBindingWaitForFirstConsumer } - return getStorageClass(pluginName, t.Parameters, &bindingMode, ns, suffix) + sc := getStorageClass(pluginName, t.Parameters, &bindingMode, ns, suffix) + if t.AllowVolumeExpansion { + sc.AllowVolumeExpansion = &t.AllowVolumeExpansion + } + return sc } func getStorageClass(