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  }