blob: 7943c710e988bf1f9f977691340f3e3b84fabca7 [file] [log] [blame]
Jamie Hannaford924c09d2014-11-19 12:05:38 +01001package secgroups
2
3import (
4 "fmt"
5 "net/http"
6 "testing"
7
8 th "github.com/rackspace/gophercloud/testhelper"
9 fake "github.com/rackspace/gophercloud/testhelper/client"
10)
11
Jamie Hannaforda493e642014-11-19 12:40:30 +010012const rootPath = "/os-security-groups"
13
Jamie Hannaford19151792014-11-19 12:46:47 +010014const listGroupsJSON = `
15{
Jamie Hannaford334c8752014-11-20 12:05:09 +010016 "security_groups": [
17 {
18 "description": "default",
Jamie Hannaford558572f2014-11-24 14:31:57 +010019 "id": 1,
Jamie Hannaford334c8752014-11-20 12:05:09 +010020 "name": "default",
21 "rules": [],
22 "tenant_id": "openstack"
23 }
24 ]
Jamie Hannaford19151792014-11-19 12:46:47 +010025}
26`
27
Jamie Hannaford924c09d2014-11-19 12:05:38 +010028func mockListGroupsResponse(t *testing.T) {
Jamie Hannaforda493e642014-11-19 12:40:30 +010029 th.Mux.HandleFunc(rootPath, func(w http.ResponseWriter, r *http.Request) {
Jamie Hannaford924c09d2014-11-19 12:05:38 +010030 th.TestMethod(t, r, "GET")
31 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
32
33 w.Header().Add("Content-Type", "application/json")
34 w.WriteHeader(http.StatusOK)
35
Jamie Hannaford19151792014-11-19 12:46:47 +010036 fmt.Fprintf(w, listGroupsJSON)
37 })
Jamie Hannaford924c09d2014-11-19 12:05:38 +010038}
Jamie Hannaford19151792014-11-19 12:46:47 +010039
40func mockListGroupsByServerResponse(t *testing.T, serverID string) {
41 url := fmt.Sprintf("%s/servers/%s%s", rootPath, serverID, rootPath)
42 th.Mux.HandleFunc(url, func(w http.ResponseWriter, r *http.Request) {
43 th.TestMethod(t, r, "GET")
44 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
45
46 w.Header().Add("Content-Type", "application/json")
47 w.WriteHeader(http.StatusOK)
48
49 fmt.Fprintf(w, listGroupsJSON)
Jamie Hannaford924c09d2014-11-19 12:05:38 +010050 })
51}
Jamie Hannaforda493e642014-11-19 12:40:30 +010052
53func mockCreateGroupResponse(t *testing.T) {
54 th.Mux.HandleFunc(rootPath, func(w http.ResponseWriter, r *http.Request) {
55 th.TestMethod(t, r, "POST")
56 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
57
58 th.TestJSONRequest(t, r, `
59{
60 "security_group": {
61 "name": "test",
62 "description": "something"
63 }
64}
65 `)
66
67 w.Header().Add("Content-Type", "application/json")
68 w.WriteHeader(http.StatusOK)
69
70 fmt.Fprintf(w, `
71{
72 "security_group": {
73 "description": "something",
Jamie Hannaford558572f2014-11-24 14:31:57 +010074 "id": 1,
Jamie Hannaforda493e642014-11-19 12:40:30 +010075 "name": "test",
76 "rules": [],
77 "tenant_id": "openstack"
78 }
79}
80`)
81 })
82}
Jamie Hannafordb38dd312014-11-19 13:02:11 +010083
Jamie Hannaford558572f2014-11-24 14:31:57 +010084func mockUpdateGroupResponse(t *testing.T, groupID int) {
85 url := fmt.Sprintf("%s/%d", rootPath, groupID)
Jamie Hannaford30c74662014-11-19 15:37:34 +010086 th.Mux.HandleFunc(url, func(w http.ResponseWriter, r *http.Request) {
Jamie Hannaford740e4a32014-11-19 16:13:30 +010087 th.TestMethod(t, r, "PUT")
Jamie Hannaford30c74662014-11-19 15:37:34 +010088 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
89
90 th.TestJSONRequest(t, r, `
91{
Jamie Hannaford334c8752014-11-20 12:05:09 +010092 "security_group": {
93 "name": "new_name"
94 }
Jamie Hannaford30c74662014-11-19 15:37:34 +010095}
96 `)
97
98 w.Header().Add("Content-Type", "application/json")
99 w.WriteHeader(http.StatusOK)
100
101 fmt.Fprintf(w, `
102{
Jamie Hannaford334c8752014-11-20 12:05:09 +0100103 "security_group": {
104 "description": "something",
Jamie Hannaford558572f2014-11-24 14:31:57 +0100105 "id": 1,
Jamie Hannaford334c8752014-11-20 12:05:09 +0100106 "name": "new_name",
107 "rules": [],
108 "tenant_id": "openstack"
109 }
Jamie Hannaford30c74662014-11-19 15:37:34 +0100110}
111`)
112 })
113}
114
Jamie Hannaford558572f2014-11-24 14:31:57 +0100115func mockGetGroupsResponse(t *testing.T, groupID int) {
116 url := fmt.Sprintf("%s/%d", rootPath, groupID)
Jamie Hannafordb38dd312014-11-19 13:02:11 +0100117 th.Mux.HandleFunc(url, func(w http.ResponseWriter, r *http.Request) {
118 th.TestMethod(t, r, "GET")
119 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
120
121 w.Header().Add("Content-Type", "application/json")
122 w.WriteHeader(http.StatusOK)
123
124 fmt.Fprintf(w, `
125{
126 "security_group": {
127 "description": "default",
Jamie Hannaford558572f2014-11-24 14:31:57 +0100128 "id": 1,
Jamie Hannafordb38dd312014-11-19 13:02:11 +0100129 "name": "default",
130 "rules": [
131 {
132 "from_port": 80,
133 "group": {
134 "tenant_id": "openstack",
135 "name": "default"
136 },
137 "ip_protocol": "TCP",
138 "to_port": 85,
Jamie Hannaford558572f2014-11-24 14:31:57 +0100139 "parent_group_id": 1,
Jamie Hannafordb38dd312014-11-19 13:02:11 +0100140 "ip_range": {
141 "cidr": "0.0.0.0"
142 },
Jamie Hannaford558572f2014-11-24 14:31:57 +0100143 "id": 2
Jamie Hannafordb38dd312014-11-19 13:02:11 +0100144 }
145 ],
146 "tenant_id": "openstack"
147 }
148}
149 `)
150 })
151}
Jamie Hannafordd276e612014-11-19 13:56:28 +0100152
Jamie Hannaford558572f2014-11-24 14:31:57 +0100153func mockDeleteGroupResponse(t *testing.T, groupID int) {
154 url := fmt.Sprintf("%s/%d", rootPath, groupID)
Jamie Hannafordd276e612014-11-19 13:56:28 +0100155 th.Mux.HandleFunc(url, func(w http.ResponseWriter, r *http.Request) {
156 th.TestMethod(t, r, "DELETE")
157 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
158 w.Header().Add("Content-Type", "application/json")
159 w.WriteHeader(http.StatusAccepted)
160 })
161}
Jamie Hannaford8badf1e2014-11-19 14:39:26 +0100162
163func mockAddRuleResponse(t *testing.T) {
164 th.Mux.HandleFunc("/os-security-group-rules", func(w http.ResponseWriter, r *http.Request) {
165 th.TestMethod(t, r, "POST")
166 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
167
168 th.TestJSONRequest(t, r, `
169{
170 "security_group_rule": {
171 "from_port": 22,
172 "ip_protocol": "TCP",
173 "to_port": 22,
Jamie Hannaford558572f2014-11-24 14:31:57 +0100174 "parent_group_id": 1,
Jamie Hannaford8badf1e2014-11-19 14:39:26 +0100175 "cidr": "0.0.0.0/0"
176 }
177} `)
178
179 w.Header().Add("Content-Type", "application/json")
180 w.WriteHeader(http.StatusOK)
181
182 fmt.Fprintf(w, `
183{
184 "security_group_rule": {
185 "from_port": 22,
186 "group": {},
187 "ip_protocol": "TCP",
188 "to_port": 22,
Jamie Hannaford558572f2014-11-24 14:31:57 +0100189 "parent_group_id": 1,
Jamie Hannaford8badf1e2014-11-19 14:39:26 +0100190 "ip_range": {
191 "cidr": "0.0.0.0/0"
192 },
Jamie Hannaford558572f2014-11-24 14:31:57 +0100193 "id": 2
Jamie Hannaford8badf1e2014-11-19 14:39:26 +0100194 }
195}`)
196 })
197}
198
Jamie Hannaford558572f2014-11-24 14:31:57 +0100199func mockDeleteRuleResponse(t *testing.T, ruleID int) {
200 url := fmt.Sprintf("/os-security-group-rules/%d", ruleID)
Jamie Hannaford8badf1e2014-11-19 14:39:26 +0100201 th.Mux.HandleFunc(url, func(w http.ResponseWriter, r *http.Request) {
202 th.TestMethod(t, r, "DELETE")
203 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
204 w.Header().Add("Content-Type", "application/json")
205 w.WriteHeader(http.StatusAccepted)
206 })
207}
Jamie Hannaford740e4a32014-11-19 16:13:30 +0100208
209func mockAddServerToGroupResponse(t *testing.T, serverID string) {
210 url := fmt.Sprintf("/servers/%s/action", serverID)
211 th.Mux.HandleFunc(url, func(w http.ResponseWriter, r *http.Request) {
212 th.TestMethod(t, r, "POST")
213 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
214
215 th.TestJSONRequest(t, r, `
216{
217 "addSecurityGroup": {
218 "name": "test"
219 }
220}
221 `)
222
223 w.Header().Add("Content-Type", "application/json")
Jamie Hannaford5b2feb52014-11-20 12:02:15 +0100224 w.WriteHeader(http.StatusAccepted)
Jamie Hannaford740e4a32014-11-19 16:13:30 +0100225 })
226}
227
228func mockRemoveServerFromGroupResponse(t *testing.T, serverID string) {
229 url := fmt.Sprintf("/servers/%s/action", serverID)
230 th.Mux.HandleFunc(url, func(w http.ResponseWriter, r *http.Request) {
231 th.TestMethod(t, r, "POST")
232 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
233
234 th.TestJSONRequest(t, r, `
235{
Jamie Hannaford334c8752014-11-20 12:05:09 +0100236 "removeSecurityGroup": {
237 "name": "test"
238 }
Jamie Hannaford740e4a32014-11-19 16:13:30 +0100239}
240 `)
241
242 w.Header().Add("Content-Type", "application/json")
Jamie Hannaford5b2feb52014-11-20 12:02:15 +0100243 w.WriteHeader(http.StatusAccepted)
Jamie Hannaford740e4a32014-11-19 16:13:30 +0100244 })
245}