Navigation Menu

Skip to content

Commit

Permalink
Unit tests added
Browse files Browse the repository at this point in the history
  • Loading branch information
rcmadhankumar committed Apr 7, 2022
1 parent c13ff50 commit 45581c2
Showing 1 changed file with 236 additions and 0 deletions.
236 changes: 236 additions & 0 deletions pkg/driver/controller_test.go
Expand Up @@ -93,6 +93,169 @@ func TestCreateVolume(t *testing.T) {
},
},

{
name: "csi.VolumeCapability_AccessMode_MULTI_NODE_MULTI_WRITER",
testFunc: func(t *testing.T) {
req := &csi.CreateVolumeRequest{
Name: "random-vol-name",
CapacityRange: stdCapRange,
VolumeCapabilities: []*csi.VolumeCapability{
{
AccessType: &csi.VolumeCapability_Mount{
Mount: &csi.VolumeCapability_MountVolume{},
},
AccessMode: &csi.VolumeCapability_AccessMode{
Mode: csi.VolumeCapability_AccessMode_MULTI_NODE_MULTI_WRITER,
},
},
},
Parameters: nil,
}

ctx := context.Background()
mockDisk := &cloud.Disk{
VolumeID: req.Name,
CapacityGiB: util.BytesToGiB(stdVolSize),
Shareable: true,
}
mockDiskOpts := &cloud.DiskOptions{
Shareable: true,
CapacityBytes: stdVolSize,
}

mockCtl := gomock.NewController(t)
defer mockCtl.Finish()

mockCloud := mocks.NewMockCloud(mockCtl)
mockCloud.EXPECT().GetDiskByName(gomock.Eq(req.Name)).Return(nil, nil)
mockCloud.EXPECT().CreateDisk(gomock.Eq(req.Name), mockDiskOpts).Return(mockDisk, nil)

powervsDriver := controllerService{
cloud: mockCloud,
driverOptions: &Options{},
volumeLocks: util.NewVolumeLocks(),
}

_, err := powervsDriver.CreateVolume(ctx, req)
if err != nil {
srvErr, ok := status.FromError(err)
if !ok {
t.Fatalf("Could not get error status code from error: %v", srvErr)
}
t.Fatalf("Unexpected error: %v", srvErr.Code())
}

},
},
{
name: "csi.VolumeCapability_AccessMode_MULTI_NODE_READER_ONLY",
testFunc: func(t *testing.T) {
req := &csi.CreateVolumeRequest{
Name: "random-vol-name",
CapacityRange: stdCapRange,
VolumeCapabilities: []*csi.VolumeCapability{
{
AccessType: &csi.VolumeCapability_Mount{
Mount: &csi.VolumeCapability_MountVolume{},
},
AccessMode: &csi.VolumeCapability_AccessMode{
Mode: csi.VolumeCapability_AccessMode_MULTI_NODE_READER_ONLY,
},
},
},
Parameters: nil,
}

ctx := context.Background()
mockDisk := &cloud.Disk{
VolumeID: req.Name,
CapacityGiB: util.BytesToGiB(stdVolSize),
Shareable: true,
}
mockDiskOpts := &cloud.DiskOptions{
Shareable: true,
CapacityBytes: stdVolSize,
}

mockCtl := gomock.NewController(t)
defer mockCtl.Finish()

mockCloud := mocks.NewMockCloud(mockCtl)
mockCloud.EXPECT().GetDiskByName(gomock.Eq(req.Name)).Return(nil, nil)
mockCloud.EXPECT().CreateDisk(gomock.Eq(req.Name), mockDiskOpts).Return(mockDisk, nil)

powervsDriver := controllerService{
cloud: mockCloud,
driverOptions: &Options{},
volumeLocks: util.NewVolumeLocks(),
}

_, err := powervsDriver.CreateVolume(ctx, req)
if err != nil {
srvErr, ok := status.FromError(err)
if !ok {
t.Fatalf("Could not get error status code from error: %v", srvErr)
}
t.Fatalf("Unexpected error: %v", srvErr.Code())
}

},
},
{
name: "csi.VolumeCapability_AccessMode_SINGLE_NODE_WRITER",
testFunc: func(t *testing.T) {
req := &csi.CreateVolumeRequest{
Name: "random-vol-name",
CapacityRange: stdCapRange,
VolumeCapabilities: []*csi.VolumeCapability{
{
AccessType: &csi.VolumeCapability_Mount{
Mount: &csi.VolumeCapability_MountVolume{},
},
AccessMode: &csi.VolumeCapability_AccessMode{
Mode: csi.VolumeCapability_AccessMode_SINGLE_NODE_WRITER,
},
},
},
Parameters: nil,
}

ctx := context.Background()
mockDisk := &cloud.Disk{
VolumeID: req.Name,
CapacityGiB: util.BytesToGiB(stdVolSize),
Shareable: false,
}
mockDiskOpts := &cloud.DiskOptions{
Shareable: false,
CapacityBytes: stdVolSize,
}

mockCtl := gomock.NewController(t)
defer mockCtl.Finish()

mockCloud := mocks.NewMockCloud(mockCtl)
mockCloud.EXPECT().GetDiskByName(gomock.Eq(req.Name)).Return(nil, nil)
mockCloud.EXPECT().CreateDisk(gomock.Eq(req.Name), mockDiskOpts).Return(mockDisk, nil)

powervsDriver := controllerService{
cloud: mockCloud,
driverOptions: &Options{},
volumeLocks: util.NewVolumeLocks(),
}

_, err := powervsDriver.CreateVolume(ctx, req)
if err != nil {
srvErr, ok := status.FromError(err)
if !ok {
t.Fatalf("Could not get error status code from error: %v", srvErr)
}
t.Fatalf("Unexpected error: %v", srvErr.Code())
}

},
},

