Skip to content

Commit cc192a3

Browse files
authored
Merge pull request #215 from Sakuralbj/unit-test
test: add unit-test in pkg/blob and pkg/csi-common.
2 parents 06df5fe + b2f4e7e commit cc192a3

File tree

6 files changed

+207
-27
lines changed

6 files changed

+207
-27
lines changed

pkg/blob/azure_test.go

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,16 @@ limitations under the License.
1717
package blob
1818

1919
import (
20+
"context"
2021
"fmt"
2122
"io/ioutil"
2223
"os"
2324
"reflect"
2425
"testing"
26+
27+
"github.com/Azure/go-autorest/autorest/azure"
28+
"github.com/stretchr/testify/assert"
29+
azure2 "k8s.io/legacy-cloud-providers/azure"
2530
)
2631

2732
// TestGetCloudProvider tests the func GetCloudProvider().
@@ -139,6 +144,87 @@ users:
139144
}
140145
}
141146

147+
func TestGetServicePrincipalToken(t *testing.T) {
148+
env := azure.Environment{
149+
ActiveDirectoryEndpoint: "unit-test",
150+
}
151+
resource := "unit-test"
152+
d := NewFakeDriver()
153+
d.cloud = &azure2.Cloud{}
154+
_, err := d.getServicePrincipalToken(env, resource)
155+
expectedErr := fmt.Errorf("parameter 'clientID' cannot be empty")
156+
if !reflect.DeepEqual(expectedErr, err) {
157+
t.Errorf("actualErr: (%v), expectedErr: (%v)", err, expectedErr)
158+
}
159+
d.cloud.AADClientID = "unit-test"
160+
d.cloud.AADClientSecret = "unit-test"
161+
_, err = d.getServicePrincipalToken(env, resource)
162+
assert.NoError(t, err)
163+
}
164+
165+
func TestGetKeyvaultToken(t *testing.T) {
166+
env := azure.Environment{
167+
ActiveDirectoryEndpoint: "unit-test",
168+
KeyVaultEndpoint: "unit-test",
169+
}
170+
d := NewFakeDriver()
171+
d.cloud = &azure2.Cloud{}
172+
d.cloud.Environment = env
173+
_, err := d.getKeyvaultToken()
174+
expectedErr := fmt.Errorf("parameter 'clientID' cannot be empty")
175+
if !reflect.DeepEqual(expectedErr, err) {
176+
t.Errorf("actualErr: (%v), expectedErr: (%v)", err, expectedErr)
177+
}
178+
d.cloud.AADClientID = "unit-test"
179+
d.cloud.AADClientSecret = "unit-test"
180+
_, err = d.getKeyvaultToken()
181+
assert.NoError(t, err)
182+
183+
}
184+
185+
func TestInitializeKvClient(t *testing.T) {
186+
env := azure.Environment{
187+
ActiveDirectoryEndpoint: "unit-test",
188+
KeyVaultEndpoint: "unit-test",
189+
}
190+
d := NewFakeDriver()
191+
d.cloud = &azure2.Cloud{}
192+
d.cloud.Environment = env
193+
_, err := d.initializeKvClient()
194+
expectedErr := fmt.Errorf("parameter 'clientID' cannot be empty")
195+
if !reflect.DeepEqual(expectedErr, err) {
196+
t.Errorf("actualErr: (%v), expectedErr: (%v)", err, expectedErr)
197+
}
198+
d.cloud.AADClientID = "unit-test"
199+
d.cloud.AADClientSecret = "unit-test"
200+
_, err = d.initializeKvClient()
201+
assert.NoError(t, err)
202+
}
203+
204+
func TestGetKeyVaultSecretContent(t *testing.T) {
205+
env := azure.Environment{
206+
ActiveDirectoryEndpoint: "unit-test",
207+
KeyVaultEndpoint: "unit-test",
208+
}
209+
d := NewFakeDriver()
210+
d.cloud = &azure2.Cloud{}
211+
d.cloud.Environment = env
212+
valueURL := "unit-test"
213+
secretName := "unit-test"
214+
secretVersion := "v1"
215+
_, err := d.getKeyVaultSecretContent(context.TODO(), valueURL, secretName, secretVersion)
216+
expectedErr := fmt.Errorf("failed to get keyvaultClient: parameter 'clientID' cannot be empty")
217+
if !reflect.DeepEqual(expectedErr, err) {
218+
t.Errorf("actualErr: (%v), expectedErr: (%v)", err, expectedErr)
219+
}
220+
d.cloud.AADClientID = "unit-test"
221+
d.cloud.AADClientSecret = "unit-test"
222+
expectedErr = fmt.Errorf("failed to use vaultURL(unit-test), sercretName(unit-test), secretVersion(v1) to get secret: keyvault.BaseClient#GetSecret: Failure preparing request: StatusCode=0 -- Original Error: autorest: No scheme detected in URL unit-test")
223+
_, err = d.getKeyVaultSecretContent(context.TODO(), valueURL, secretName, secretVersion)
224+
if !reflect.DeepEqual(expectedErr, err) {
225+
t.Errorf("actualErr: (%v), expectedErr: (%v)", err, expectedErr)
226+
}
227+
}
142228
func createTestFile(path string) error {
143229
f, err := os.Create(path)
144230
if err != nil {

pkg/blob/controllerserver_test.go

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,19 +19,20 @@ package blob
1919
import (
2020
"context"
2121
"fmt"
22+
"reflect"
23+
"testing"
24+
2225
"github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2019-06-01/storage"
26+
"github.com/container-storage-interface/spec/lib/go/csi"
2327
"github.com/golang/mock/gomock"
28+
"github.com/stretchr/testify/assert"
29+
2430
"k8s.io/legacy-cloud-providers/azure"
2531
"k8s.io/legacy-cloud-providers/azure/clients/storageaccountclient/mockstorageaccountclient"
2632
"k8s.io/legacy-cloud-providers/azure/retry"
27-
"reflect"
28-
"testing"
2933

3034
"google.golang.org/grpc/codes"
3135
"google.golang.org/grpc/status"
32-
33-
"github.com/container-storage-interface/spec/lib/go/csi"
34-
"github.com/stretchr/testify/assert"
3536
)
3637

3738
func TestControllerGetCapabilities(t *testing.T) {
@@ -121,6 +122,12 @@ func TestCreateVolume(t *testing.T) {
121122
d.cloud = &azure.Cloud{}
122123
mp := make(map[string]string)
123124
mp["protocol"] = "unit-test"
125+
mp["skuname"] = "unit-test"
126+
mp["storageaccounttype"] = "unit-test"
127+
mp["location"] = "unit-test"
128+
mp["storageaccount"] = "unit-test"
129+
mp["resourcegroup"] = "unit-test"
130+
mp["containername"] = "unit-test"
124131
req := &csi.CreateVolumeRequest{
125132
Name: "unit-test",
126133
VolumeCapabilities: stdVolumeCapabilities,
@@ -165,6 +172,7 @@ func TestCreateVolume(t *testing.T) {
165172
d.cloud = &azure.Cloud{}
166173
mp := make(map[string]string)
167174
mp["tags"] = "unit-test"
175+
mp["storageaccounttype"] = "premium"
168176
req := &csi.CreateVolumeRequest{
169177
Name: "unit-test",
170178
VolumeCapabilities: stdVolumeCapabilities,
@@ -247,7 +255,7 @@ func TestDeleteVolume(t *testing.T) {
247255
},
248256
},
249257
{
250-
name: "invalid create volume req",
258+
name: "invalid delete volume req",
251259
testFunc: func(t *testing.T) {
252260
d := NewFakeDriver()
253261
req := &csi.DeleteVolumeRequest{
@@ -285,9 +293,10 @@ func TestDeleteVolume(t *testing.T) {
285293
controllerServiceCapability,
286294
}
287295
req := &csi.DeleteVolumeRequest{
288-
VolumeId: "unit#test#test",
296+
VolumeId: "#test#test",
289297
}
290298
d.cloud = &azure.Cloud{}
299+
d.cloud.ResourceGroup = "unit"
291300
ctrl := gomock.NewController(t)
292301
defer ctrl.Finish()
293302
mockStorageAccountsClient := mockstorageaccountclient.NewMockInterface(ctrl)
@@ -412,10 +421,11 @@ func TestValidateVolumeCapabilities(t *testing.T) {
412421
controllerServiceCapability,
413422
}
414423
req := &csi.ValidateVolumeCapabilitiesRequest{
415-
VolumeId: "unit#test#test",
424+
VolumeId: "#test#test",
416425
VolumeCapabilities: stdVolumeCapabilities,
417426
}
418427
d.cloud = &azure.Cloud{}
428+
d.cloud.ResourceGroup = "unit"
419429
ctrl := gomock.NewController(t)
420430
defer ctrl.Finish()
421431
mockStorageAccountsClient := mockstorageaccountclient.NewMockInterface(ctrl)

pkg/blob/fake_mount.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,3 +37,13 @@ func (f *fakeMounter) MountSensitive(source string, target string, fstype string
3737

3838
return nil
3939
}
40+
41+
func (f *fakeMounter) IsLikelyNotMountPoint(file string) (bool, error) {
42+
if strings.Contains(file, "error_is_likely") {
43+
return false, fmt.Errorf("fake IsLikelyNotMountPoint: fake error")
44+
}
45+
if strings.Contains(file, "false_is_likely") {
46+
return false, nil
47+
}
48+
return true, nil
49+
}

pkg/blob/fake_mount_test.go

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,3 +63,38 @@ func TestMountSensitive(t *testing.T) {
6363
}
6464
}
6565
}
66+
67+
func TestIsLikelyNotMountPoint(t *testing.T) {
68+
tests := []struct {
69+
desc string
70+
file string
71+
expectedErr error
72+
}{
73+
{
74+
desc: "[Error] Mocked file error",
75+
file: "./error_is_likely_target",
76+
expectedErr: fmt.Errorf("fake IsLikelyNotMountPoint: fake error"),
77+
},
78+
{desc: "[Success] Successful run",
79+
file: targetTest,
80+
expectedErr: nil,
81+
},
82+
{
83+
desc: "[Success] Successful run not a mount",
84+
file: "./false_is_likely_target",
85+
expectedErr: nil,
86+
},
87+
}
88+
89+
d := NewFakeDriver()
90+
fakeMounter := &fakeMounter{}
91+
d.mounter = &mount.SafeFormatAndMount{
92+
Interface: fakeMounter,
93+
}
94+
for _, test := range tests {
95+
_, err := d.mounter.IsLikelyNotMountPoint(test.file)
96+
if !reflect.DeepEqual(err, test.expectedErr) {
97+
t.Errorf("Unexpected error: %v", err)
98+
}
99+
}
100+
}

pkg/blob/nodeserver_test.go

Lines changed: 29 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,10 @@ package blob
1919
import (
2020
"context"
2121
"errors"
22+
"fmt"
2223
"os"
2324
"reflect"
25+
"syscall"
2426
"testing"
2527

2628
"google.golang.org/grpc/codes"
@@ -67,42 +69,54 @@ func TestNodeGetCapabilities(t *testing.T) {
6769
}
6870

6971
func TestEnsureMountPoint(t *testing.T) {
70-
// Setup
71-
_ = makeDir(sourceTest)
72-
_ = makeDir(targetTest)
73-
d := NewFakeDriver()
74-
d.mounter, _ = NewSafeMounter()
72+
errorTarget := "./error_is_likely_target"
73+
alreadyExistTarget := "./false_is_likely_exist_target"
74+
azureunit := "./azure.go"
7575

7676
tests := []struct {
7777
desc string
7878
target string
7979
expectedErr error
8080
}{
8181
{
82-
desc: "Not a mount point",
82+
desc: "[Error] Mocked by IsLikelyNotMountPoint",
83+
target: errorTarget,
84+
expectedErr: fmt.Errorf("fake IsLikelyNotMountPoint: fake error"),
85+
},
86+
{
87+
desc: "[Error] Not a directory",
88+
target: azureunit,
89+
expectedErr: &os.PathError{Op: "mkdir", Path: "./azure.go", Err: syscall.ENOTDIR},
90+
},
91+
{
92+
desc: "[Success] Successful run",
8393
target: targetTest,
8494
expectedErr: nil,
8595
},
8696
{
87-
desc: "Error creating directory",
88-
target: "./azure.go",
97+
desc: "[Success] Already existing mount",
98+
target: alreadyExistTarget,
99+
expectedErr: nil,
89100
},
90101
}
91102

103+
// Setup
104+
_ = makeDir(alreadyExistTarget)
105+
d := NewFakeDriver()
106+
fakeMounter := &fakeMounter{}
107+
d.mounter = &mount.SafeFormatAndMount{
108+
Interface: fakeMounter,
109+
}
110+
92111
for _, test := range tests {
93112
err := d.ensureMountPoint(test.target)
94-
if test.desc == "Error creating directory" {
95-
var e *os.PathError
96-
if !errors.As(err, &e) {
97-
t.Errorf("Unexpected Error: %v", err)
98-
}
99-
} else if !reflect.DeepEqual(err, test.expectedErr) {
113+
if !reflect.DeepEqual(err, test.expectedErr) {
100114
t.Errorf("desc: %s\n actualErr: (%v), expectedErr: (%v)", test.desc, err, test.expectedErr)
101115
}
102116
}
103117

104118
// Clean up
105-
err := os.RemoveAll(sourceTest)
119+
err := os.RemoveAll(alreadyExistTarget)
106120
assert.NoError(t, err)
107121
err = os.RemoveAll(targetTest)
108122
assert.NoError(t, err)

pkg/csi-common/utils_test.go

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,13 @@ import (
2020
"bytes"
2121
"context"
2222
"flag"
23-
"github.com/container-storage-interface/spec/lib/go/csi"
24-
"google.golang.org/grpc"
25-
"k8s.io/klog/v2"
2623
"testing"
2724

25+
"github.com/container-storage-interface/spec/lib/go/csi"
2826
"github.com/stretchr/testify/assert"
27+
"google.golang.org/grpc"
28+
29+
"k8s.io/klog/v2"
2930
)
3031

3132
func TestParseEndpoint(t *testing.T) {
@@ -146,7 +147,7 @@ func TestLogGRPC(t *testing.T) {
146147
}
147148
}
148149

149-
func TestNewNodeServiceCapability(t *testing.T) {
150+
func TestNewControllerServiceCapability(t *testing.T) {
150151
tests := []struct {
151152
cap csi.ControllerServiceCapability_RPC_Type
152153
}{
@@ -172,3 +173,27 @@ func TestNewNodeServiceCapability(t *testing.T) {
172173
assert.Equal(t, resp.XXX_sizecache, int32(0))
173174
}
174175
}
176+
177+
func TestNewNodeServiceCapability(t *testing.T) {
178+
tests := []struct {
179+
cap csi.NodeServiceCapability_RPC_Type
180+
}{
181+
{
182+
cap: csi.NodeServiceCapability_RPC_UNKNOWN,
183+
},
184+
{
185+
cap: csi.NodeServiceCapability_RPC_STAGE_UNSTAGE_VOLUME,
186+
},
187+
{
188+
cap: csi.NodeServiceCapability_RPC_GET_VOLUME_STATS,
189+
},
190+
{
191+
cap: csi.NodeServiceCapability_RPC_EXPAND_VOLUME,
192+
},
193+
}
194+
for _, test := range tests {
195+
resp := NewNodeServiceCapability(test.cap)
196+
assert.NotNil(t, resp)
197+
assert.Equal(t, resp.XXX_sizecache, int32(0))
198+
}
199+
}

0 commit comments

Comments
 (0)