Skip to content

Commit 6eb4254

Browse files
authored
Merge pull request #22 from animeshk08/unit-tests
Tests: Add Tests for csi-common and smb
2 parents bd34952 + 15a3603 commit 6eb4254

File tree

7 files changed

+564
-8
lines changed

7 files changed

+564
-8
lines changed
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
/*
2+
Copyright 2020 The Kubernetes Authors.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
package csicommon
18+
19+
import (
20+
"context"
21+
"github.com/container-storage-interface/spec/lib/go/csi"
22+
"github.com/stretchr/testify/assert"
23+
"testing"
24+
)
25+
26+
func TestValidateVolumeCapabilities(t *testing.T) {
27+
d := NewFakeDriver()
28+
d.AddVolumeCapabilityAccessModes([]csi.VolumeCapability_AccessMode_Mode{
29+
csi.VolumeCapability_AccessMode_SINGLE_NODE_WRITER,
30+
csi.VolumeCapability_AccessMode_SINGLE_NODE_READER_ONLY,
31+
csi.VolumeCapability_AccessMode_MULTI_NODE_READER_ONLY,
32+
})
33+
34+
capability := []*csi.VolumeCapability{
35+
{AccessMode: NewVolumeCapabilityAccessMode(csi.VolumeCapability_AccessMode_SINGLE_NODE_WRITER)},
36+
{AccessMode: NewVolumeCapabilityAccessMode(csi.VolumeCapability_AccessMode_SINGLE_NODE_READER_ONLY)},
37+
{AccessMode: NewVolumeCapabilityAccessMode(csi.VolumeCapability_AccessMode_MULTI_NODE_READER_ONLY)},
38+
}
39+
capabilityDisjoint := []*csi.VolumeCapability{
40+
{AccessMode: NewVolumeCapabilityAccessMode(csi.VolumeCapability_AccessMode_MULTI_NODE_SINGLE_WRITER)},
41+
}
42+
43+
ns := NewDefaultControllerServer(d)
44+
45+
// Test when there are common capabilities
46+
req := csi.ValidateVolumeCapabilitiesRequest{VolumeCapabilities: capability}
47+
resp, err := ns.ValidateVolumeCapabilities(context.Background(), &req)
48+
assert.NoError(t, err)
49+
assert.Equal(t, resp.XXX_sizecache, int32(0))
50+
51+
// Test when there are no common capabilities
52+
req = csi.ValidateVolumeCapabilitiesRequest{VolumeCapabilities: capabilityDisjoint}
53+
resp, err = ns.ValidateVolumeCapabilities(context.Background(), &req)
54+
assert.NotNil(t, resp)
55+
assert.Error(t, err)
56+
}
57+
58+
func TestControllerGetCapabilities(t *testing.T) {
59+
d := NewFakeDriver()
60+
ns := NewDefaultControllerServer(d)
61+
62+
// Test valid request
63+
req := csi.ControllerGetCapabilitiesRequest{}
64+
resp, err := ns.ControllerGetCapabilities(context.Background(), &req)
65+
assert.NoError(t, err)
66+
assert.Equal(t, resp.XXX_sizecache, int32(0))
67+
}

pkg/csi-common/driver_test.go

Lines changed: 133 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
Copyright 2017 The Kubernetes Authors.
2+
Copyright 2020 The Kubernetes Authors.
33
44
Licensed under the Apache License, Version 2.0 (the "License");
55
you may not use this file except in compliance with the License.
@@ -17,6 +17,7 @@ limitations under the License.
1717
package csicommon
1818

1919
import (
20+
"reflect"
2021
"testing"
2122

2223
"github.com/container-storage-interface/spec/lib/go/csi"
@@ -47,6 +48,59 @@ func TestNewFakeDriver(t *testing.T) {
4748
assert.Nil(t, d)
4849
}
4950

51+
func TestNewCSIDriver(t *testing.T) {
52+
tests := []struct {
53+
desc string
54+
name string
55+
version string
56+
nodeID string
57+
expectedResp *CSIDriver
58+
}{
59+
{
60+
desc: "Successful",
61+
name: fakeDriverName,
62+
version: vendorVersion,
63+
nodeID: fakeNodeID,
64+
expectedResp: &CSIDriver{
65+
Name: fakeDriverName,
66+
Version: vendorVersion,
67+
NodeID: fakeNodeID,
68+
},
69+
},
70+
{
71+
desc: "Missing driver name",
72+
name: "",
73+
version: vendorVersion,
74+
nodeID: fakeNodeID,
75+
expectedResp: nil,
76+
},
77+
{
78+
desc: "Missing node ID",
79+
name: fakeDriverName,
80+
version: vendorVersion,
81+
nodeID: "",
82+
expectedResp: nil,
83+
},
84+
{
85+
desc: "Missing driver version",
86+
name: fakeDriverName,
87+
version: "",
88+
nodeID: fakeNodeID,
89+
expectedResp: &CSIDriver{
90+
Name: fakeDriverName,
91+
Version: "",
92+
NodeID: fakeNodeID,
93+
},
94+
},
95+
}
96+
for _, test := range tests {
97+
resp := NewCSIDriver(test.name, test.version, test.nodeID)
98+
if !reflect.DeepEqual(resp, test.expectedResp) {
99+
t.Errorf("Unexpected driver: %v", resp)
100+
}
101+
}
102+
}
103+
50104
func TestGetVolumeCapabilityAccessModes(t *testing.T) {
51105

52106
d := NewFakeDriver()
@@ -102,3 +156,81 @@ func TestValidateControllerServiceRequest(t *testing.T) {
102156
assert.NoError(t, err)
103157

104158
}
159+
160+
func TestValidateNodeServiceRequest(t *testing.T) {
161+
d := NewFakeDriver()
162+
d.NSCap = []*csi.NodeServiceCapability{
163+
NewNodeServiceCapability(csi.NodeServiceCapability_RPC_STAGE_UNSTAGE_VOLUME),
164+
NewNodeServiceCapability(csi.NodeServiceCapability_RPC_GET_VOLUME_STATS),
165+
}
166+
tests := []struct {
167+
desc string
168+
cap csi.NodeServiceCapability_RPC_Type
169+
expectedErr error
170+
}{
171+
{
172+
desc: "Node service capabailtiy unknown",
173+
cap: csi.NodeServiceCapability_RPC_UNKNOWN,
174+
expectedErr: nil,
175+
},
176+
{
177+
desc: "Successful request",
178+
cap: csi.NodeServiceCapability_RPC_GET_VOLUME_STATS,
179+
expectedErr: nil,
180+
},
181+
{
182+
desc: "Invalid argument",
183+
cap: csi.NodeServiceCapability_RPC_EXPAND_VOLUME,
184+
expectedErr: status.Error(codes.InvalidArgument, "EXPAND_VOLUME"),
185+
},
186+
}
187+
188+
for _, test := range tests {
189+
err := d.ValidateNodeServiceRequest(test.cap)
190+
if !reflect.DeepEqual(err, test.expectedErr) {
191+
t.Errorf("Unexpected error: %v", err)
192+
}
193+
}
194+
}
195+
196+
func TestAddControllerServiceCapabilities(t *testing.T) {
197+
d := NewFakeDriver()
198+
expectedCapList := []*csi.ControllerServiceCapability{
199+
NewControllerServiceCapability(csi.ControllerServiceCapability_RPC_CREATE_DELETE_VOLUME),
200+
NewControllerServiceCapability(csi.ControllerServiceCapability_RPC_PUBLISH_UNPUBLISH_VOLUME),
201+
}
202+
capList := []csi.ControllerServiceCapability_RPC_Type{
203+
csi.ControllerServiceCapability_RPC_CREATE_DELETE_VOLUME,
204+
csi.ControllerServiceCapability_RPC_PUBLISH_UNPUBLISH_VOLUME,
205+
}
206+
d.AddControllerServiceCapabilities(capList)
207+
assert.Equal(t, d.Cap, expectedCapList)
208+
}
209+
210+
func TestAddNodeServiceCapabilities(t *testing.T) {
211+
d := NewFakeDriver()
212+
expectedCapList := []*csi.NodeServiceCapability{
213+
NewNodeServiceCapability(csi.NodeServiceCapability_RPC_STAGE_UNSTAGE_VOLUME),
214+
NewNodeServiceCapability(csi.NodeServiceCapability_RPC_GET_VOLUME_STATS),
215+
}
216+
capList := []csi.NodeServiceCapability_RPC_Type{
217+
csi.NodeServiceCapability_RPC_STAGE_UNSTAGE_VOLUME,
218+
csi.NodeServiceCapability_RPC_GET_VOLUME_STATS,
219+
}
220+
d.AddNodeServiceCapabilities(capList)
221+
assert.Equal(t, d.NSCap, expectedCapList)
222+
}
223+
224+
func TestAddVolumeCapabilityAccessModes(t *testing.T) {
225+
d := NewFakeDriver()
226+
expectedCapList := []*csi.VolumeCapability_AccessMode{
227+
NewVolumeCapabilityAccessMode(csi.VolumeCapability_AccessMode_MULTI_NODE_MULTI_WRITER),
228+
NewVolumeCapabilityAccessMode(csi.VolumeCapability_AccessMode_SINGLE_NODE_READER_ONLY),
229+
}
230+
capList := []csi.VolumeCapability_AccessMode_Mode{
231+
csi.VolumeCapability_AccessMode_MULTI_NODE_MULTI_WRITER,
232+
csi.VolumeCapability_AccessMode_SINGLE_NODE_READER_ONLY,
233+
}
234+
d.AddVolumeCapabilityAccessModes(capList)
235+
assert.Equal(t, d.VC, expectedCapList)
236+
}

pkg/csi-common/identityserver-default_test.go

Lines changed: 64 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
Copyright 2017 The Kubernetes Authors.
2+
Copyright 2020 The Kubernetes Authors.
33
44
Licensed under the Apache License, Version 2.0 (the "License");
55
you may not use this file except in compliance with the License.
@@ -18,20 +18,78 @@ package csicommon
1818

1919
import (
2020
"context"
21+
"google.golang.org/grpc/codes"
22+
"google.golang.org/grpc/status"
23+
"reflect"
2124
"testing"
2225

2326
"github.com/container-storage-interface/spec/lib/go/csi"
2427
"github.com/stretchr/testify/assert"
2528
)
2629

2730
func TestGetPluginInfo(t *testing.T) {
28-
d := NewFakeDriver()
31+
req := csi.GetPluginInfoRequest{}
32+
emptyNameDriver := NewFakeDriver()
33+
emptyNameDriver.Name = ""
34+
emptyVersionDriver := NewFakeDriver()
35+
emptyVersionDriver.Version = ""
36+
tests := []struct {
37+
desc string
38+
driver *CSIDriver
39+
expectedErr error
40+
}{
41+
{
42+
desc: "Successful request",
43+
driver: NewFakeDriver(),
44+
expectedErr: nil,
45+
},
46+
{
47+
desc: "Driver name missing",
48+
driver: emptyNameDriver,
49+
expectedErr: status.Error(codes.Unavailable, "Driver name not configured"),
50+
},
51+
{
52+
desc: "Driver version missing",
53+
driver: emptyVersionDriver,
54+
expectedErr: status.Error(codes.Unavailable, "Driver is missing version"),
55+
},
56+
}
2957

58+
for _, test := range tests {
59+
ids := NewDefaultIdentityServer(test.driver)
60+
_, err := ids.GetPluginInfo(context.Background(), &req)
61+
if !reflect.DeepEqual(err, test.expectedErr) {
62+
t.Errorf("Unexpecter error: %v", err)
63+
}
64+
}
65+
}
66+
67+
func TestProbe(t *testing.T) {
68+
d := NewFakeDriver()
3069
ids := NewDefaultIdentityServer(d)
70+
req := csi.ProbeRequest{}
71+
resp, err := ids.Probe(context.Background(), &req)
72+
assert.NoError(t, err)
73+
assert.NotNil(t, resp)
74+
assert.Equal(t, resp.XXX_sizecache, int32(0))
75+
}
3176

32-
req := csi.GetPluginInfoRequest{}
33-
resp, err := ids.GetPluginInfo(context.Background(), &req)
77+
func TestGetPluginCapabilities(t *testing.T) {
78+
expectedCap := []*csi.PluginCapability{
79+
{
80+
Type: &csi.PluginCapability_Service_{
81+
Service: &csi.PluginCapability_Service{
82+
Type: csi.PluginCapability_Service_CONTROLLER_SERVICE,
83+
},
84+
},
85+
},
86+
}
87+
d := NewFakeDriver()
88+
req := csi.GetPluginCapabilitiesRequest{}
89+
ids := NewDefaultIdentityServer(d)
90+
resp, err := ids.GetPluginCapabilities(context.Background(), &req)
3491
assert.NoError(t, err)
35-
assert.Equal(t, resp.GetName(), fakeDriverName)
36-
assert.Equal(t, resp.GetVendorVersion(), vendorVersion)
92+
assert.NotNil(t, resp)
93+
assert.Equal(t, resp.XXX_sizecache, int32(0))
94+
assert.Equal(t, resp.Capabilities, expectedCap)
3795
}

0 commit comments

Comments
 (0)