{
name: "fail no name",
testFunc: func(t *testing.T) {
Expand Down Expand Up @@ -1220,6 +1383,79 @@ func TestControllerExpandVolume(t *testing.T) {
}
}

func TestIsShareableVolume(t *testing.T) {
testCases := []struct {
name string
testFunc func(t *testing.T)
}{
{
name: "Test csi.VolumeCapability_AccessMode_SINGLE_NODE_WRITER",
testFunc: func(t *testing.T) {
testVolCap := []*csi.VolumeCapability{
{
AccessType: &csi.VolumeCapability_Mount{
Mount: &csi.VolumeCapability_MountVolume{},
},
AccessMode: &csi.VolumeCapability_AccessMode{
Mode: csi.VolumeCapability_AccessMode_SINGLE_NODE_WRITER,
},
},
}

if res := isShareableVolume(testVolCap); res {
t.Fatalf("Volume capability: %s is not shareable", testVolCap[0].AccessMode.GetMode().String())
}

},
},
{
name: "Test csi.VolumeCapability_AccessMode_MULTI_NODE_MULTI_WRITER",
testFunc: func(t *testing.T) {
testVolCap := []*csi.VolumeCapability{
{
AccessType: &csi.VolumeCapability_Mount{
Mount: &csi.VolumeCapability_MountVolume{},
},
AccessMode: &csi.VolumeCapability_AccessMode{
Mode: csi.VolumeCapability_AccessMode_MULTI_NODE_MULTI_WRITER,
},
},
}

if res := isShareableVolume(testVolCap); !res {
t.Fatalf("Volume capability: %s is shareable", testVolCap[0].AccessMode.GetMode().String())
}

},
},
{
name: "Test csi.VolumeCapability_AccessMode_MULTI_NODE_READER_ONLY",
testFunc: func(t *testing.T) {
testVolCap := []*csi.VolumeCapability{
{
AccessType: &csi.VolumeCapability_Mount{
Mount: &csi.VolumeCapability_MountVolume{},
},
AccessMode: &csi.VolumeCapability_AccessMode{
Mode: csi.VolumeCapability_AccessMode_MULTI_NODE_READER_ONLY,
},
},
}

if res := isShareableVolume(testVolCap); !res {
t.Fatalf("Volume capability: %s is shareable", testVolCap[0].AccessMode.GetMode().String())
}

},
},
}

for _, tc := range testCases {
t.Run(tc.name, tc.testFunc)
}

}

func checkExpectedErrorCode(t *testing.T, err error, expectedCode codes.Code) {
if err == nil {
t.Fatalf("Expected operation to fail but got no error")
Expand Down

0 comments on commit 45581c2

Please sign in to comment.