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  }