@@ -20,6 +20,7 @@ import (
20
20
"context"
21
21
"encoding/json"
22
22
"errors"
23
+ "reflect"
23
24
"testing"
24
25
25
26
credentialtypes "github.com/nutanix-cloud-native/prism-go-client/environment/credentials"
@@ -31,10 +32,12 @@ import (
31
32
"go.uber.org/mock/gomock"
32
33
corev1 "k8s.io/api/core/v1"
33
34
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
35
+ "k8s.io/utils/ptr"
34
36
"sigs.k8s.io/cluster-api/util"
35
37
36
38
infrav1 "github.com/nutanix-cloud-native/cluster-api-provider-nutanix/api/v1beta1"
37
39
mockk8sclient "github.com/nutanix-cloud-native/cluster-api-provider-nutanix/mocks/k8sclient"
40
+ mocknutanixv3 "github.com/nutanix-cloud-native/cluster-api-provider-nutanix/mocks/nutanix"
38
41
nutanixclient "github.com/nutanix-cloud-native/cluster-api-provider-nutanix/pkg/client"
39
42
)
40
43
@@ -229,3 +232,200 @@ func TestGetPrismCentralClientForCluster(t *testing.T) {
229
232
assert .NoError (t , err )
230
233
})
231
234
}
235
+
236
+ func TestGetImageByNameOrUUID (t * testing.T ) {
237
+ tests := []struct {
238
+ name string
239
+ clientBuilder func () * prismclientv3.Client
240
+ id infrav1.NutanixResourceIdentifier
241
+ want * prismclientv3.ImageIntentResponse
242
+ wantErr bool
243
+ }{
244
+ {
245
+ name : "missing name and UUID in the input" ,
246
+ clientBuilder : func () * prismclientv3.Client {
247
+ mockctrl := gomock .NewController (t )
248
+ mockv3Service := mocknutanixv3 .NewMockService (mockctrl )
249
+
250
+ return & prismclientv3.Client {V3 : mockv3Service }
251
+ },
252
+ id : infrav1.NutanixResourceIdentifier {},
253
+ wantErr : true ,
254
+ },
255
+ {
256
+ name : "image UUID not found" ,
257
+ clientBuilder : func () * prismclientv3.Client {
258
+ mockctrl := gomock .NewController (t )
259
+ mockv3Service := mocknutanixv3 .NewMockService (mockctrl )
260
+ mockv3Service .EXPECT ().GetImage (gomock .Any (), gomock .Any ()).Return (nil , errors .New ("ENTITY_NOT_FOUND" ))
261
+
262
+ return & prismclientv3.Client {V3 : mockv3Service }
263
+ },
264
+ id : infrav1.NutanixResourceIdentifier {
265
+ Type : infrav1 .NutanixIdentifierUUID ,
266
+ UUID : ptr .To ("32432daf-fb0e-4202-b444-2439f43a24c5" ),
267
+ },
268
+ wantErr : true ,
269
+ },
270
+ {
271
+ name : "image name query fails" ,
272
+ clientBuilder : func () * prismclientv3.Client {
273
+ mockctrl := gomock .NewController (t )
274
+ mockv3Service := mocknutanixv3 .NewMockService (mockctrl )
275
+ mockv3Service .EXPECT ().ListAllImage (gomock .Any (), gomock .Any ()).Return (nil , errors .New ("fake error" ))
276
+
277
+ return & prismclientv3.Client {V3 : mockv3Service }
278
+ },
279
+ id : infrav1.NutanixResourceIdentifier {
280
+ Type : infrav1 .NutanixIdentifierName ,
281
+ Name : ptr .To ("example" ),
282
+ },
283
+ wantErr : true ,
284
+ },
285
+ {
286
+ name : "image UUID found" ,
287
+ clientBuilder : func () * prismclientv3.Client {
288
+ mockctrl := gomock .NewController (t )
289
+ mockv3Service := mocknutanixv3 .NewMockService (mockctrl )
290
+ mockv3Service .EXPECT ().GetImage (gomock .Any (), gomock .Any ()).Return (
291
+ & prismclientv3.ImageIntentResponse {
292
+ Spec : & prismclientv3.Image {
293
+ Name : ptr .To ("example" ),
294
+ },
295
+ }, nil ,
296
+ )
297
+
298
+ return & prismclientv3.Client {V3 : mockv3Service }
299
+ },
300
+ id : infrav1.NutanixResourceIdentifier {
301
+ Type : infrav1 .NutanixIdentifierUUID ,
302
+ UUID : ptr .To ("32432daf-fb0e-4202-b444-2439f43a24c5" ),
303
+ },
304
+ want : & prismclientv3.ImageIntentResponse {
305
+ Spec : & prismclientv3.Image {
306
+ Name : ptr .To ("example" ),
307
+ },
308
+ },
309
+ },
310
+ {
311
+ name : "image name found" ,
312
+ clientBuilder : func () * prismclientv3.Client {
313
+ mockctrl := gomock .NewController (t )
314
+ mockv3Service := mocknutanixv3 .NewMockService (mockctrl )
315
+ mockv3Service .EXPECT ().ListAllImage (gomock .Any (), gomock .Any ()).Return (
316
+ & prismclientv3.ImageListIntentResponse {
317
+ Entities : []* prismclientv3.ImageIntentResponse {
318
+ {
319
+ Spec : & prismclientv3.Image {
320
+ Name : ptr .To ("example" ),
321
+ },
322
+ },
323
+ },
324
+ }, nil ,
325
+ )
326
+
327
+ return & prismclientv3.Client {V3 : mockv3Service }
328
+ },
329
+ id : infrav1.NutanixResourceIdentifier {
330
+ Type : infrav1 .NutanixIdentifierName ,
331
+ Name : ptr .To ("example" ),
332
+ },
333
+ want : & prismclientv3.ImageIntentResponse {
334
+ Spec : & prismclientv3.Image {
335
+ Name : ptr .To ("example" ),
336
+ },
337
+ },
338
+ },
339
+ {
340
+ name : "image name matches multiple images" ,
341
+ clientBuilder : func () * prismclientv3.Client {
342
+ mockctrl := gomock .NewController (t )
343
+ mockv3Service := mocknutanixv3 .NewMockService (mockctrl )
344
+ mockv3Service .EXPECT ().ListAllImage (gomock .Any (), gomock .Any ()).Return (
345
+ & prismclientv3.ImageListIntentResponse {
346
+ Entities : []* prismclientv3.ImageIntentResponse {
347
+ {
348
+ Spec : & prismclientv3.Image {
349
+ Name : ptr .To ("example" ),
350
+ },
351
+ },
352
+ {
353
+ Spec : & prismclientv3.Image {
354
+ Name : ptr .To ("example" ),
355
+ },
356
+ },
357
+ },
358
+ }, nil ,
359
+ )
360
+
361
+ return & prismclientv3.Client {V3 : mockv3Service }
362
+ },
363
+ id : infrav1.NutanixResourceIdentifier {
364
+ Type : infrav1 .NutanixIdentifierName ,
365
+ Name : ptr .To ("example" ),
366
+ },
367
+ wantErr : true ,
368
+ },
369
+ {
370
+ name : "image name matches zero images" ,
371
+ clientBuilder : func () * prismclientv3.Client {
372
+ mockctrl := gomock .NewController (t )
373
+ mockv3Service := mocknutanixv3 .NewMockService (mockctrl )
374
+ mockv3Service .EXPECT ().ListAllImage (gomock .Any (), gomock .Any ()).Return (
375
+ & prismclientv3.ImageListIntentResponse {
376
+ Entities : []* prismclientv3.ImageIntentResponse {},
377
+ }, nil ,
378
+ )
379
+
380
+ return & prismclientv3.Client {V3 : mockv3Service }
381
+ },
382
+ id : infrav1.NutanixResourceIdentifier {
383
+ Type : infrav1 .NutanixIdentifierName ,
384
+ Name : ptr .To ("example" ),
385
+ },
386
+ wantErr : true ,
387
+ },
388
+ {
389
+ name : "image name matches one image" ,
390
+ clientBuilder : func () * prismclientv3.Client {
391
+ mockctrl := gomock .NewController (t )
392
+ mockv3Service := mocknutanixv3 .NewMockService (mockctrl )
393
+ mockv3Service .EXPECT ().ListAllImage (gomock .Any (), gomock .Any ()).Return (
394
+ & prismclientv3.ImageListIntentResponse {
395
+ Entities : []* prismclientv3.ImageIntentResponse {
396
+ {
397
+ Spec : & prismclientv3.Image {
398
+ Name : ptr .To ("example" ),
399
+ },
400
+ },
401
+ },
402
+ }, nil ,
403
+ )
404
+
405
+ return & prismclientv3.Client {V3 : mockv3Service }
406
+ },
407
+ id : infrav1.NutanixResourceIdentifier {
408
+ Type : infrav1 .NutanixIdentifierName ,
409
+ Name : ptr .To ("example" ),
410
+ },
411
+ want : & prismclientv3.ImageIntentResponse {
412
+ Spec : & prismclientv3.Image {
413
+ Name : ptr .To ("example" ),
414
+ },
415
+ },
416
+ },
417
+ }
418
+ for _ , tt := range tests {
419
+ t .Run (tt .name , func (t * testing.T ) {
420
+ ctx := context .Background ()
421
+ got , err := GetImage (ctx , tt .clientBuilder (), tt .id )
422
+ if (err != nil ) != tt .wantErr {
423
+ t .Errorf ("GetImageByNameOrUUID() error = %v, wantErr %v" , err , tt .wantErr )
424
+ return
425
+ }
426
+ if ! reflect .DeepEqual (got , tt .want ) {
427
+ t .Errorf ("GetImageByNameOrUUID() = %v, want %v" , got , tt .want )
428
+ }
429
+ })
430
+ }
431
+ }
0 commit comments