11/*
2- Copyright 2017 The Kubernetes Authors.
2+ Copyright 2020 The Kubernetes Authors.
33
44Licensed under the Apache License, Version 2.0 (the "License");
55you may not use this file except in compliance with the License.
@@ -17,6 +17,7 @@ limitations under the License.
1717package csicommon
1818
1919import (
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+
50104func 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+ }
0 commit comments