@@ -19,16 +19,16 @@ import (
19
19
)
20
20
21
21
// Mock implementations
22
- type mockMounter struct {
22
+ type MockMounterUtils struct {
23
23
mock.Mock
24
24
}
25
25
26
- func (m * mockMounter ) FuseMount (path string , mounter string , args []string ) error {
26
+ func (m * MockMounterUtils ) FuseMount (path string , mounter string , args []string ) error {
27
27
argsCalled := m .Called (path , mounter , args )
28
28
return argsCalled .Error (0 )
29
29
}
30
30
31
- func (m * mockMounter ) FuseUnmount (path string ) error {
31
+ func (m * MockMounterUtils ) FuseUnmount (path string ) error {
32
32
argsCalled := m .Called (path )
33
33
return argsCalled .Error (0 )
34
34
}
@@ -133,7 +133,7 @@ func TestNewRouter_HasExpectedRoutes(t *testing.T) {
133
133
}
134
134
135
135
func TestHandleCosMount_InvalidJSON (t * testing.T ) {
136
- mockMounter := new (mockMounter )
136
+ mockMounter := new (MockMounterUtils )
137
137
router := gin .Default ()
138
138
router .POST ("/mount" , handleCosMount (mockMounter , & MockMounterArgsParser {}))
139
139
@@ -147,7 +147,7 @@ func TestHandleCosMount_InvalidJSON(t *testing.T) {
147
147
}
148
148
149
149
func TestHandleCosMount_InvalidMounter (t * testing.T ) {
150
- mockMounter := new (mockMounter )
150
+ mockMounter := new (MockMounterUtils )
151
151
router := gin .Default ()
152
152
router .POST ("/mount" , handleCosMount (mockMounter , & MockMounterArgsParser {}))
153
153
@@ -170,7 +170,7 @@ func TestHandleCosMount_InvalidMounter(t *testing.T) {
170
170
}
171
171
172
172
func TestHandleCosMount_MissingBucket (t * testing.T ) {
173
- mockMounter := new (mockMounter )
173
+ mockMounter := new (MockMounterUtils )
174
174
router := gin .Default ()
175
175
router .POST ("/mount" , handleCosMount (mockMounter , & MockMounterArgsParser {}))
176
176
@@ -194,7 +194,7 @@ func TestHandleCosMount_MissingBucket(t *testing.T) {
194
194
func TestHandleCosMount_InvalidMounterArgs (t * testing.T ) {
195
195
gin .SetMode (gin .TestMode )
196
196
197
- mockMounter := new (mockMounter )
197
+ mockMounter := new (MockMounterUtils )
198
198
mockParser := new (MockMounterArgsParser )
199
199
200
200
reqBody := []byte (`{
@@ -204,7 +204,6 @@ func TestHandleCosMount_InvalidMounterArgs(t *testing.T) {
204
204
"args": {"flag": "--invalid"}
205
205
}` )
206
206
207
- // Unmarshal into MountRequest to match the call made to Parse()
208
207
var request MountRequest
209
208
err := json .Unmarshal (reqBody , & request )
210
209
assert .NoError (t , err )
@@ -224,8 +223,74 @@ func TestHandleCosMount_InvalidMounterArgs(t *testing.T) {
224
223
mockParser .AssertExpectations (t )
225
224
}
226
225
226
+ func TestHandleCosMount_FuseMountFails (t * testing.T ) {
227
+ mockMounter := new (MockMounterUtils )
228
+ mockParser := new (MockMounterArgsParser )
229
+
230
+ request := MountRequest {
231
+ Bucket : "my-bucket" ,
232
+ Path : "/mnt/test" ,
233
+ Mounter : constants .S3FS ,
234
+ Args : json .RawMessage (`["--endpoint=https://s3.example.com"]` ),
235
+ }
236
+
237
+ expectedArgs := []string {"--endpoint=https://s3.example.com" }
238
+
239
+ mockParser .On ("Parse" , request ).Return (expectedArgs , nil )
240
+ mockMounter .On ("FuseMount" , request .Path , request .Mounter , expectedArgs ).Return (fmt .Errorf ("mount error" ))
241
+
242
+ router := gin .Default ()
243
+ router .POST ("/mount" , handleCosMount (mockMounter , mockParser ))
244
+
245
+ body , _ := json .Marshal (request )
246
+ w := httptest .NewRecorder ()
247
+ req , _ := http .NewRequest ("POST" , "/mount" , bytes .NewBuffer (body ))
248
+ req .Header .Set ("Content-Type" , "application/json" )
249
+
250
+ router .ServeHTTP (w , req )
251
+
252
+ assert .Equal (t , http .StatusInternalServerError , w .Code )
253
+ assert .Contains (t , w .Body .String (), "mount failed: mount error" )
254
+
255
+ mockMounter .AssertExpectations (t )
256
+ mockParser .AssertExpectations (t )
257
+ }
258
+
259
+ func TestHandleCosMount_Success (t * testing.T ) {
260
+ mockMounter := new (MockMounterUtils )
261
+ mockParser := new (MockMounterArgsParser )
262
+
263
+ request := MountRequest {
264
+ Bucket : "my-bucket" ,
265
+ Path : "/mnt/test" ,
266
+ Mounter : constants .S3FS ,
267
+ Args : json .RawMessage (`["--endpoint=https://s3.example.com"]` ),
268
+ }
269
+
270
+ expectedArgs := []string {"--endpoint=https://s3.example.com" }
271
+
272
+ mockParser .On ("Parse" , request ).Return (expectedArgs , nil )
273
+ mockMounter .On ("FuseMount" , request .Path , request .Mounter , expectedArgs ).Return (nil )
274
+
275
+ router := gin .Default ()
276
+ router .POST ("/mount" , handleCosMount (mockMounter , mockParser ))
277
+
278
+ body , _ := json .Marshal (request )
279
+ w := httptest .NewRecorder ()
280
+ req , _ := http .NewRequest ("POST" , "/mount" , bytes .NewBuffer (body ))
281
+ req .Header .Set ("Content-Type" , "application/json" )
282
+
283
+ router .ServeHTTP (w , req )
284
+
285
+ assert .Equal (t , http .StatusOK , w .Code )
286
+ assert .Contains (t , w .Body .String (), "success" )
287
+
288
+ mockMounter .AssertExpectations (t )
289
+ mockParser .AssertExpectations (t )
290
+ }
291
+
227
292
func TestHandleCosUnmount_InvalidJSON (t * testing.T ) {
228
- mock := new (mockMounter )
293
+ mock := new (MockMounterUtils )
229
294
router := gin .Default ()
230
295
router .POST ("/unmount" , handleCosUnmount (mock ))
231
296
@@ -240,7 +305,7 @@ func TestHandleCosUnmount_InvalidJSON(t *testing.T) {
240
305
}
241
306
242
307
func TestHandleCosUnmount_UnmountFailure (t * testing.T ) {
243
- mock := new (mockMounter )
308
+ mock := new (MockMounterUtils )
244
309
mock .On ("FuseUnmount" , "/mnt/fail" ).Return (errors .New ("mock failure" ))
245
310
246
311
router := gin .Default ()
@@ -261,7 +326,7 @@ func TestHandleCosUnmount_UnmountFailure(t *testing.T) {
261
326
}
262
327
263
328
func TestHandleCosUnmount_Success (t * testing.T ) {
264
- mock := new (mockMounter )
329
+ mock := new (MockMounterUtils )
265
330
mock .On ("FuseUnmount" , "/mnt/success" ).Return (nil )
266
331
267
332
router := gin .Default ()
0 commit comments