@@ -2215,6 +2215,41 @@ var _ = Describe("all clone tests", func() {
22152215
22162216 })
22172217
2218+ DescribeTable ("Clone target datavolume smaller than the source, using storgeProfile with minPvcSize annotation" , func (minSize string , shouldSucceed bool ) {
2219+ By (fmt .Sprintf ("Create source PVC %s" , sourcePVCName ))
2220+ ns := f .Namespace .Name
2221+ sc := createStorageWithMinimumSupportedPVCSize (f , minSize )
2222+ pvcDef := utils .NewPVCDefinition (sourcePVCName , "1Gi" , nil , nil )
2223+ pvcDef .Namespace = ns
2224+ pvcDef .Spec .StorageClassName = & sc
2225+ sourcePvc = f .CreateAndPopulateSourcePVC (pvcDef , sourcePodFillerName , fillCommand + testFile + "; chmod 660 " + testBaseDir + testFile )
2226+
2227+ targetDvName := "small-target-dv"
2228+ By (fmt .Sprintf ("Create small target DV %s" , targetDvName ))
2229+
2230+ targetDV := utils .NewCloningDataVolume (targetDvName , "512Mi" , pvcDef )
2231+ targetDV , err := utils .CreateDataVolumeFromDefinition (f .CdiClient , ns , targetDV )
2232+ Expect (err ).ToNot (HaveOccurred ())
2233+
2234+ if ! shouldSucceed {
2235+ By ("The clone should fail" )
2236+ f .ExpectEvent (ns ).Should (ContainSubstring (dvc .CloneValidationFailed ))
2237+ return
2238+ }
2239+
2240+ targetPvc , err = utils .WaitForPVC (f .K8sClient , targetDV .Namespace , targetDV .Name )
2241+ Expect (err ).ToNot (HaveOccurred ())
2242+ f .ForceBindIfWaitForFirstConsumer (targetPvc )
2243+
2244+ By ("Wait for target DV succeeded" )
2245+ err = utils .WaitForDataVolumePhase (f , ns , cdiv1 .Succeeded , targetPvc .Name )
2246+ Expect (err ).ToNot (HaveOccurred ())
2247+ },
2248+ Entry ("[test_id:XXXX] large enough" , "1Gi" , true ),
2249+ Entry ("[test_id:XXXX] too small" , "256Mi" , false ),
2250+ Entry ("[test_id:XXXX] empty" , "" , false ),
2251+ )
2252+
22182253 It ("[test_id:4276] Clone datavolume with short name" , Serial , func () {
22192254 shortDvName := "import-long-name-dv"
22202255
@@ -3058,3 +3093,21 @@ func validateCloneType(f *framework.Framework, dv *cdiv1.DataVolume) {
30583093
30593094 Expect (utils .GetCloneType (f .CdiClient , dv )).To (Equal (cloneType ))
30603095}
3096+
3097+ func createStorageWithMinimumSupportedPVCSize (f * framework.Framework , minSize string ) string {
3098+ sc , err := f .CreateNonDefaultVariationOfStorageClass (utils .DefaultStorageClass ,
3099+ func (sc * storagev1.StorageClass ) { sc .UID = "" })
3100+ Expect (err ).ToNot (HaveOccurred ())
3101+
3102+ var sp * cdiv1.StorageProfile
3103+ Eventually (func () error {
3104+ sp , err = f .CdiClient .CdiV1beta1 ().StorageProfiles ().Get (context .TODO (), sc .Name , metav1.GetOptions {})
3105+ return err
3106+ }, time .Minute , time .Second ).Should (Succeed ())
3107+
3108+ sp .Annotations = map [string ]string {controller .AnnMinimumSupportedPVCSize : minSize }
3109+ _ , err = f .CdiClient .CdiV1beta1 ().StorageProfiles ().Update (context .TODO (), sp , metav1.UpdateOptions {})
3110+ Expect (err ).ToNot (HaveOccurred ())
3111+
3112+ return sc .Name
3113+ }
0 commit comments