@@ -122,6 +122,35 @@ func pstring(name string) *string {
122122 return pointer .String (name )
123123}
124124
125+ func newPowervsImage (imageName string ) * infrav1.IBMPowerVSImage {
126+ return & infrav1.IBMPowerVSImage {
127+ ObjectMeta : metav1.ObjectMeta {
128+ Name : imageName ,
129+ Namespace : "default" ,
130+ },
131+ Spec : infrav1.IBMPowerVSImageSpec {
132+ ClusterName : "test-cluster" ,
133+ ServiceInstanceID : "test-service-ID" ,
134+ Object : pstring ("sample-image.ova.gz" ),
135+ Bucket : pstring ("sample-bucket" ),
136+ Region : pstring ("us-south" ),
137+ },
138+ }
139+ }
140+
141+ func setupPowerVSImageScope (imageName string ) (* PowerVSImageScope , error ) {
142+ powervsImage := newPowervsImage (imageName )
143+ initObjects := []client.Object {powervsImage }
144+
145+ client := fake .NewClientBuilder ().WithScheme (scheme .Scheme ).WithObjects (initObjects ... ).Build ()
146+ return & PowerVSImageScope {
147+ client : client ,
148+ Logger : klogr .New (),
149+ IBMPowerVSClient : mockpowervs ,
150+ IBMPowerVSImage : powervsImage ,
151+ }, nil
152+ }
153+
125154func setupPowerVSMachineScope (clusterName string , machineName string , imageID * string , networkID * string , isID bool ) (* PowerVSMachineScope , error ) {
126155 cluster := newCluster (clusterName )
127156 machine := newMachine (clusterName , machineName )
@@ -325,4 +354,71 @@ var _ = Describe("PowerVS machine and image creation", func() {
325354 Expect (err ).NotTo (HaveOccurred ())
326355 })
327356 })
357+
358+ Context ("Create or Delete IBMPowerVSImage" , func () {
359+ It ("should not error and create an image import job" , func () {
360+ scope , err := setupPowerVSImageScope ("sample-image" )
361+ Expect (err ).NotTo (HaveOccurred ())
362+ spec := scope .IBMPowerVSImage .Spec
363+
364+ images := & models.Images {}
365+ body := & models.CreateCosImageImportJob {
366+ ImageName : & scope .IBMPowerVSImage .ObjectMeta .Name ,
367+ BucketName : spec .Bucket ,
368+ BucketAccess : pstring ("public" ),
369+ Region : spec .Region ,
370+ ImageFilename : spec .Object ,
371+ }
372+
373+ mockpowervs .EXPECT ().GetAllImage ().Return (images , nil )
374+ mockpowervs .EXPECT ().GetCosImages (scope .IBMPowerVSImage .Spec .ServiceInstanceID ).Return (nil , nil )
375+ mockpowervs .EXPECT ().CreateCosImage (body ).Return (& models.JobReference {ID : pstring ("test-job-ID" )}, nil )
376+
377+ _ , jobRef , err := scope .CreateImageCOSBucket ()
378+ Expect (err ).NotTo (HaveOccurred ())
379+ Expect (jobRef ).ToNot (BeNil ())
380+ })
381+
382+ It ("should not error and use the existing image" , func () {
383+ scope , err := setupPowerVSImageScope ("sample-image" )
384+ Expect (err ).NotTo (HaveOccurred ())
385+
386+ images := & models.Images {
387+ Images : []* models.ImageReference {
388+ {
389+ ImageID : pstring ("sample-image-ID" ),
390+ Name : pstring ("sample-image" ),
391+ },
392+ },
393+ }
394+ mockpowervs .EXPECT ().GetAllImage ().Return (images , nil )
395+
396+ imageRef , _ , err := scope .CreateImageCOSBucket ()
397+ Expect (err ).NotTo (HaveOccurred ())
398+ Expect (imageRef ).ToNot (BeNil ())
399+ })
400+
401+ It ("should return as the previous job is not finished" , func () {
402+ scope , err := setupPowerVSImageScope ("sample-image" )
403+ Expect (err ).NotTo (HaveOccurred ())
404+
405+ images := & models.Images {}
406+ job := & models.Job {ID : pstring ("test-job-ID" ), Status : & models.Status {State : pstring ("pending" )}}
407+ mockpowervs .EXPECT ().GetAllImage ().Return (images , nil )
408+ mockpowervs .EXPECT ().GetCosImages (scope .IBMPowerVSImage .Spec .ServiceInstanceID ).Return (job , nil )
409+
410+ _ , _ , err = scope .CreateImageCOSBucket ()
411+ Expect (err ).NotTo (HaveOccurred ())
412+ })
413+
414+ It ("should not error and delete the image" , func () {
415+ scope , err := setupPowerVSImageScope ("sample-image" )
416+ Expect (err ).NotTo (HaveOccurred ())
417+
418+ mockpowervs .EXPECT ().DeleteImage (gomock .AssignableToTypeOf ("sample-image-ID" )).Return (nil )
419+
420+ err = scope .DeleteImage ()
421+ Expect (err ).NotTo (HaveOccurred ())
422+ })
423+ })
328424})
0 commit comments