github.com/leeclow-ops/gophercloud@v1.2.1/openstack/networking/v2/extensions/fwaas_v2/groups/testing/requests_test.go (about) 1 package testing 2 3 import ( 4 "fmt" 5 "net/http" 6 "testing" 7 8 fake "github.com/leeclow-ops/gophercloud/openstack/networking/v2/common" 9 "github.com/leeclow-ops/gophercloud/openstack/networking/v2/extensions/fwaas_v2/groups" 10 "github.com/leeclow-ops/gophercloud/pagination" 11 th "github.com/leeclow-ops/gophercloud/testhelper" 12 ) 13 14 func TestList(t *testing.T) { 15 th.SetupHTTP() 16 defer th.TeardownHTTP() 17 18 th.Mux.HandleFunc("/v2.0/fwaas/firewall_groups", func(w http.ResponseWriter, r *http.Request) { 19 th.TestMethod(t, r, "GET") 20 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID) 21 22 w.Header().Add("Content-Type", "application/json") 23 w.WriteHeader(http.StatusOK) 24 25 fmt.Fprintf(w, ` 26 { 27 "firewall_groups": [ 28 { 29 "id": "3af94f0e-b52d-491a-87d2-704497305948", 30 "tenant_id": "9f98fc0e5f944cd1b51798b668dc8778", 31 "name": "test", 32 "description": "fancy group", 33 "ingress_firewall_policy_id": "e3f11142-3792-454b-8d3e-91ac1bf127b4", 34 "egress_firewall_policy_id": null, 35 "admin_state_up": true, 36 "ports": [ 37 "a6af1e56-b12b-4733-8f77-49166afd5719" 38 ], 39 "status": "ACTIVE", 40 "shared": false, 41 "project_id": "9f98fc0e5f944cd1b51798b668dc8778" 42 }, 43 { 44 "id": "f9fbb80c-eeb4-4f3f-aa50-1032960c08ea", 45 "tenant_id": "9f98fc0e5f944cd1b51798b668dc8778", 46 "name": "default", 47 "description": "Default firewall group", 48 "ingress_firewall_policy_id": "90e3fcac-3bfb-48f9-8e91-2a78fb352b92", 49 "egress_firewall_policy_id": "122fb344-3c28-49f0-af00-f7fcbc88330b", 50 "admin_state_up": true, 51 "ports": [ 52 "20da216c-bab3-4cf6-bd6b-8904b133a816", 53 "4f4c714c-185f-487e-998c-c1a35da3c4f4", 54 "681b1db4-40ca-4314-b098-d2f43225e7f7", 55 "82f9d868-6f56-44fb-9684-654dc473bed0", 56 "a5858b5d-20dc-4bb1-9f95-1d322c8bb81b", 57 "d25a04a2-447b-4ee1-80d7-b32967dbb643" 58 ], 59 "status": "ACTIVE", 60 "shared": false, 61 "project_id": "9f98fc0e5f944cd1b51798b668dc8778" 62 } 63 ] 64 } 65 `) 66 }) 67 68 count := 0 69 70 groups.List(fake.ServiceClient(), groups.ListOpts{}).EachPage(func(page pagination.Page) (bool, error) { 71 count++ 72 actual, err := groups.ExtractGroups(page) 73 if err != nil { 74 t.Errorf("Failed to extract members: %v", err) 75 return false, err 76 } 77 78 expected := []groups.Group{ 79 { 80 ID: "3af94f0e-b52d-491a-87d2-704497305948", 81 TenantID: "9f98fc0e5f944cd1b51798b668dc8778", 82 Name: "test", 83 Description: "fancy group", 84 IngressFirewallPolicyID: "e3f11142-3792-454b-8d3e-91ac1bf127b4", 85 EgressFirewallPolicyID: "", 86 AdminStateUp: true, 87 Ports: []string{ 88 "a6af1e56-b12b-4733-8f77-49166afd5719", 89 }, 90 Status: "ACTIVE", 91 Shared: false, 92 ProjectID: "9f98fc0e5f944cd1b51798b668dc8778", 93 }, 94 { 95 ID: "f9fbb80c-eeb4-4f3f-aa50-1032960c08ea", 96 TenantID: "9f98fc0e5f944cd1b51798b668dc8778", 97 Name: "default", 98 Description: "Default firewall group", 99 IngressFirewallPolicyID: "90e3fcac-3bfb-48f9-8e91-2a78fb352b92", 100 EgressFirewallPolicyID: "122fb344-3c28-49f0-af00-f7fcbc88330b", 101 AdminStateUp: true, 102 Ports: []string{ 103 "20da216c-bab3-4cf6-bd6b-8904b133a816", 104 "4f4c714c-185f-487e-998c-c1a35da3c4f4", 105 "681b1db4-40ca-4314-b098-d2f43225e7f7", 106 "82f9d868-6f56-44fb-9684-654dc473bed0", 107 "a5858b5d-20dc-4bb1-9f95-1d322c8bb81b", 108 "d25a04a2-447b-4ee1-80d7-b32967dbb643", 109 }, 110 Status: "ACTIVE", 111 Shared: false, 112 ProjectID: "9f98fc0e5f944cd1b51798b668dc8778", 113 }, 114 } 115 116 th.CheckDeepEquals(t, expected, actual) 117 118 return true, nil 119 }) 120 121 if count != 1 { 122 t.Errorf("Expected 1 page, got %d", count) 123 } 124 } 125 126 func TestGet(t *testing.T) { 127 th.SetupHTTP() 128 defer th.TeardownHTTP() 129 130 th.Mux.HandleFunc("/v2.0/fwaas/firewall_groups/6bfb0f10-07f7-4a40-b534-bad4b4ca3428", func(w http.ResponseWriter, r *http.Request) { 131 th.TestMethod(t, r, "GET") 132 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID) 133 134 w.Header().Add("Content-Type", "application/json") 135 w.WriteHeader(http.StatusOK) 136 137 fmt.Fprintf(w, ` 138 { 139 "firewall_group": { 140 "id": "6bfb0f10-07f7-4a40-b534-bad4b4ca3428", 141 "tenant_id": "9f98fc0e5f944cd1b51798b668dc8778", 142 "name": "test", 143 "description": "some information", 144 "ingress_firewall_policy_id": "e3f11142-3792-454b-8d3e-91ac1bf127b4", 145 "egress_firewall_policy_id": null, 146 "admin_state_up": true, 147 "ports": [ 148 "a6af1e56-b12b-4733-8f77-49166afd5719" 149 ], 150 "status": "ACTIVE", 151 "shared": false, 152 "project_id": "9f98fc0e5f944cd1b51798b668dc8778" 153 } 154 } 155 `) 156 }) 157 158 group, err := groups.Get(fake.ServiceClient(), "6bfb0f10-07f7-4a40-b534-bad4b4ca3428").Extract() 159 th.AssertNoErr(t, err) 160 161 th.AssertEquals(t, "6bfb0f10-07f7-4a40-b534-bad4b4ca3428", group.ID) 162 th.AssertEquals(t, "9f98fc0e5f944cd1b51798b668dc8778", group.TenantID) 163 th.AssertEquals(t, "test", group.Name) 164 th.AssertEquals(t, "some information", group.Description) 165 th.AssertEquals(t, "e3f11142-3792-454b-8d3e-91ac1bf127b4", group.IngressFirewallPolicyID) 166 th.AssertEquals(t, "", group.EgressFirewallPolicyID) 167 th.AssertEquals(t, true, group.AdminStateUp) 168 th.AssertEquals(t, 1, len(group.Ports)) 169 th.AssertEquals(t, "a6af1e56-b12b-4733-8f77-49166afd5719", group.Ports[0]) 170 th.AssertEquals(t, "ACTIVE", group.Status) 171 th.AssertEquals(t, false, group.Shared) 172 th.AssertEquals(t, "9f98fc0e5f944cd1b51798b668dc8778", group.TenantID) 173 } 174 175 func TestCreate(t *testing.T) { 176 th.SetupHTTP() 177 defer th.TeardownHTTP() 178 179 th.Mux.HandleFunc("/v2.0/fwaas/firewall_groups", func(w http.ResponseWriter, r *http.Request) { 180 th.TestMethod(t, r, "POST") 181 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID) 182 th.TestHeader(t, r, "Content-Type", "application/json") 183 th.TestHeader(t, r, "Accept", "application/json") 184 th.TestJSONRequest(t, r, ` 185 { 186 "firewall_group": { 187 "ports": [ 188 "a6af1e56-b12b-4733-8f77-49166afd5719" 189 ], 190 "ingress_firewall_policy_id": "e3f11142-3792-454b-8d3e-91ac1bf127b4", 191 "name": "test" 192 } 193 } 194 `) 195 196 w.Header().Add("Content-Type", "application/json") 197 w.WriteHeader(http.StatusCreated) 198 199 fmt.Fprintf(w, ` 200 { 201 "firewall_group": { 202 "id": "6bfb0f10-07f7-4a40-b534-bad4b4ca3428", 203 "tenant_id": "9f98fc0e5f944cd1b51798b668dc8778", 204 "name": "test", 205 "description": "", 206 "ingress_firewall_policy_id": "e3f11142-3792-454b-8d3e-91ac1bf127b4", 207 "egress_firewall_policy_id": null, 208 "admin_state_up": true, 209 "ports": [ 210 "a6af1e56-b12b-4733-8f77-49166afd5719" 211 ], 212 "status": "CREATED", 213 "shared": false, 214 "project_id": "9f98fc0e5f944cd1b51798b668dc8778" 215 } 216 } 217 `) 218 }) 219 220 options := groups.CreateOpts{ 221 Name: "test", 222 Description: "", 223 IngressFirewallPolicyID: "e3f11142-3792-454b-8d3e-91ac1bf127b4", 224 Ports: []string{ 225 "a6af1e56-b12b-4733-8f77-49166afd5719", 226 }, 227 } 228 229 _, err := groups.Create(fake.ServiceClient(), options).Extract() 230 th.AssertNoErr(t, err) 231 } 232 233 func TestUpdate(t *testing.T) { 234 th.SetupHTTP() 235 defer th.TeardownHTTP() 236 237 th.Mux.HandleFunc("/v2.0/fwaas/firewall_groups/6bfb0f10-07f7-4a40-b534-bad4b4ca3428", func(w http.ResponseWriter, r *http.Request) { 238 th.TestMethod(t, r, "PUT") 239 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID) 240 th.TestHeader(t, r, "Content-Type", "application/json") 241 th.TestHeader(t, r, "Accept", "application/json") 242 th.TestJSONRequest(t, r, ` 243 { 244 "firewall_group":{ 245 "name": "the group", 246 "ports": [ 247 "a6af1e56-b12b-4733-8f77-49166afd5719", 248 "11a58c87-76be-ae7c-a74e-b77fffb88a32" 249 ], 250 "description": "Firewall group", 251 "admin_state_up": false 252 } 253 } 254 `) 255 256 w.Header().Add("Content-Type", "application/json") 257 w.WriteHeader(http.StatusOK) 258 259 fmt.Fprintf(w, ` 260 { 261 "firewall_group": { 262 "id": "6bfb0f10-07f7-4a40-b534-bad4b4ca3428", 263 "tenant_id": "9f98fc0e5f944cd1b51798b668dc8778", 264 "name": "test", 265 "description": "some information", 266 "ingress_firewall_policy_id": "e3f11142-3792-454b-8d3e-91ac1bf127b4", 267 "egress_firewall_policy_id": null, 268 "admin_state_up": true, 269 "ports": [ 270 "a6af1e56-b12b-4733-8f77-49166afd5719", 271 "11a58c87-76be-ae7c-a74e-b77fffb88a32" 272 ], 273 "status": "ACTIVE", 274 "shared": false, 275 "project_id": "9f98fc0e5f944cd1b51798b668dc8778" 276 } 277 } 278 `) 279 }) 280 281 name := "the group" 282 description := "Firewall group" 283 adminStateUp := false 284 options := groups.UpdateOpts{ 285 Name: &name, 286 Description: &description, 287 Ports: &[]string{ 288 "a6af1e56-b12b-4733-8f77-49166afd5719", 289 "11a58c87-76be-ae7c-a74e-b77fffb88a32", 290 }, 291 AdminStateUp: &adminStateUp, 292 } 293 294 _, err := groups.Update(fake.ServiceClient(), "6bfb0f10-07f7-4a40-b534-bad4b4ca3428", options).Extract() 295 th.AssertNoErr(t, err) 296 } 297 298 func TestDelete(t *testing.T) { 299 th.SetupHTTP() 300 defer th.TeardownHTTP() 301 302 th.Mux.HandleFunc("/v2.0/fwaas/firewall_groups/4ec89077-d057-4a2b-911f-60a3b47ee304", func(w http.ResponseWriter, r *http.Request) { 303 th.TestMethod(t, r, "DELETE") 304 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID) 305 w.WriteHeader(http.StatusNoContent) 306 }) 307 308 res := groups.Delete(fake.ServiceClient(), "4ec89077-d057-4a2b-911f-60a3b47ee304") 309 th.AssertNoErr(t, res.Err) 310 }