Skip to content

Commit 984f16a

Browse files
committed
rewrote TestValidateVolumeCapabilities() and added more testcases using mockBlobClient
1 parent c1e1379 commit 984f16a

File tree

1 file changed

+131
-93
lines changed

1 file changed

+131
-93
lines changed

Diff for: pkg/blob/controllerserver_test.go

+131-93
Original file line numberDiff line numberDiff line change
@@ -48,43 +48,44 @@ const (
4848
//mock blobclient that returns the errortype for create/delete/get operations (default value nil)
4949
type mockBlobClient struct {
5050
//type of error returned
51-
errorType errType
51+
errorType *errType
5252
//custom string for error type CUSTOM
53-
custom string
53+
custom *string
54+
conProp *storage.ContainerProperties
5455
}
5556

5657
func (c *mockBlobClient) CreateContainer(ctx context.Context, resourceGroupName, accountName, containerName string, blobContainer storage.BlobContainer) error {
57-
switch c.errorType {
58+
switch *c.errorType {
5859
case DATAPLANE:
5960
return fmt.Errorf(containerBeingDeletedDataplaneAPIError)
6061
case MANAGEMENT:
6162
return fmt.Errorf(containerBeingDeletedManagementAPIError)
6263
case CUSTOM:
63-
return fmt.Errorf(c.custom)
64+
return fmt.Errorf(*c.custom)
6465
}
6566
return nil
6667
}
6768
func (c *mockBlobClient) DeleteContainer(ctx context.Context, resourceGroupName, accountName, containerName string) error {
68-
switch c.errorType {
69+
switch *c.errorType {
6970
case DATAPLANE:
7071
return fmt.Errorf(containerBeingDeletedDataplaneAPIError)
7172
case MANAGEMENT:
7273
return fmt.Errorf(containerBeingDeletedManagementAPIError)
7374
case CUSTOM:
74-
return fmt.Errorf(c.custom)
75+
return fmt.Errorf(*c.custom)
7576
}
7677
return nil
7778
}
7879
func (c *mockBlobClient) GetContainer(ctx context.Context, resourceGroupName, accountName, containerName string) (storage.BlobContainer, error) {
79-
switch c.errorType {
80+
switch *c.errorType {
8081
case DATAPLANE:
81-
return storage.BlobContainer{}, fmt.Errorf(containerBeingDeletedDataplaneAPIError)
82+
return storage.BlobContainer{ContainerProperties: c.conProp}, fmt.Errorf(containerBeingDeletedDataplaneAPIError)
8283
case MANAGEMENT:
83-
return storage.BlobContainer{}, fmt.Errorf(containerBeingDeletedManagementAPIError)
84+
return storage.BlobContainer{ContainerProperties: c.conProp}, fmt.Errorf(containerBeingDeletedManagementAPIError)
8485
case CUSTOM:
85-
return storage.BlobContainer{}, fmt.Errorf(c.custom)
86+
return storage.BlobContainer{ContainerProperties: c.conProp}, fmt.Errorf(*c.custom)
8687
}
87-
return storage.BlobContainer{}, nil
88+
return storage.BlobContainer{ContainerProperties: c.conProp}, nil
8889
}
8990

9091
func TestControllerGetCapabilities(t *testing.T) {
@@ -564,105 +565,142 @@ func TestValidateVolumeCapabilities(t *testing.T) {
564565
},
565566
}
566567
testCases := []struct {
567-
name string
568-
testFunc func(t *testing.T)
568+
name string
569+
req *csi.ValidateVolumeCapabilitiesRequest
570+
clientErr errType
571+
containerProp *storage.ContainerProperties
572+
expectedRes *csi.ValidateVolumeCapabilitiesResponse
573+
expectedErr error
569574
}{
570575
{
571-
name: "volume ID missing",
572-
testFunc: func(t *testing.T) {
573-
d := NewFakeDriver()
574-
req := &csi.ValidateVolumeCapabilitiesRequest{}
575-
_, err := d.ValidateVolumeCapabilities(context.Background(), req)
576-
expectedErr := status.Error(codes.InvalidArgument, "Volume ID missing in request")
577-
if !reflect.DeepEqual(err, expectedErr) {
578-
t.Errorf("actualErr: (%v), expectedErr: (%v)", err, expectedErr)
579-
}
580-
},
576+
name: "volume ID missing",
577+
req: &csi.ValidateVolumeCapabilitiesRequest{},
578+
containerProp: nil,
579+
expectedRes: nil,
580+
expectedErr: status.Error(codes.InvalidArgument, "Volume ID missing in request"),
581581
},
582582
{
583583
name: "volume capability missing",
584-
testFunc: func(t *testing.T) {
585-
d := NewFakeDriver()
586-
req := &csi.ValidateVolumeCapabilitiesRequest{
587-
VolumeId: "unit-test",
588-
}
589-
_, err := d.ValidateVolumeCapabilities(context.Background(), req)
590-
expectedErr := status.Error(codes.InvalidArgument, "volume capabilities missing in request")
591-
if !reflect.DeepEqual(err, expectedErr) {
592-
t.Errorf("actualErr: (%v), expectedErr: (%v)", err, expectedErr)
593-
}
584+
req: &csi.ValidateVolumeCapabilitiesRequest{
585+
VolumeId: "unit-test",
594586
},
587+
containerProp: nil,
588+
expectedRes: nil,
589+
expectedErr: status.Error(codes.InvalidArgument, "volume capabilities missing in request"),
595590
},
596591
{
597592
name: "block volume capability not supported",
598-
testFunc: func(t *testing.T) {
599-
d := NewFakeDriver()
600-
req := &csi.ValidateVolumeCapabilitiesRequest{
601-
VolumeId: "unit-test",
602-
VolumeCapabilities: blockVolumeCapabilities,
603-
}
604-
_, err := d.ValidateVolumeCapabilities(context.Background(), req)
605-
expectedErr := status.Error(codes.InvalidArgument, "block volume capability not supported")
606-
if !reflect.DeepEqual(err, expectedErr) {
607-
t.Errorf("actualErr: (%v), expectedErr: (%v)", err, expectedErr)
608-
}
593+
req: &csi.ValidateVolumeCapabilitiesRequest{
594+
VolumeId: "unit-test",
595+
VolumeCapabilities: blockVolumeCapabilities,
609596
},
597+
containerProp: nil,
598+
expectedRes: nil,
599+
expectedErr: status.Error(codes.InvalidArgument, "block volume capability not supported"),
610600
},
611601
{
612-
name: "invalid volume Id",
613-
testFunc: func(t *testing.T) {
614-
d := NewFakeDriver()
615-
req := &csi.ValidateVolumeCapabilitiesRequest{
616-
VolumeId: "unit-test",
617-
VolumeCapabilities: stdVolumeCapabilities,
618-
}
619-
_, err := d.ValidateVolumeCapabilities(context.Background(), req)
620-
expectedErr := status.Error(codes.NotFound, "error parsing volume id: \"unit-test\", should at least contain two #")
621-
if !reflect.DeepEqual(err, expectedErr) {
622-
t.Errorf("actualErr: (%v), expectedErr: (%v)", err, expectedErr)
623-
}
602+
name: "invalid volume id",
603+
req: &csi.ValidateVolumeCapabilitiesRequest{
604+
VolumeId: "unit-test",
605+
VolumeCapabilities: stdVolumeCapabilities,
624606
},
607+
containerProp: nil,
608+
expectedRes: nil,
609+
expectedErr: status.Error(codes.NotFound, "error parsing volume id: \"unit-test\", should at least contain two #"),
625610
},
626611
{
627612
name: "base storage service url empty",
628-
testFunc: func(t *testing.T) {
629-
d := NewFakeDriver()
630-
d.Cap = []*csi.ControllerServiceCapability{
631-
controllerServiceCapability,
632-
}
633-
req := &csi.ValidateVolumeCapabilitiesRequest{
634-
VolumeId: "unit#test#test",
635-
VolumeCapabilities: stdVolumeCapabilities,
636-
Secrets: map[string]string{
637-
defaultSecretAccountName: "accountname",
638-
defaultSecretAccountKey: "b",
639-
},
640-
}
641-
d.cloud = &azure.Cloud{}
642-
ctrl := gomock.NewController(t)
643-
defer ctrl.Finish()
644-
mockStorageAccountsClient := mockstorageaccountclient.NewMockInterface(ctrl)
645-
d.cloud.StorageAccountClient = mockStorageAccountsClient
646-
s := "unit-test"
647-
accountkey := storage.AccountKey{
648-
Value: &s,
649-
}
650-
accountkeylist := []storage.AccountKey{}
651-
accountkeylist = append(accountkeylist, accountkey)
652-
list := storage.AccountListKeysResult{
653-
Keys: &accountkeylist,
654-
}
655-
mockStorageAccountsClient.EXPECT().ListKeys(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(list, nil).AnyTimes()
656-
expectedErr := fmt.Errorf("azure: base storage service url required")
657-
_, err := d.ValidateVolumeCapabilities(context.Background(), req)
658-
if !reflect.DeepEqual(err, expectedErr) && !strings.Contains(err.Error(), expectedErr.Error()) {
659-
t.Errorf("actualErr: (%v), expectedErr: (%v)", err, expectedErr)
660-
}
613+
req: &csi.ValidateVolumeCapabilitiesRequest{
614+
VolumeId: "unit#test#test",
615+
VolumeCapabilities: stdVolumeCapabilities,
616+
Secrets: map[string]string{
617+
defaultSecretAccountName: "accountname",
618+
defaultSecretAccountKey: "b",
619+
},
620+
},
621+
containerProp: nil,
622+
expectedRes: nil,
623+
expectedErr: status.Error(codes.Internal, "azure: base storage service url required"),
624+
},
625+
{
626+
name: "ContainerProperties of volume is nil",
627+
req: &csi.ValidateVolumeCapabilitiesRequest{
628+
VolumeId: "unit#test#test",
629+
VolumeCapabilities: stdVolumeCapabilities,
630+
Secrets: map[string]string{},
661631
},
632+
clientErr: NULL,
633+
containerProp: nil,
634+
expectedRes: nil,
635+
expectedErr: status.Errorf(codes.Internal, "ContainerProperties of volume(%s) is nil", "unit#test#test"),
662636
},
637+
{
638+
name: "Client Error",
639+
req: &csi.ValidateVolumeCapabilitiesRequest{
640+
VolumeId: "unit#test#test",
641+
VolumeCapabilities: stdVolumeCapabilities,
642+
Secrets: map[string]string{},
643+
},
644+
clientErr: DATAPLANE,
645+
containerProp: &storage.ContainerProperties{},
646+
expectedRes: nil,
647+
expectedErr: status.Errorf(codes.Internal, containerBeingDeletedDataplaneAPIError),
648+
},
649+
{
650+
name: "Requested Volume does not exist",
651+
req: &csi.ValidateVolumeCapabilitiesRequest{
652+
VolumeId: "unit#test#test",
653+
VolumeCapabilities: stdVolumeCapabilities,
654+
Secrets: map[string]string{},
655+
},
656+
clientErr: NULL,
657+
containerProp: &storage.ContainerProperties{},
658+
expectedRes: nil,
659+
expectedErr: status.Errorf(codes.NotFound, "requested volume(%s) does not exist", "unit#test#test"),
660+
},
661+
/*{//Volume being shown as not existing. ContainerProperties.Deleted not setting correctly??
662+
name: "Successful I/O",
663+
req: &csi.ValidateVolumeCapabilitiesRequest{
664+
VolumeId: "unit#test#test",
665+
VolumeCapabilities: stdVolumeCapabilities,
666+
Secrets: map[string]string{},
667+
},
668+
clientErr: NULL,
669+
containerProp: &storage.ContainerProperties{Deleted: &[]bool{false}[0]},
670+
expectedRes: &csi.ValidateVolumeCapabilitiesResponse{
671+
Confirmed: &csi.ValidateVolumeCapabilitiesResponse_Confirmed{
672+
VolumeCapabilities: stdVolumeCapabilities,
673+
},
674+
Message: "",
675+
},
676+
expectedErr: nil,
677+
},*/
663678
}
664-
for _, tc := range testCases {
665-
t.Run(tc.name, tc.testFunc)
679+
d := NewFakeDriver()
680+
d.cloud = &azure.Cloud{}
681+
d.Cap = []*csi.ControllerServiceCapability{
682+
controllerServiceCapability,
683+
}
684+
ctrl := gomock.NewController(t)
685+
defer ctrl.Finish()
686+
mockStorageAccountsClient := mockstorageaccountclient.NewMockInterface(ctrl)
687+
d.cloud.StorageAccountClient = mockStorageAccountsClient
688+
s := "unit-test"
689+
accountkey := storage.AccountKey{
690+
Value: &s,
691+
}
692+
accountkeylist := []storage.AccountKey{}
693+
accountkeylist = append(accountkeylist, accountkey)
694+
list := storage.AccountListKeysResult{
695+
Keys: &accountkeylist,
696+
}
697+
mockStorageAccountsClient.EXPECT().ListKeys(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(list, nil).AnyTimes()
698+
699+
for _, test := range testCases {
700+
res, err := d.ValidateVolumeCapabilities(context.Background(), test.req)
701+
d.cloud.BlobClient = &mockBlobClient{errorType: &test.clientErr, conProp: test.containerProp}
702+
assert.Equal(t, test.expectedErr, err, "Errors must match "+err.Error())
703+
assert.Equal(t, test.expectedRes, res, "Response must match")
666704
}
667705
}
668706

@@ -882,7 +920,7 @@ func TestCreateBlobContainer(t *testing.T) {
882920
d.cloud = &azure.Cloud{}
883921
for _, test := range tests {
884922
err := d.CreateBlobContainer(context.Background(), test.rg, test.accountName, test.containerName, test.secrets)
885-
d.cloud.BlobClient = &mockBlobClient{errorType: test.clientErr}
923+
d.cloud.BlobClient = &mockBlobClient{errorType: &test.clientErr}
886924
if !reflect.DeepEqual(err, test.expectedErr) {
887925
t.Errorf("test(%s), actualErr: (%v), expectedErr: (%v)", test.desc, err, test.expectedErr)
888926
}
@@ -937,7 +975,7 @@ func TestDeleteBlobContainer(t *testing.T) {
937975

938976
for _, test := range tests {
939977
err := d.DeleteBlobContainer(context.Background(), test.rg, test.accountName, test.containerName, test.secrets)
940-
d.cloud.BlobClient = &mockBlobClient{errorType: test.clientErr}
978+
d.cloud.BlobClient = &mockBlobClient{errorType: &test.clientErr}
941979
if !reflect.DeepEqual(err, test.expectedErr) {
942980
t.Errorf("test(%s), actualErr: (%v), expectedErr: (%v)", test.desc, err, test.expectedErr)
943981
}

0 commit comments

Comments
 (0)