@@ -335,6 +335,145 @@ func TestGetPodVolumesPendingPVCs(t *testing.T) {
335335 require .Len (t , volumesWFFC , 0 , "volumesWFFC should not be found" )
336336}
337337
338+ func TestGetPodVolumesProjectedVolumes (t * testing.T ) {
339+ // Setup
340+ mockCtrl := gomock .NewController (t )
341+ defer mockCtrl .Finish ()
342+ mockDriver := mockosd .NewMockVolumeDriver (mockCtrl )
343+ mockCache := mockcache .NewMockSharedInformerCache (mockCtrl )
344+ p := setup (mockDriver , mockCache )
345+
346+ // Create a sample pod with volumes
347+ pod := & v1.Pod {
348+ Spec : v1.PodSpec {
349+ Volumes : []v1.Volume {
350+ {
351+ Name : "volume1" ,
352+ VolumeSource : v1.VolumeSource {
353+ PersistentVolumeClaim : & v1.PersistentVolumeClaimVolumeSource {
354+ ClaimName : "claim1" ,
355+ },
356+ },
357+ },
358+ {
359+ Name : "projected" ,
360+ VolumeSource : v1.VolumeSource {
361+ Projected : & v1.ProjectedVolumeSource {
362+ Sources : []v1.VolumeProjection {
363+ {
364+ ServiceAccountToken : & v1.ServiceAccountTokenProjection {
365+ Audience : "aud1" ,
366+ },
367+ },
368+ },
369+ },
370+ },
371+ },
372+ },
373+ },
374+ }
375+
376+ createPVAndPVC ("claim1" , "ns1" , "pv1" , v1 .ClaimBound )
377+
378+ bindingMode := storagev1 .VolumeBindingImmediate
379+ mockCache .EXPECT ().GetStorageClass (scName ).Return (& storagev1.StorageClass {
380+ ObjectMeta : metav1.ObjectMeta {
381+ Name : scName ,
382+ },
383+ VolumeBindingMode : & bindingMode ,
384+ }, nil ).Times (1 )
385+
386+ mockDriver .EXPECT ().Enumerate (
387+ & api.VolumeLocator {
388+ VolumeIds : []string {"pv1" },
389+ }, nil ).Return ([]* api.Volume {
390+ {
391+ Id : "id1" ,
392+ Locator : & api.VolumeLocator {
393+ Name : "pv1" ,
394+ },
395+ Spec : & api.VolumeSpec {},
396+ },
397+ }, nil )
398+
399+ // Call the GetPodVolumes function
400+ volumes , volumesWFFC , err := p .GetPodVolumes (& pod .Spec , "ns1" , true )
401+ require .NoError (t , err , "failed to get pod volumes" )
402+ require .Len (t , volumes , 1 , "incorrect volume count" )
403+ require .Len (t , volumesWFFC , 0 , "volumesWFFC should not be found" )
404+ }
405+
406+ func TestGetPodVolumesEphemeralVolumes (t * testing.T ) {
407+ // Setup
408+ mockCtrl := gomock .NewController (t )
409+ defer mockCtrl .Finish ()
410+ mockDriver := mockosd .NewMockVolumeDriver (mockCtrl )
411+ mockCache := mockcache .NewMockSharedInformerCache (mockCtrl )
412+ p := setup (mockDriver , mockCache )
413+
414+ ephemeralScName := "sc1"
415+ // Create a sample pod with volumes
416+ pod := & v1.Pod {
417+ Spec : v1.PodSpec {
418+ Volumes : []v1.Volume {
419+ {
420+ Name : "volume1" ,
421+ VolumeSource : v1.VolumeSource {
422+ PersistentVolumeClaim : & v1.PersistentVolumeClaimVolumeSource {
423+ ClaimName : "claim1" ,
424+ },
425+ },
426+ },
427+ {
428+ Name : "ephemeral" ,
429+ VolumeSource : v1.VolumeSource {
430+ Ephemeral : & v1.EphemeralVolumeSource {
431+ VolumeClaimTemplate : & v1.PersistentVolumeClaimTemplate {
432+ ObjectMeta : metav1.ObjectMeta {
433+ Name : "claim2" ,
434+ },
435+ Spec : v1.PersistentVolumeClaimSpec {
436+ StorageClassName : & ephemeralScName ,
437+ },
438+ },
439+ },
440+ },
441+ },
442+ },
443+ },
444+ }
445+
446+ createPVAndPVC ("claim1" , "ns1" , "pv1" , v1 .ClaimBound )
447+ createPVAndPVC ("claim2" , "ns1" , "pv2" , v1 .ClaimBound )
448+
449+ bindingMode := storagev1 .VolumeBindingImmediate
450+ mockCache .EXPECT ().GetStorageClass (scName ).Return (& storagev1.StorageClass {
451+ ObjectMeta : metav1.ObjectMeta {
452+ Name : scName ,
453+ },
454+ VolumeBindingMode : & bindingMode ,
455+ }, nil ).Times (1 )
456+
457+ mockDriver .EXPECT ().Enumerate (
458+ & api.VolumeLocator {
459+ VolumeIds : []string {"pv1" },
460+ }, nil ).Return ([]* api.Volume {
461+ {
462+ Id : "id1" ,
463+ Locator : & api.VolumeLocator {
464+ Name : "pv1" ,
465+ },
466+ Spec : & api.VolumeSpec {},
467+ },
468+ }, nil )
469+
470+ // Call the GetPodVolumes function
471+ volumes , volumesWFFC , err := p .GetPodVolumes (& pod .Spec , "ns1" , true )
472+ require .NoError (t , err , "failed to get pod volumes" )
473+ require .Len (t , volumes , 1 , "incorrect volume count" )
474+ require .Len (t , volumesWFFC , 0 , "volumesWFFC should not be found" )
475+ }
476+
338477func createPVAndPVC (name , namespace , pvName string , status v1.PersistentVolumeClaimPhase ) {
339478 sc := scName
340479 core .Instance ().CreatePersistentVolumeClaim (& v1.PersistentVolumeClaim {
0 commit comments