k8s.io/kubernetes@v1.29.3/test/e2e/storage/vsphere/vsphere_volume_disksize.go (about) 1 /* 2 Copyright 2017 The Kubernetes Authors. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package vsphere 18 19 import ( 20 "context" 21 "time" 22 23 "github.com/onsi/ginkgo/v2" 24 "github.com/onsi/gomega" 25 26 v1 "k8s.io/api/core/v1" 27 "k8s.io/apimachinery/pkg/api/resource" 28 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 29 clientset "k8s.io/client-go/kubernetes" 30 "k8s.io/kubernetes/test/e2e/feature" 31 "k8s.io/kubernetes/test/e2e/framework" 32 e2epv "k8s.io/kubernetes/test/e2e/framework/pv" 33 e2eskipper "k8s.io/kubernetes/test/e2e/framework/skipper" 34 "k8s.io/kubernetes/test/e2e/storage/utils" 35 admissionapi "k8s.io/pod-security-admission/api" 36 ) 37 38 const ( 39 diskSizeSCName = "disksizesc" 40 ) 41 42 /* 43 Test to verify disk size specified in PVC is being rounded up correctly. 44 45 Steps 46 1. Create StorageClass. 47 2. Create PVC with invalid disk size which uses the StorageClass created in step 1. 48 3. Verify the provisioned PV size is correct. 49 */ 50 51 var _ = utils.SIGDescribe("Volume Disk Size", feature.Vsphere, func() { 52 f := framework.NewDefaultFramework("volume-disksize") 53 f.NamespacePodSecurityLevel = admissionapi.LevelPrivileged 54 var ( 55 client clientset.Interface 56 namespace string 57 scParameters map[string]string 58 datastore string 59 ) 60 ginkgo.BeforeEach(func() { 61 e2eskipper.SkipUnlessProviderIs("vsphere") 62 Bootstrap(f) 63 client = f.ClientSet 64 namespace = f.Namespace.Name 65 scParameters = make(map[string]string) 66 datastore = GetAndExpectStringEnvVar(StorageClassDatastoreName) 67 }) 68 69 ginkgo.It("verify dynamically provisioned pv has size rounded up correctly", func(ctx context.Context) { 70 ginkgo.By("Invoking Test disk size") 71 scParameters[Datastore] = datastore 72 scParameters[DiskFormat] = ThinDisk 73 diskSize := "1" 74 expectedDiskSize := "1Mi" 75 76 ginkgo.By("Creating Storage Class") 77 storageclass, err := client.StorageV1().StorageClasses().Create(ctx, getVSphereStorageClassSpec(diskSizeSCName, scParameters, nil, ""), metav1.CreateOptions{}) 78 framework.ExpectNoError(err) 79 ginkgo.DeferCleanup(framework.IgnoreNotFound(client.StorageV1().StorageClasses().Delete), storageclass.Name, metav1.DeleteOptions{}) 80 81 ginkgo.By("Creating PVC using the Storage Class") 82 pvclaim, err := e2epv.CreatePVC(ctx, client, namespace, getVSphereClaimSpecWithStorageClass(namespace, diskSize, storageclass)) 83 framework.ExpectNoError(err) 84 ginkgo.DeferCleanup(e2epv.DeletePersistentVolumeClaim, client, pvclaim.Name, namespace) 85 86 ginkgo.By("Waiting for claim to be in bound phase") 87 err = e2epv.WaitForPersistentVolumeClaimPhase(ctx, v1.ClaimBound, client, pvclaim.Namespace, pvclaim.Name, framework.Poll, 2*time.Minute) 88 framework.ExpectNoError(err) 89 90 ginkgo.By("Getting new copy of PVC") 91 pvclaim, err = client.CoreV1().PersistentVolumeClaims(pvclaim.Namespace).Get(ctx, pvclaim.Name, metav1.GetOptions{}) 92 framework.ExpectNoError(err) 93 94 ginkgo.By("Getting PV created") 95 pv, err := client.CoreV1().PersistentVolumes().Get(ctx, pvclaim.Spec.VolumeName, metav1.GetOptions{}) 96 framework.ExpectNoError(err) 97 98 ginkgo.By("Verifying if provisioned PV has the correct size") 99 expectedCapacity := resource.MustParse(expectedDiskSize) 100 pvCapacity := pv.Spec.Capacity[v1.ResourceName(v1.ResourceStorage)] 101 gomega.Expect(pvCapacity.Value()).To(gomega.Equal(expectedCapacity.Value())) 102 }) 103 })