Skip to content

Commit

Permalink
Add tests to cover drive state change in stage volume rpc call
Browse files Browse the repository at this point in the history
Signed-off-by: Bala.FA <bala@minio.io>
  • Loading branch information
balamurugana authored and wlan0 committed Oct 29, 2021
1 parent 8d7bd56 commit 3fcd6a0
Show file tree
Hide file tree
Showing 2 changed files with 94 additions and 0 deletions.
29 changes: 29 additions & 0 deletions pkg/node/publish_unpublish_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,35 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

func TestNodePublishVolume(t *testing.T) {
req := &csi.NodePublishVolumeRequest{
VolumeId: "volume-id-1",
StagingTargetPath: "volume-id-1-staging-target-path",
TargetPath: "volume-id-1-target-path",
VolumeCapability: &csi.VolumeCapability{
AccessType: &csi.VolumeCapability_Mount{Mount: &csi.VolumeCapability_MountVolume{FsType: "xfs"}},
AccessMode: &csi.VolumeCapability_AccessMode{Mode: csi.VolumeCapability_AccessMode_SINGLE_NODE_WRITER},
},
}

volume := &directcsi.DirectCSIVolume{
TypeMeta: utils.DirectCSIVolumeTypeMeta(),
ObjectMeta: metav1.ObjectMeta{Name: "volume-id-1"},
Status: directcsi.DirectCSIVolumeStatus{StagingPath: "volume-id-1-staging-target-path"},
}

nodeServer := createFakeNodeServer()
nodeServer.directcsiClient = fakedirect.NewSimpleClientset(volume)
_, err := nodeServer.nodePublishVolume(
context.TODO(),
req,
func() (map[string][]sys.MountInfo, error) { return map[string][]sys.MountInfo{"0:0": {}}, nil },
)
if err == nil {
t.Fatalf("expected error, but succeeded")
}
}

func TestPublishUnpublishVolume(t *testing.T) {
testVolumeName50MB := "test_volume_50MB"

Expand Down
65 changes: 65 additions & 0 deletions pkg/node/stage_unstage_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,71 @@ const (
mb20 = 20 * MB
)

func TestNodeStageVolume(t *testing.T) {
case1Req := &csi.NodeStageVolumeRequest{
VolumeId: "volume-id-1",
StagingTargetPath: "volume-id-1-staging-target-path",
VolumeCapability: &csi.VolumeCapability{
AccessType: &csi.VolumeCapability_Mount{Mount: &csi.VolumeCapability_MountVolume{FsType: "xfs"}},
AccessMode: &csi.VolumeCapability_AccessMode{Mode: csi.VolumeCapability_AccessMode_SINGLE_NODE_WRITER},
},
}

case1Drive := &directcsi.DirectCSIDrive{
TypeMeta: utils.DirectCSIDriveTypeMeta(),
ObjectMeta: metav1.ObjectMeta{Name: "drive-1"},
}

case2Drive := &directcsi.DirectCSIDrive{
TypeMeta: utils.DirectCSIDriveTypeMeta(),
ObjectMeta: metav1.ObjectMeta{Name: "drive-1"},
Status: directcsi.DirectCSIDriveStatus{DriveStatus: directcsi.DriveStatusInUse},
}

case3Drive := &directcsi.DirectCSIDrive{
TypeMeta: utils.DirectCSIDriveTypeMeta(),
ObjectMeta: metav1.ObjectMeta{
Name: "drive-1",
Finalizers: []string{directcsi.DirectCSIDriveFinalizerPrefix + "volume-id-1"},
},
Status: directcsi.DirectCSIDriveStatus{DriveStatus: directcsi.DriveStatusInUse},
}

testCases := []struct {
req *csi.NodeStageVolumeRequest
drive *directcsi.DirectCSIDrive
mountInfo map[string][]sys.MountInfo
}{
{case1Req, case1Drive, nil},
{case1Req, case2Drive, nil},
{case1Req, case3Drive, map[string][]sys.MountInfo{"1:0": {}}},
{case1Req, case3Drive, map[string][]sys.MountInfo{"0:0": {}}},
}

for i, testCase := range testCases {
volume := &directcsi.DirectCSIVolume{
TypeMeta: utils.DirectCSIVolumeTypeMeta(),
ObjectMeta: metav1.ObjectMeta{Name: testCase.req.VolumeId},
Status: directcsi.DirectCSIVolumeStatus{
NodeName: testNodeName,
Drive: testCase.drive.Name,
TotalCapacity: 100 * MB,
},
}

nodeServer := createFakeNodeServer()
nodeServer.directcsiClient = fakedirect.NewSimpleClientset(volume, testCase.drive)
_, err := nodeServer.nodeStageVolume(
context.TODO(),
testCase.req,
func() (map[string][]sys.MountInfo, error) { return testCase.mountInfo, nil },
)
if err == nil {
t.Fatalf("case %v: expected error, but succeeded", i+1)
}
}
}

func TestStageUnstageVolume(t *testing.T) {
testDriveName := "test_drive"
testVolumeName50MB := "test_volume_50MB"
Expand Down

0 comments on commit 3fcd6a0

Please sign in to comment.