blob: 519bc7404f644c47eccf9df0e3030a3498b1f6e6 [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{
16 "security_groups": [
17 {
18 "description": "default",
19 "id": "b0e0d7dd-2ca4-49a9-ba82-c44a148b66a5",
20 "name": "default",
21 "rules": [],
22 "tenant_id": "openstack"
23 }
24 ]
25}
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",
74 "id": "b0e0d7dd-2ca4-49a9-ba82-c44a148b66a5",
75 "name": "test",
76 "rules": [],
77 "tenant_id": "openstack"
78 }
79}
80`)
81 })
82}
Jamie Hannafordb38dd312014-11-19 13:02:11 +010083
84func mockGetGroupsResponse(t *testing.T, groupID string) {
85 url := fmt.Sprintf("%s/%s", rootPath, groupID)
86 th.Mux.HandleFunc(url, func(w http.ResponseWriter, r *http.Request) {
87 th.TestMethod(t, r, "GET")
88 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
89
90 w.Header().Add("Content-Type", "application/json")
91 w.WriteHeader(http.StatusOK)
92
93 fmt.Fprintf(w, `
94{
95 "security_group": {
96 "description": "default",
97 "id": "b0e0d7dd-2ca4-49a9-ba82-c44a148b66a5",
98 "name": "default",
99 "rules": [
100 {
101 "from_port": 80,
102 "group": {
103 "tenant_id": "openstack",
104 "name": "default"
105 },
106 "ip_protocol": "TCP",
107 "to_port": 85,
108 "parent_group_id": "b0e0d7dd-2ca4-49a9-ba82-c44a148b66a5",
109 "ip_range": {
110 "cidr": "0.0.0.0"
111 },
112 "id": "ebe599e2-6b8c-457c-b1ff-a75e48f10923"
113 }
114 ],
115 "tenant_id": "openstack"
116 }
117}
118 `)
119 })
120}
Jamie Hannafordd276e612014-11-19 13:56:28 +0100121
122func mockDeleteGroupResponse(t *testing.T, groupID string) {
123 url := fmt.Sprintf("%s/%s", rootPath, groupID)
124 th.Mux.HandleFunc(url, func(w http.ResponseWriter, r *http.Request) {
125 th.TestMethod(t, r, "DELETE")
126 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
127 w.Header().Add("Content-Type", "application/json")
128 w.WriteHeader(http.StatusAccepted)
129 })
130}
Jamie Hannaford8badf1e2014-11-19 14:39:26 +0100131
132func mockAddRuleResponse(t *testing.T) {
133 th.Mux.HandleFunc("/os-security-group-rules", func(w http.ResponseWriter, r *http.Request) {
134 th.TestMethod(t, r, "POST")
135 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
136
137 th.TestJSONRequest(t, r, `
138{
139 "security_group_rule": {
140 "from_port": 22,
141 "ip_protocol": "TCP",
142 "to_port": 22,
143 "parent_group_id": "b0e0d7dd-2ca4-49a9-ba82-c44a148b66a5",
144 "cidr": "0.0.0.0/0"
145 }
146} `)
147
148 w.Header().Add("Content-Type", "application/json")
149 w.WriteHeader(http.StatusOK)
150
151 fmt.Fprintf(w, `
152{
153 "security_group_rule": {
154 "from_port": 22,
155 "group": {},
156 "ip_protocol": "TCP",
157 "to_port": 22,
158 "parent_group_id": "b0e0d7dd-2ca4-49a9-ba82-c44a148b66a5",
159 "ip_range": {
160 "cidr": "0.0.0.0/0"
161 },
162 "id": "f9a97fcf-3a97-47b0-b76f-919136afb7ed"
163 }
164}`)
165 })
166}
167
168func mockDeleteRuleResponse(t *testing.T, ruleID string) {
169 url := fmt.Sprintf("/os-security-group-rules/%s", ruleID)
170 th.Mux.HandleFunc(url, func(w http.ResponseWriter, r *http.Request) {
171 th.TestMethod(t, r, "DELETE")
172 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
173 w.Header().Add("Content-Type", "application/json")
174 w.WriteHeader(http.StatusAccepted)
175 })
176}