github.com/gophercloud/gophercloud@v1.11.0/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/gophercloud/gophercloud/openstack/networking/v2/common" 9 "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/fwaas_v2/groups" 10 "github.com/gophercloud/gophercloud/pagination" 11 th "github.com/gophercloud/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 "egress_firewall_policy_id": "43a11f3a-ddac-4129-9469-02b9df26548e", 192 "name": "test" 193 } 194 } 195 `) 196 197 w.Header().Add("Content-Type", "application/json") 198 w.WriteHeader(http.StatusCreated) 199 200 fmt.Fprintf(w, ` 201 { 202 "firewall_group": { 203 "id": "6bfb0f10-07f7-4a40-b534-bad4b4ca3428", 204 "tenant_id": "9f98fc0e5f944cd1b51798b668dc8778", 205 "name": "test", 206 "description": "", 207 "ingress_firewall_policy_id": "e3f11142-3792-454b-8d3e-91ac1bf127b4", 208 "egress_firewall_policy_id": "43a11f3a-ddac-4129-9469-02b9df26548e", 209 "admin_state_up": true, 210 "ports": [ 211 "a6af1e56-b12b-4733-8f77-49166afd5719" 212 ], 213 "status": "CREATED", 214 "shared": false, 215 "project_id": "9f98fc0e5f944cd1b51798b668dc8778" 216 } 217 } 218 `) 219 }) 220 221 options := groups.CreateOpts{ 222 Name: "test", 223 Description: "", 224 IngressFirewallPolicyID: "e3f11142-3792-454b-8d3e-91ac1bf127b4", 225 EgressFirewallPolicyID: "43a11f3a-ddac-4129-9469-02b9df26548e", 226 Ports: []string{ 227 "a6af1e56-b12b-4733-8f77-49166afd5719", 228 }, 229 } 230 231 _, err := groups.Create(fake.ServiceClient(), options).Extract() 232 th.AssertNoErr(t, err) 233 } 234 235 func TestUpdate(t *testing.T) { 236 th.SetupHTTP() 237 defer th.TeardownHTTP() 238 239 th.Mux.HandleFunc("/v2.0/fwaas/firewall_groups/6bfb0f10-07f7-4a40-b534-bad4b4ca3428", func(w http.ResponseWriter, r *http.Request) { 240 th.TestMethod(t, r, "PUT") 241 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID) 242 th.TestHeader(t, r, "Content-Type", "application/json") 243 th.TestHeader(t, r, "Accept", "application/json") 244 th.TestJSONRequest(t, r, ` 245 { 246 "firewall_group":{ 247 "name": "the group", 248 "ports": [ 249 "a6af1e56-b12b-4733-8f77-49166afd5719", 250 "11a58c87-76be-ae7c-a74e-b77fffb88a32" 251 ], 252 "description": "Firewall group", 253 "admin_state_up": false 254 } 255 } 256 `) 257 258 w.Header().Add("Content-Type", "application/json") 259 w.WriteHeader(http.StatusOK) 260 261 fmt.Fprintf(w, ` 262 { 263 "firewall_group": { 264 "id": "6bfb0f10-07f7-4a40-b534-bad4b4ca3428", 265 "tenant_id": "9f98fc0e5f944cd1b51798b668dc8778", 266 "name": "test", 267 "description": "some information", 268 "ingress_firewall_policy_id": "e3f11142-3792-454b-8d3e-91ac1bf127b4", 269 "egress_firewall_policy_id": "43a11f3a-ddac-4129-9469-02b9df26548e", 270 "admin_state_up": true, 271 "ports": [ 272 "a6af1e56-b12b-4733-8f77-49166afd5719", 273 "11a58c87-76be-ae7c-a74e-b77fffb88a32" 274 ], 275 "status": "ACTIVE", 276 "shared": false, 277 "project_id": "9f98fc0e5f944cd1b51798b668dc8778" 278 } 279 } 280 `) 281 }) 282 283 name := "the group" 284 description := "Firewall group" 285 adminStateUp := false 286 options := groups.UpdateOpts{ 287 Name: &name, 288 Description: &description, 289 Ports: &[]string{ 290 "a6af1e56-b12b-4733-8f77-49166afd5719", 291 "11a58c87-76be-ae7c-a74e-b77fffb88a32", 292 }, 293 AdminStateUp: &adminStateUp, 294 } 295 296 _, err := groups.Update(fake.ServiceClient(), "6bfb0f10-07f7-4a40-b534-bad4b4ca3428", options).Extract() 297 th.AssertNoErr(t, err) 298 } 299 300 func TestRemoveIngressPolicy(t *testing.T) { 301 th.SetupHTTP() 302 defer th.TeardownHTTP() 303 304 th.Mux.HandleFunc("/v2.0/fwaas/firewall_groups/6bfb0f10-07f7-4a40-b534-bad4b4ca3428", func(w http.ResponseWriter, r *http.Request) { 305 th.TestMethod(t, r, "PUT") 306 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID) 307 th.TestHeader(t, r, "Content-Type", "application/json") 308 th.TestHeader(t, r, "Accept", "application/json") 309 th.TestJSONRequest(t, r, ` 310 { 311 "firewall_group":{ 312 "ingress_firewall_policy_id": null 313 } 314 } 315 `) 316 317 w.Header().Add("Content-Type", "application/json") 318 w.WriteHeader(http.StatusOK) 319 320 fmt.Fprintf(w, ` 321 { 322 "firewall_group": { 323 "id": "6bfb0f10-07f7-4a40-b534-bad4b4ca3428", 324 "tenant_id": "9f98fc0e5f944cd1b51798b668dc8778", 325 "name": "test", 326 "description": "some information", 327 "ingress_firewall_policy_id": null, 328 "egress_firewall_policy_id": "43a11f3a-ddac-4129-9469-02b9df26548e", 329 "admin_state_up": true, 330 "ports": [ 331 "a6af1e56-b12b-4733-8f77-49166afd5719", 332 "11a58c87-76be-ae7c-a74e-b77fffb88a32" 333 ], 334 "status": "ACTIVE", 335 "shared": false, 336 "project_id": "9f98fc0e5f944cd1b51798b668dc8778" 337 } 338 } 339 `) 340 }) 341 342 removeIngressPolicy, err := groups.RemoveIngressPolicy(fake.ServiceClient(), "6bfb0f10-07f7-4a40-b534-bad4b4ca3428").Extract() 343 th.AssertNoErr(t, err) 344 th.AssertEquals(t, removeIngressPolicy.IngressFirewallPolicyID, "") 345 th.AssertEquals(t, removeIngressPolicy.EgressFirewallPolicyID, "43a11f3a-ddac-4129-9469-02b9df26548e") 346 } 347 348 func TestRemoveEgressPolicy(t *testing.T) { 349 th.SetupHTTP() 350 defer th.TeardownHTTP() 351 352 th.Mux.HandleFunc("/v2.0/fwaas/firewall_groups/6bfb0f10-07f7-4a40-b534-bad4b4ca3428", func(w http.ResponseWriter, r *http.Request) { 353 th.TestMethod(t, r, "PUT") 354 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID) 355 th.TestHeader(t, r, "Content-Type", "application/json") 356 th.TestHeader(t, r, "Accept", "application/json") 357 th.TestJSONRequest(t, r, ` 358 { 359 "firewall_group":{ 360 "egress_firewall_policy_id": null 361 } 362 } 363 `) 364 365 w.Header().Add("Content-Type", "application/json") 366 w.WriteHeader(http.StatusOK) 367 368 fmt.Fprintf(w, ` 369 { 370 "firewall_group": { 371 "id": "6bfb0f10-07f7-4a40-b534-bad4b4ca3428", 372 "tenant_id": "9f98fc0e5f944cd1b51798b668dc8778", 373 "name": "test", 374 "description": "some information", 375 "ingress_firewall_policy_id": "e3f11142-3792-454b-8d3e-91ac1bf127b4", 376 "egress_firewall_policy_id": null, 377 "admin_state_up": true, 378 "ports": [ 379 "a6af1e56-b12b-4733-8f77-49166afd5719", 380 "11a58c87-76be-ae7c-a74e-b77fffb88a32" 381 ], 382 "status": "ACTIVE", 383 "shared": false, 384 "project_id": "9f98fc0e5f944cd1b51798b668dc8778" 385 } 386 } 387 `) 388 }) 389 390 removeEgressPolicy, err := groups.RemoveEgressPolicy(fake.ServiceClient(), "6bfb0f10-07f7-4a40-b534-bad4b4ca3428").Extract() 391 th.AssertNoErr(t, err) 392 th.AssertEquals(t, removeEgressPolicy.IngressFirewallPolicyID, "e3f11142-3792-454b-8d3e-91ac1bf127b4") 393 th.AssertEquals(t, removeEgressPolicy.EgressFirewallPolicyID, "") 394 } 395 396 func TestDelete(t *testing.T) { 397 th.SetupHTTP() 398 defer th.TeardownHTTP() 399 400 th.Mux.HandleFunc("/v2.0/fwaas/firewall_groups/4ec89077-d057-4a2b-911f-60a3b47ee304", func(w http.ResponseWriter, r *http.Request) { 401 th.TestMethod(t, r, "DELETE") 402 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID) 403 w.WriteHeader(http.StatusNoContent) 404 }) 405 406 res := groups.Delete(fake.ServiceClient(), "4ec89077-d057-4a2b-911f-60a3b47ee304") 407 th.AssertNoErr(t, res.Err) 408 }