Skip to content

Commit 1574990

Browse files
committed
Attachment unit test cases
1 parent d81676b commit 1574990

File tree

1 file changed

+146
-0
lines changed

1 file changed

+146
-0
lines changed

pkg/api/controllers/attachment_test.go

Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import (
1818
"bytes"
1919
"encoding/json"
2020
"errors"
21+
"fmt"
2122
"net/http"
2223
"net/http/httptest"
2324
"testing"
@@ -46,6 +47,93 @@ func init() {
4647
// Tests for volume attachment //
4748
////////////////////////////////////////////////////////////////////////////////
4849

50+
func TestCreateVolumeAttachment(t *testing.T) {
51+
var jsonStr = []byte(`{
52+
"id": "f2dda3d2-bf79-11e7-8665-f750b088f63e",
53+
"name": "fake volume attachment",
54+
"description": "fake volume attachment",
55+
"hostId": "202964b5-8e73-46fd-b41b-a8e403f3c30b",
56+
"volumeId": "bd5b12a8-a101-11e7-941e-d77981b584d8",
57+
"attachMode": "ro"
58+
}`)
59+
var expectedJson = []byte(`{
60+
"id": "f2dda3d2-bf79-11e7-8665-f750b088f63e",
61+
"name": "fake volume attachment",
62+
"description": "fake volume attachment",
63+
"status": "creating",
64+
"volumeId": "bd5b12a8-a101-11e7-941e-d77981b584d8",
65+
"hostId": "202964b5-8e73-46fd-b41b-a8e403f3c30b",
66+
"connectionInfo": {
67+
"driverVolumeType": "iscsi",
68+
"connectionData": {
69+
"targetDiscovered": true,
70+
"targetIqn": "iqn.2017-10.io.opensds:volume:00000001",
71+
"targetPortal": "127.0.0.0.1:3260",
72+
"discard": false
73+
}
74+
}
75+
}`)
76+
var expected model.VolumeAttachmentSpec
77+
json.Unmarshal(expectedJson, &expected)
78+
fmt.Println(expected)
79+
t.Run("Should return 200 if everything works well", func(t *testing.T) {
80+
attachment := model.VolumeAttachmentSpec{
81+
BaseModel: &model.BaseModel{},
82+
Status: "creating",
83+
VolumeId: "bd5b12a8-a101-11e7-941e-d77981b584d8",
84+
HostId: "202964b5-8e73-46fd-b41b-a8e403f3c30b",
85+
AccessProtocol: "rbd",
86+
ConnectionInfo: model.ConnectionInfo{
87+
DriverVolumeType: "iscsi",
88+
ConnectionData: map[string]interface{}{
89+
"targetDiscovered": true,
90+
"targetIqn": "iqn.2017-10.io.opensds:volume:00000001",
91+
"targetPortal": "127.0.0.0.1:3260",
92+
"discard": false,
93+
}},
94+
}
95+
json.NewDecoder(bytes.NewBuffer(jsonStr)).Decode(&attachment)
96+
mockClient := new(dbtest.Client)
97+
mockClient.On("GetHost", c.NewAdminContext(), attachment.HostId).Return(&SampleHosts[0], nil)
98+
mockClient.On("GetVolume", c.NewAdminContext(), attachment.VolumeId).Return(&SampleVolumes[0], nil)
99+
mockClient.On("UpdateStatus", c.NewAdminContext(), &SampleVolumes[0], "attaching").Return(nil)
100+
mockClient.On("GetPool", c.NewAdminContext(), SampleVolumes[0].PoolId).Return(&SamplePools[0], nil)
101+
mockClient.On("CreateVolumeAttachment", c.NewAdminContext(), &attachment).
102+
Return(&expected, nil)
103+
db.C = mockClient
104+
105+
r, _ := http.NewRequest("POST", "/v1beta/block/attachments", bytes.NewReader(jsonStr))
106+
w := httptest.NewRecorder()
107+
r.Header.Set("Content-Type", "application/JSON")
108+
beego.InsertFilter("*", beego.BeforeExec, func(httpCtx *context.Context) {
109+
httpCtx.Input.SetData("context", c.NewAdminContext())
110+
})
111+
beego.BeeApp.Handlers.ServeHTTP(w, r)
112+
var output model.VolumeAttachmentSpec
113+
json.Unmarshal(w.Body.Bytes(), &output)
114+
assertTestResult(t, w.Code, 200)
115+
assertTestResult(t, &output, &expected)
116+
})
117+
118+
t.Run("Should return 500 if create volume attachment with bad request", func(t *testing.T) {
119+
attachment := model.VolumeAttachmentSpec{BaseModel: &model.BaseModel{}}
120+
json.NewDecoder(bytes.NewBuffer(jsonStr)).Decode(&attachment)
121+
mockClient := new(dbtest.Client)
122+
mockClient.On("CreateVolumeAttachment", c.NewAdminContext(), &attachment).
123+
Return(nil, errors.New("db error"))
124+
db.C = mockClient
125+
126+
r, _ := http.NewRequest("POST", "/v1beta/block/attachments", bytes.NewBuffer(jsonStr))
127+
w := httptest.NewRecorder()
128+
r.Header.Set("Content-Type", "application/JSON")
129+
beego.InsertFilter("*", beego.BeforeExec, func(httpCtx *context.Context) {
130+
httpCtx.Input.SetData("context", c.NewAdminContext())
131+
})
132+
beego.BeeApp.Handlers.ServeHTTP(w, r)
133+
assertTestResult(t, w.Code, 500)
134+
})
135+
}
136+
49137
func TestListVolumeAttachments(t *testing.T) {
50138

51139
t.Run("Should return 200 if everything works well", func(t *testing.T) {
@@ -200,3 +288,61 @@ func TestUpdateVolumeAttachment(t *testing.T) {
200288
assertTestResult(t, w.Code, 500)
201289
})
202290
}
291+
292+
func TestDeleteVolumeAttachment(t *testing.T) {
293+
294+
t.Run("Should return 200 if everything works well", func(t *testing.T) {
295+
mockClient := new(dbtest.Client)
296+
mockClient.On("DeleteVolumeAttachment", c.NewAdminContext(), "f2dda3d2-bf79-11e7-8665-f750b088f63e").
297+
Return(&SampleAttachments[0], nil)
298+
db.C = mockClient
299+
attachment := model.VolumeAttachmentSpec{
300+
BaseModel: &model.BaseModel{
301+
Id: "f2dda3d2-bf79-11e7-8665-f750b088f63e",
302+
},
303+
Status: "deleting",
304+
VolumeId: "bd5b12a8-a101-11e7-941e-d77981b584d8",
305+
HostId: "202964b5-8e73-46fd-b41b-a8e403f3c30b",
306+
AccessProtocol: "rbd",
307+
ConnectionInfo: model.ConnectionInfo{
308+
DriverVolumeType: "iscsi",
309+
ConnectionData: map[string]interface{}{
310+
"targetDiscovered": true,
311+
"targetIqn": "iqn.2017-10.io.opensds:volume:00000001",
312+
"targetPortal": "127.0.0.0.1:3260",
313+
"discard": false,
314+
}},
315+
}
316+
317+
mockClient.On("GetVolumeAttachment", c.NewAdminContext(), "f2dda3d2-bf79-11e7-8665-f750b088f63e").Return(&SampleAttachments[0], nil)
318+
mockClient.On("GetVolume", c.NewAdminContext(), "bd5b12a8-a101-11e7-941e-d77981b584d8").Return(&SampleVolumes[0], nil)
319+
mockClient.On("GetHost", c.NewAdminContext(), "202964b5-8e73-46fd-b41b-a8e403f3c30b").Return(&SampleHosts[0], nil)
320+
mockClient.On("UpdateVolumeAttachment", c.NewAdminContext(), "f2dda3d2-bf79-11e7-8665-f750b088f63e", &attachment).Return(&SampleAttachments[0], nil)
321+
r, _ := http.NewRequest("DELETE", "/v1beta/block/attachments/f2dda3d2-bf79-11e7-8665-f750b088f63e", nil)
322+
w := httptest.NewRecorder()
323+
beego.InsertFilter("*", beego.BeforeExec, func(httpCtx *context.Context) {
324+
httpCtx.Input.SetData("context", c.NewAdminContext())
325+
})
326+
beego.BeeApp.Handlers.ServeHTTP(w, r)
327+
328+
var output model.VolumeAttachmentSpec
329+
json.Unmarshal(w.Body.Bytes(), &output)
330+
assertTestResult(t, w.Code, 200)
331+
assertTestResult(t, &output, &SampleAttachments[0])
332+
})
333+
334+
//t.Run("Should return 404 if delete volume attachment with bad request", func(t *testing.T) {
335+
// mockClient := new(dbtest.Client)
336+
// mockClient.On("DeleteVolumeAttachment", c.NewAdminContext(), "f2dda3d2-bf79-11e7-8665-f750b088f63e").
337+
// Return(nil, errors.New("db error"))
338+
// db.C = mockClient
339+
//
340+
// r, _ := http.NewRequest("DELETE", "/v1beta/block/attachments/f2dda3d2-bf79-11e7-8665-f750b088f63e", nil)
341+
// w := httptest.NewRecorder()
342+
// beego.InsertFilter("*", beego.BeforeExec, func(httpCtx *context.Context) {
343+
// httpCtx.Input.SetData("context", c.NewAdminContext())
344+
// })
345+
// beego.BeeApp.Handlers.ServeHTTP(w, r)
346+
// assertTestResult(t, w.Code, 404)
347+
//})
348+
}

0 commit comments

Comments
 (0)