Skip to content

Commit 899f488

Browse files
diptiranjanpxstrivedi-px
authored andcommitted
PWX-38345: Put empty string check in volumeName while collecting the volumes for enumerate call in GetPodVolumes. (#1818)
1 parent 87526ca commit 899f488

File tree

2 files changed

+140
-1
lines changed

2 files changed

+140
-1
lines changed

drivers/volume/portworx/portworx.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -912,7 +912,7 @@ func (p *portworx) GetPodVolumes(podSpec *v1.PodSpec, namespace string, includeP
912912
}
913913
// If a volume is pending and WFFC, it doesn't exist in Portworx.
914914
// No need of querying it.
915-
if !isPendingWFFC {
915+
if volumeName != "" && !isPendingWFFC {
916916
volumeNameList = append(volumeNameList, volumeName)
917917
}
918918
}

drivers/volume/portworx/portworx_test.go

Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
338477
func createPVAndPVC(name, namespace, pvName string, status v1.PersistentVolumeClaimPhase) {
339478
sc := scName
340479
core.Instance().CreatePersistentVolumeClaim(&v1.PersistentVolumeClaim{

0 commit comments

Comments
 (0)