@@ -48,43 +48,44 @@ const (
48
48
//mock blobclient that returns the errortype for create/delete/get operations (default value nil)
49
49
type mockBlobClient struct {
50
50
//type of error returned
51
- errorType errType
51
+ errorType * errType
52
52
//custom string for error type CUSTOM
53
- custom string
53
+ custom * string
54
+ conProp * storage.ContainerProperties
54
55
}
55
56
56
57
func (c * mockBlobClient ) CreateContainer (ctx context.Context , resourceGroupName , accountName , containerName string , blobContainer storage.BlobContainer ) error {
57
- switch c .errorType {
58
+ switch * c .errorType {
58
59
case DATAPLANE :
59
60
return fmt .Errorf (containerBeingDeletedDataplaneAPIError )
60
61
case MANAGEMENT :
61
62
return fmt .Errorf (containerBeingDeletedManagementAPIError )
62
63
case CUSTOM :
63
- return fmt .Errorf (c .custom )
64
+ return fmt .Errorf (* c .custom )
64
65
}
65
66
return nil
66
67
}
67
68
func (c * mockBlobClient ) DeleteContainer (ctx context.Context , resourceGroupName , accountName , containerName string ) error {
68
- switch c .errorType {
69
+ switch * c .errorType {
69
70
case DATAPLANE :
70
71
return fmt .Errorf (containerBeingDeletedDataplaneAPIError )
71
72
case MANAGEMENT :
72
73
return fmt .Errorf (containerBeingDeletedManagementAPIError )
73
74
case CUSTOM :
74
- return fmt .Errorf (c .custom )
75
+ return fmt .Errorf (* c .custom )
75
76
}
76
77
return nil
77
78
}
78
79
func (c * mockBlobClient ) GetContainer (ctx context.Context , resourceGroupName , accountName , containerName string ) (storage.BlobContainer , error ) {
79
- switch c .errorType {
80
+ switch * c .errorType {
80
81
case DATAPLANE :
81
- return storage.BlobContainer {}, fmt .Errorf (containerBeingDeletedDataplaneAPIError )
82
+ return storage.BlobContainer {ContainerProperties : c . conProp }, fmt .Errorf (containerBeingDeletedDataplaneAPIError )
82
83
case MANAGEMENT :
83
- return storage.BlobContainer {}, fmt .Errorf (containerBeingDeletedManagementAPIError )
84
+ return storage.BlobContainer {ContainerProperties : c . conProp }, fmt .Errorf (containerBeingDeletedManagementAPIError )
84
85
case CUSTOM :
85
- return storage.BlobContainer {}, fmt .Errorf (c .custom )
86
+ return storage.BlobContainer {ContainerProperties : c . conProp }, fmt .Errorf (* c .custom )
86
87
}
87
- return storage.BlobContainer {}, nil
88
+ return storage.BlobContainer {ContainerProperties : c . conProp }, nil
88
89
}
89
90
90
91
func TestControllerGetCapabilities (t * testing.T ) {
@@ -564,105 +565,142 @@ func TestValidateVolumeCapabilities(t *testing.T) {
564
565
},
565
566
}
566
567
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
569
574
}{
570
575
{
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" ),
581
581
},
582
582
{
583
583
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" ,
594
586
},
587
+ containerProp : nil ,
588
+ expectedRes : nil ,
589
+ expectedErr : status .Error (codes .InvalidArgument , "volume capabilities missing in request" ),
595
590
},
596
591
{
597
592
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 ,
609
596
},
597
+ containerProp : nil ,
598
+ expectedRes : nil ,
599
+ expectedErr : status .Error (codes .InvalidArgument , "block volume capability not supported" ),
610
600
},
611
601
{
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 ,
624
606
},
607
+ containerProp : nil ,
608
+ expectedRes : nil ,
609
+ expectedErr : status .Error (codes .NotFound , "error parsing volume id: \" unit-test\" , should at least contain two #" ),
625
610
},
626
611
{
627
612
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 {},
661
631
},
632
+ clientErr : NULL ,
633
+ containerProp : nil ,
634
+ expectedRes : nil ,
635
+ expectedErr : status .Errorf (codes .Internal , "ContainerProperties of volume(%s) is nil" , "unit#test#test" ),
662
636
},
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
+ },*/
663
678
}
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" )
666
704
}
667
705
}
668
706
@@ -882,7 +920,7 @@ func TestCreateBlobContainer(t *testing.T) {
882
920
d .cloud = & azure.Cloud {}
883
921
for _ , test := range tests {
884
922
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 }
886
924
if ! reflect .DeepEqual (err , test .expectedErr ) {
887
925
t .Errorf ("test(%s), actualErr: (%v), expectedErr: (%v)" , test .desc , err , test .expectedErr )
888
926
}
@@ -937,7 +975,7 @@ func TestDeleteBlobContainer(t *testing.T) {
937
975
938
976
for _ , test := range tests {
939
977
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 }
941
979
if ! reflect .DeepEqual (err , test .expectedErr ) {
942
980
t .Errorf ("test(%s), actualErr: (%v), expectedErr: (%v)" , test .desc , err , test .expectedErr )
943
981
}
0 commit comments