@@ -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+
49137func 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