@@ -23,6 +23,7 @@ import (
2323 . "github.com/onsi/gomega"
2424
2525 corev1 "k8s.io/api/core/v1"
26+ "k8s.io/apimachinery/pkg/api/resource"
2627 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2728 "k8s.io/apimachinery/pkg/runtime"
2829 "k8s.io/client-go/kubernetes/scheme"
@@ -33,18 +34,37 @@ import (
3334 logf "sigs.k8s.io/controller-runtime/pkg/log"
3435
3536 cdiv1 "kubevirt.io/containerized-data-importer-api/pkg/apis/core/v1beta1"
37+ "kubevirt.io/containerized-data-importer/pkg/common"
3638 cc "kubevirt.io/containerized-data-importer/pkg/controller/common"
3739)
3840
3941var _ = Describe ("HostClonePhase test" , func () {
4042 log := logf .Log .WithName ("host-clone-phase-test" )
4143
42- creatHostClonePhase := func (objects ... runtime.Object ) * HostClonePhase {
44+ type ResourceModifier struct {
45+ modifySourcePvc func (pvcSpec * corev1.PersistentVolumeClaimSpec )
46+ modifyDesiredPvc func (pvcSpec * corev1.PersistentVolumeClaimSpec )
47+ }
48+
49+ creatHostClonePhase := func (modifier * ResourceModifier , objects ... runtime.Object ) * HostClonePhase {
4350 s := scheme .Scheme
4451 _ = cdiv1 .AddToScheme (s )
4552
4653 objects = append (objects , cc .MakeEmptyCDICR ())
4754
55+ source := & corev1.PersistentVolumeClaim {
56+ ObjectMeta : metav1.ObjectMeta {
57+ Namespace : "ns" ,
58+ Name : "source" ,
59+ },
60+ }
61+
62+ if modifier != nil && modifier .modifySourcePvc != nil {
63+ modifier .modifySourcePvc (& source .Spec )
64+ }
65+
66+ objects = append (objects , source )
67+
4868 // Create a fake client to mock API calls.
4969 builder := fake .NewClientBuilder ().
5070 WithScheme (s ).
@@ -69,11 +89,15 @@ var _ = Describe("HostClonePhase test", func() {
6989 },
7090 }
7191
92+ if modifier != nil && modifier .modifyDesiredPvc != nil {
93+ modifier .modifyDesiredPvc (& desired .Spec )
94+ }
95+
7296 return & HostClonePhase {
7397 Owner : owner ,
7498 OwnershipLabel : "label" ,
7599 Namespace : "ns" ,
76- SourceName : " source" ,
100+ SourceName : source . Name ,
77101 DesiredClaim : desired ,
78102 ImmediateBind : true ,
79103 Preallocation : false ,
@@ -91,7 +115,7 @@ var _ = Describe("HostClonePhase test", func() {
91115 }
92116
93117 It ("should create pvc" , func () {
94- p := creatHostClonePhase ()
118+ p := creatHostClonePhase (nil )
95119
96120 result , err := p .Reconcile (context .Background ())
97121 Expect (err ).ToNot (HaveOccurred ())
@@ -114,7 +138,7 @@ var _ = Describe("HostClonePhase test", func() {
114138 })
115139
116140 It ("should create pvc with priorityclass" , func () {
117- p := creatHostClonePhase ()
141+ p := creatHostClonePhase (nil )
118142 p .PriorityClassName = "priority"
119143
120144 result , err := p .Reconcile (context .Background ())
@@ -127,6 +151,45 @@ var _ = Describe("HostClonePhase test", func() {
127151 Expect (pvc .Annotations [cc .AnnPriorityClassName ]).To (Equal ("priority" ))
128152 })
129153
154+ It ("should adjust requested size for filesystem volume mode" , func () {
155+ setPvcAttributes := func (pvcSpec * corev1.PersistentVolumeClaimSpec , volumeMode corev1.PersistentVolumeMode , storage string ) {
156+ pvcSpec .VolumeMode = & volumeMode
157+ if pvcSpec .Resources .Requests == nil {
158+ pvcSpec .Resources .Requests = corev1.ResourceList {}
159+ }
160+ pvcSpec .Resources .Requests [corev1 .ResourceStorage ] = resource .MustParse (storage )
161+ }
162+ cdiConfig := cc .MakeEmptyCDIConfigSpec (common .ConfigName )
163+ cdiConfig .Status .FilesystemOverhead = & cdiv1.FilesystemOverhead {
164+ Global : common .DefaultGlobalOverhead ,
165+ }
166+
167+ p := creatHostClonePhase (& ResourceModifier {
168+ modifySourcePvc : func (pvcSpec * corev1.PersistentVolumeClaimSpec ) {
169+ setPvcAttributes (pvcSpec , corev1 .PersistentVolumeBlock , "8Gi" )
170+ },
171+ modifyDesiredPvc : func (pvcSpec * corev1.PersistentVolumeClaimSpec ) {
172+ setPvcAttributes (pvcSpec , corev1 .PersistentVolumeFilesystem , "8Gi" )
173+ // fakeCs := "hostpath-csi"
174+ // pvcSpec.StorageClassName = &fakeCs
175+ },
176+ }, cdiConfig )
177+
178+ result , err := p .Reconcile (context .Background ())
179+ Expect (err ).ToNot (HaveOccurred ())
180+ Expect (result ).ToNot (BeNil ())
181+ Expect (result .Requeue ).To (BeFalse ())
182+ Expect (result .RequeueAfter ).ToNot (BeZero ())
183+
184+ pvc := getDesiredClaim (p )
185+
186+ Expect (* pvc .Spec .VolumeMode ).To (Equal (corev1 .PersistentVolumeFilesystem ))
187+ actualSize := pvc .Spec .Resources .Requests [corev1 .ResourceStorage ]
188+ originalRequested := resource .MustParse ("8Gi" )
189+
190+ Expect (actualSize .Cmp (originalRequested )).To (BeNumerically (">" , 0 ), "The actual should be greater than the requested" , "actual" , actualSize , "requested" , originalRequested )
191+ })
192+
130193 Context ("with desired claim created" , func () {
131194 getCliam := func () * corev1.PersistentVolumeClaim {
132195 return & corev1.PersistentVolumeClaim {
@@ -141,7 +204,7 @@ var _ = Describe("HostClonePhase test", func() {
141204 It ("should wait for clone to succeed" , func () {
142205 desired := getCliam ()
143206 desired .Annotations [cc .AnnPodPhase ] = "Running"
144- p := creatHostClonePhase (desired )
207+ p := creatHostClonePhase (nil , desired )
145208
146209 result , err := p .Reconcile (context .Background ())
147210 Expect (err ).ToNot (HaveOccurred ())
@@ -153,7 +216,7 @@ var _ = Describe("HostClonePhase test", func() {
153216 It ("should wait for clone to succeed with preallocation" , func () {
154217 desired := getCliam ()
155218 desired .Annotations [cc .AnnPodPhase ] = "Succeeded"
156- p := creatHostClonePhase (desired )
219+ p := creatHostClonePhase (nil , desired )
157220 p .Preallocation = true
158221
159222 result , err := p .Reconcile (context .Background ())
@@ -166,7 +229,7 @@ var _ = Describe("HostClonePhase test", func() {
166229 It ("should succeed" , func () {
167230 desired := getCliam ()
168231 desired .Annotations [cc .AnnPodPhase ] = "Succeeded"
169- p := creatHostClonePhase (desired )
232+ p := creatHostClonePhase (nil , desired )
170233
171234 result , err := p .Reconcile (context .Background ())
172235 Expect (err ).ToNot (HaveOccurred ())
@@ -177,7 +240,7 @@ var _ = Describe("HostClonePhase test", func() {
177240 desired := getCliam ()
178241 desired .Annotations [cc .AnnPodPhase ] = "Succeeded"
179242 desired .Annotations [cc .AnnPreallocationApplied ] = "true"
180- p := creatHostClonePhase (desired )
243+ p := creatHostClonePhase (nil , desired )
181244 p .Preallocation = true
182245
183246 result , err := p .Reconcile (context .Background ())
0 commit comments