@@ -19,6 +19,8 @@ import (
19
19
20
20
csi "github.com/container-storage-interface/spec/lib/go/csi"
21
21
"golang.org/x/net/context"
22
+ "google.golang.org/grpc/codes"
23
+ "google.golang.org/grpc/status"
22
24
metadataservice "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/gce-cloud-provider/metadata"
23
25
mountmanager "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/mount-manager"
24
26
)
@@ -86,3 +88,270 @@ func TestNodeGetVolumeLimits(t *testing.T) {
86
88
}
87
89
}
88
90
}
91
+
92
+ func TestNodePublishVolume (t * testing.T ) {
93
+ gceDriver := getTestGCEDriver (t )
94
+ ns := gceDriver .ns
95
+ testCases := []struct {
96
+ name string
97
+ req * csi.NodePublishVolumeRequest
98
+ expErrCode codes.Code
99
+ }{
100
+ {
101
+ name : "Valid request" ,
102
+ req : & csi.NodePublishVolumeRequest {
103
+ VolumeId : "1" ,
104
+ TargetPath : "/mnt/test" ,
105
+ StagingTargetPath : "/staging" ,
106
+ Readonly : false ,
107
+ VolumeCapability : & csi.VolumeCapability {},
108
+ },
109
+ },
110
+ {
111
+ name : "Invalid request (No VolumeId)" ,
112
+ req : & csi.NodePublishVolumeRequest {
113
+ TargetPath : "/mnt/test" ,
114
+ StagingTargetPath : "/staging" ,
115
+ Readonly : false ,
116
+ VolumeCapability : & csi.VolumeCapability {},
117
+ },
118
+ expErrCode : codes .InvalidArgument ,
119
+ },
120
+ {
121
+ name : "Invalid request (No TargetPath)" ,
122
+ req : & csi.NodePublishVolumeRequest {
123
+ VolumeId : "1" ,
124
+ StagingTargetPath : "/staging" ,
125
+ Readonly : false ,
126
+ VolumeCapability : & csi.VolumeCapability {},
127
+ },
128
+ expErrCode : codes .InvalidArgument ,
129
+ },
130
+ {
131
+ name : "Invalid request (No StagingTargetPath)" ,
132
+ req : & csi.NodePublishVolumeRequest {
133
+ VolumeId : "1" ,
134
+ TargetPath : "/mnt/test" ,
135
+ Readonly : false ,
136
+ VolumeCapability : & csi.VolumeCapability {},
137
+ },
138
+ expErrCode : codes .InvalidArgument ,
139
+ },
140
+ {
141
+ name : "Invalid request (Nil VolumeCapability)" ,
142
+ req : & csi.NodePublishVolumeRequest {
143
+ VolumeId : "1" ,
144
+ TargetPath : "/mnt/test" ,
145
+ StagingTargetPath : "/staging" ,
146
+ Readonly : false ,
147
+ VolumeCapability : nil ,
148
+ },
149
+ expErrCode : codes .InvalidArgument ,
150
+ },
151
+ }
152
+ for _ , tc := range testCases {
153
+ t .Logf ("Test case: %s" , tc .name )
154
+ _ , err := ns .NodePublishVolume (context .Background (), tc .req )
155
+ if err != nil {
156
+ serverError , ok := status .FromError (err )
157
+ if ! ok {
158
+ t .Fatalf ("Could not get error status code from err: %v" , err )
159
+ }
160
+ if serverError .Code () != tc .expErrCode {
161
+ t .Fatalf ("Expected error code: %v, got: %v. err : %v" , tc .expErrCode , serverError .Code (), err )
162
+ }
163
+ continue
164
+ }
165
+ if tc .expErrCode != codes .OK {
166
+ t .Fatalf ("Expected error: %v, got no error" , tc .expErrCode )
167
+ }
168
+ }
169
+ }
170
+
171
+ func TestNodeUnpublishVolume (t * testing.T ) {
172
+ gceDriver := getTestGCEDriver (t )
173
+ ns := gceDriver .ns
174
+ testCases := []struct {
175
+ name string
176
+ req * csi.NodeUnpublishVolumeRequest
177
+ expErrCode codes.Code
178
+ }{
179
+ {
180
+ name : "Valid request" ,
181
+ req : & csi.NodeUnpublishVolumeRequest {
182
+ VolumeId : "1" ,
183
+ TargetPath : "/mnt/test" ,
184
+ },
185
+ },
186
+ {
187
+ name : "Invalid request (No VolumeId)" ,
188
+ req : & csi.NodeUnpublishVolumeRequest {
189
+ TargetPath : "/mnt/test" ,
190
+ },
191
+ expErrCode : codes .InvalidArgument ,
192
+ },
193
+ {
194
+ name : "Invalid request (No TargetPath)" ,
195
+ req : & csi.NodeUnpublishVolumeRequest {
196
+ VolumeId : "1" ,
197
+ },
198
+ expErrCode : codes .InvalidArgument ,
199
+ },
200
+ }
201
+ for _ , tc := range testCases {
202
+ t .Logf ("Test case: %s" , tc .name )
203
+ _ , err := ns .NodeUnpublishVolume (context .Background (), tc .req )
204
+ if err != nil {
205
+ serverError , ok := status .FromError (err )
206
+ if ! ok {
207
+ t .Fatalf ("Could not get error status code from err: %v" , err )
208
+ }
209
+ if serverError .Code () != tc .expErrCode {
210
+ t .Fatalf ("Expected error code: %v, got: %v. err : %v" , tc .expErrCode , serverError .Code (), err )
211
+ }
212
+ continue
213
+ }
214
+ if tc .expErrCode != codes .OK {
215
+ t .Fatalf ("Expected error: %v, got no error" , tc .expErrCode )
216
+ }
217
+ }
218
+ }
219
+
220
+ func TestNodeStageVolume (t * testing.T ) {
221
+ gceDriver := getTestGCEDriver (t )
222
+ ns := gceDriver .ns
223
+ volumeID := "project/test001/zones/c1/disks/testDisk"
224
+ blockCap := & csi.VolumeCapability_Block {
225
+ Block : & csi.VolumeCapability_BlockVolume {},
226
+ }
227
+ cap := & csi.VolumeCapability {
228
+ AccessType : blockCap ,
229
+ }
230
+
231
+ testCases := []struct {
232
+ name string
233
+ req * csi.NodeStageVolumeRequest
234
+ expErrCode codes.Code
235
+ }{
236
+ {
237
+ name : "Valid request" ,
238
+ req : & csi.NodeStageVolumeRequest {
239
+ VolumeId : volumeID ,
240
+ StagingTargetPath : "/staging" ,
241
+ VolumeCapability : & csi.VolumeCapability {},
242
+ },
243
+ },
244
+ {
245
+ name : "Invalid request (No VolumeId)" ,
246
+ req : & csi.NodeStageVolumeRequest {
247
+ StagingTargetPath : "/staging" ,
248
+ VolumeCapability : & csi.VolumeCapability {},
249
+ },
250
+ expErrCode : codes .InvalidArgument ,
251
+ },
252
+ {
253
+ name : "Invalid request (No StagingTargetPath)" ,
254
+ req : & csi.NodeStageVolumeRequest {
255
+ VolumeId : volumeID ,
256
+ VolumeCapability : & csi.VolumeCapability {},
257
+ },
258
+ expErrCode : codes .InvalidArgument ,
259
+ },
260
+ {
261
+ name : "Invalid request (Nil VolumeCapability)" ,
262
+ req : & csi.NodeStageVolumeRequest {
263
+ VolumeId : volumeID ,
264
+ StagingTargetPath : "/staging" ,
265
+ VolumeCapability : nil ,
266
+ },
267
+ expErrCode : codes .InvalidArgument ,
268
+ },
269
+ {
270
+ name : "Invalid request (No Mount in capability)" ,
271
+ req : & csi.NodeStageVolumeRequest {
272
+ VolumeId : volumeID ,
273
+ StagingTargetPath : "/staging" ,
274
+ VolumeCapability : cap ,
275
+ },
276
+ expErrCode : codes .Unimplemented ,
277
+ },
278
+ // Capability Mount. codes.Unimplemented
279
+ }
280
+ for _ , tc := range testCases {
281
+ t .Logf ("Test case: %s" , tc .name )
282
+ _ , err := ns .NodeStageVolume (context .Background (), tc .req )
283
+ if err != nil {
284
+ serverError , ok := status .FromError (err )
285
+ if ! ok {
286
+ t .Fatalf ("Could not get error status code from err: %v" , err )
287
+ }
288
+ if serverError .Code () != tc .expErrCode {
289
+ t .Fatalf ("Expected error code: %v, got: %v. err : %v" , tc .expErrCode , serverError .Code (), err )
290
+ }
291
+ continue
292
+ }
293
+ if tc .expErrCode != codes .OK {
294
+ t .Fatalf ("Expected error: %v, got no error" , tc .expErrCode )
295
+ }
296
+ }
297
+ }
298
+
299
+ func TestNodeUnstageVolume (t * testing.T ) {
300
+ gceDriver := getTestGCEDriver (t )
301
+ ns := gceDriver .ns
302
+ testCases := []struct {
303
+ name string
304
+ req * csi.NodeUnstageVolumeRequest
305
+ expErrCode codes.Code
306
+ }{
307
+ {
308
+ name : "Valid request" ,
309
+ req : & csi.NodeUnstageVolumeRequest {
310
+ VolumeId : "1" ,
311
+ StagingTargetPath : "/staging" ,
312
+ },
313
+ },
314
+ {
315
+ name : "Invalid request (No VolumeId)" ,
316
+ req : & csi.NodeUnstageVolumeRequest {
317
+ StagingTargetPath : "/staging" ,
318
+ },
319
+ expErrCode : codes .InvalidArgument ,
320
+ },
321
+ {
322
+ name : "Invalid request (No StagingTargetPath)" ,
323
+ req : & csi.NodeUnstageVolumeRequest {
324
+ VolumeId : "1" ,
325
+ },
326
+ expErrCode : codes .InvalidArgument ,
327
+ },
328
+ }
329
+ for _ , tc := range testCases {
330
+ t .Logf ("Test case: %s" , tc .name )
331
+ _ , err := ns .NodeUnstageVolume (context .Background (), tc .req )
332
+ if err != nil {
333
+ serverError , ok := status .FromError (err )
334
+ if ! ok {
335
+ t .Fatalf ("Could not get error status code from err: %v" , err )
336
+ }
337
+ if serverError .Code () != tc .expErrCode {
338
+ t .Fatalf ("Expected error code: %v, got: %v. err : %v" , tc .expErrCode , serverError .Code (), err )
339
+ }
340
+ continue
341
+ }
342
+ if tc .expErrCode != codes .OK {
343
+ t .Fatalf ("Expected error: %v, got no error" , tc .expErrCode )
344
+ }
345
+ }
346
+ }
347
+
348
+ func TestNodeGetCapabilities (t * testing.T ) {
349
+ gceDriver := getTestGCEDriver (t )
350
+ ns := gceDriver .ns
351
+ req := & csi.NodeGetCapabilitiesRequest {}
352
+
353
+ _ , err := ns .NodeGetCapabilities (context .Background (), req )
354
+ if err != nil {
355
+ t .Fatalf ("Unexpedted error: %v" , err )
356
+ }
357
+ }
0 commit comments