github.com/vnpaycloud-console/gophercloud/v2@v2.0.5/openstack/networking/v2/networks/testing/requests_test.go (about)

     1  package testing
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"net/http"
     7  	"testing"
     8  	"time"
     9  
    10  	fake "github.com/vnpaycloud-console/gophercloud/v2/openstack/networking/v2/common"
    11  	"github.com/vnpaycloud-console/gophercloud/v2/openstack/networking/v2/extensions/portsecurity"
    12  	"github.com/vnpaycloud-console/gophercloud/v2/openstack/networking/v2/networks"
    13  	"github.com/vnpaycloud-console/gophercloud/v2/pagination"
    14  	th "github.com/vnpaycloud-console/gophercloud/v2/testhelper"
    15  )
    16  
    17  func TestList(t *testing.T) {
    18  	th.SetupHTTP()
    19  	defer th.TeardownHTTP()
    20  
    21  	th.Mux.HandleFunc("/v2.0/networks", func(w http.ResponseWriter, r *http.Request) {
    22  		th.TestMethod(t, r, "GET")
    23  		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
    24  
    25  		w.Header().Add("Content-Type", "application/json")
    26  		w.WriteHeader(http.StatusOK)
    27  
    28  		fmt.Fprint(w, ListResponse)
    29  	})
    30  
    31  	client := fake.ServiceClient()
    32  	count := 0
    33  
    34  	err := networks.List(client, networks.ListOpts{}).EachPage(context.TODO(), func(_ context.Context, page pagination.Page) (bool, error) {
    35  		count++
    36  		actual, err := networks.ExtractNetworks(page)
    37  		if err != nil {
    38  			t.Errorf("Failed to extract networks: %v", err)
    39  			return false, err
    40  		}
    41  
    42  		th.CheckDeepEquals(t, ExpectedNetworkSlice, actual)
    43  
    44  		return true, nil
    45  	})
    46  
    47  	th.AssertNoErr(t, err)
    48  
    49  	if count != 1 {
    50  		t.Errorf("Expected 1 page, got %d", count)
    51  	}
    52  }
    53  
    54  func TestListWithExtensions(t *testing.T) {
    55  	th.SetupHTTP()
    56  	defer th.TeardownHTTP()
    57  
    58  	th.Mux.HandleFunc("/v2.0/networks", func(w http.ResponseWriter, r *http.Request) {
    59  		th.TestMethod(t, r, "GET")
    60  		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
    61  
    62  		w.Header().Add("Content-Type", "application/json")
    63  		w.WriteHeader(http.StatusOK)
    64  
    65  		fmt.Fprint(w, ListResponse)
    66  	})
    67  
    68  	client := fake.ServiceClient()
    69  
    70  	type networkWithExt struct {
    71  		networks.Network
    72  		portsecurity.PortSecurityExt
    73  	}
    74  
    75  	var allNetworks []networkWithExt
    76  
    77  	allPages, err := networks.List(client, networks.ListOpts{}).AllPages(context.TODO())
    78  	th.AssertNoErr(t, err)
    79  
    80  	err = networks.ExtractNetworksInto(allPages, &allNetworks)
    81  	th.AssertNoErr(t, err)
    82  
    83  	th.AssertEquals(t, allNetworks[0].Status, "ACTIVE")
    84  	th.AssertEquals(t, allNetworks[0].PortSecurityEnabled, true)
    85  	th.AssertEquals(t, allNetworks[0].Subnets[0], "54d6f61d-db07-451c-9ab3-b9609b6b6f0b")
    86  	th.AssertEquals(t, allNetworks[1].Subnets[0], "08eae331-0402-425a-923c-34f7cfe39c1b")
    87  	th.AssertEquals(t, allNetworks[0].CreatedAt.Format(time.RFC3339), "2019-06-30T04:15:37Z")
    88  	th.AssertEquals(t, allNetworks[0].UpdatedAt.Format(time.RFC3339), "2019-06-30T05:18:49Z")
    89  	th.AssertEquals(t, allNetworks[1].CreatedAt.Format(time.RFC3339), "2019-06-30T04:15:37Z")
    90  	th.AssertEquals(t, allNetworks[1].UpdatedAt.Format(time.RFC3339), "2019-06-30T05:18:49Z")
    91  }
    92  
    93  func TestGet(t *testing.T) {
    94  	th.SetupHTTP()
    95  	defer th.TeardownHTTP()
    96  
    97  	th.Mux.HandleFunc("/v2.0/networks/d32019d3-bc6e-4319-9c1d-6722fc136a22", func(w http.ResponseWriter, r *http.Request) {
    98  		th.TestMethod(t, r, "GET")
    99  		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
   100  
   101  		w.Header().Add("Content-Type", "application/json")
   102  		w.WriteHeader(http.StatusOK)
   103  
   104  		fmt.Fprint(w, GetResponse)
   105  	})
   106  
   107  	n, err := networks.Get(context.TODO(), fake.ServiceClient(), "d32019d3-bc6e-4319-9c1d-6722fc136a22").Extract()
   108  	th.AssertNoErr(t, err)
   109  	th.CheckDeepEquals(t, &Network1, n)
   110  	th.AssertEquals(t, n.CreatedAt.Format(time.RFC3339), "2019-06-30T04:15:37Z")
   111  	th.AssertEquals(t, n.UpdatedAt.Format(time.RFC3339), "2019-06-30T05:18:49Z")
   112  }
   113  
   114  func TestGetWithExtensions(t *testing.T) {
   115  	th.SetupHTTP()
   116  	defer th.TeardownHTTP()
   117  
   118  	th.Mux.HandleFunc("/v2.0/networks/d32019d3-bc6e-4319-9c1d-6722fc136a22", func(w http.ResponseWriter, r *http.Request) {
   119  		th.TestMethod(t, r, "GET")
   120  		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
   121  
   122  		w.Header().Add("Content-Type", "application/json")
   123  		w.WriteHeader(http.StatusOK)
   124  
   125  		fmt.Fprint(w, GetResponse)
   126  	})
   127  
   128  	var networkWithExtensions struct {
   129  		networks.Network
   130  		portsecurity.PortSecurityExt
   131  	}
   132  
   133  	err := networks.Get(context.TODO(), fake.ServiceClient(), "d32019d3-bc6e-4319-9c1d-6722fc136a22").ExtractInto(&networkWithExtensions)
   134  	th.AssertNoErr(t, err)
   135  
   136  	th.AssertEquals(t, networkWithExtensions.Status, "ACTIVE")
   137  	th.AssertEquals(t, networkWithExtensions.PortSecurityEnabled, true)
   138  }
   139  
   140  func TestCreate(t *testing.T) {
   141  	th.SetupHTTP()
   142  	defer th.TeardownHTTP()
   143  
   144  	th.Mux.HandleFunc("/v2.0/networks", func(w http.ResponseWriter, r *http.Request) {
   145  		th.TestMethod(t, r, "POST")
   146  		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
   147  		th.TestHeader(t, r, "Content-Type", "application/json")
   148  		th.TestHeader(t, r, "Accept", "application/json")
   149  		th.TestJSONRequest(t, r, CreateRequest)
   150  		w.Header().Add("Content-Type", "application/json")
   151  		w.WriteHeader(http.StatusCreated)
   152  
   153  		fmt.Fprint(w, CreateResponse)
   154  	})
   155  
   156  	iTrue := true
   157  	options := networks.CreateOpts{Name: "private", AdminStateUp: &iTrue}
   158  	n, err := networks.Create(context.TODO(), fake.ServiceClient(), options).Extract()
   159  	th.AssertNoErr(t, err)
   160  
   161  	th.AssertEquals(t, n.Status, "ACTIVE")
   162  	th.AssertDeepEquals(t, &Network2, n)
   163  	th.AssertEquals(t, n.CreatedAt.Format(time.RFC3339), "2019-06-30T04:15:37Z")
   164  	th.AssertEquals(t, n.UpdatedAt.Format(time.RFC3339), "2019-06-30T05:18:49Z")
   165  }
   166  
   167  func TestCreateWithOptionalFields(t *testing.T) {
   168  	th.SetupHTTP()
   169  	defer th.TeardownHTTP()
   170  
   171  	th.Mux.HandleFunc("/v2.0/networks", func(w http.ResponseWriter, r *http.Request) {
   172  		th.TestMethod(t, r, "POST")
   173  		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
   174  		th.TestHeader(t, r, "Content-Type", "application/json")
   175  		th.TestHeader(t, r, "Accept", "application/json")
   176  		th.TestJSONRequest(t, r, CreateOptionalFieldsRequest)
   177  
   178  		w.WriteHeader(http.StatusCreated)
   179  		fmt.Fprint(w, `{}`)
   180  	})
   181  
   182  	iTrue := true
   183  	options := networks.CreateOpts{
   184  		Name:                  "public",
   185  		AdminStateUp:          &iTrue,
   186  		Shared:                &iTrue,
   187  		TenantID:              "12345",
   188  		AvailabilityZoneHints: []string{"zone1", "zone2"},
   189  	}
   190  	_, err := networks.Create(context.TODO(), fake.ServiceClient(), options).Extract()
   191  	th.AssertNoErr(t, err)
   192  }
   193  
   194  func TestUpdate(t *testing.T) {
   195  	th.SetupHTTP()
   196  	defer th.TeardownHTTP()
   197  
   198  	th.Mux.HandleFunc("/v2.0/networks/4e8e5957-649f-477b-9e5b-f1f75b21c03c", func(w http.ResponseWriter, r *http.Request) {
   199  		th.TestMethod(t, r, "PUT")
   200  		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
   201  		th.TestHeader(t, r, "Content-Type", "application/json")
   202  		th.TestHeader(t, r, "Accept", "application/json")
   203  		th.TestJSONRequest(t, r, UpdateRequest)
   204  
   205  		w.Header().Add("Content-Type", "application/json")
   206  		w.WriteHeader(http.StatusOK)
   207  
   208  		fmt.Fprint(w, UpdateResponse)
   209  	})
   210  
   211  	iTrue, iFalse := true, false
   212  	name := "new_network_name"
   213  	options := networks.UpdateOpts{Name: &name, AdminStateUp: &iFalse, Shared: &iTrue}
   214  	n, err := networks.Update(context.TODO(), fake.ServiceClient(), "4e8e5957-649f-477b-9e5b-f1f75b21c03c", options).Extract()
   215  	th.AssertNoErr(t, err)
   216  
   217  	th.AssertEquals(t, n.Name, "new_network_name")
   218  	th.AssertEquals(t, n.AdminStateUp, false)
   219  	th.AssertEquals(t, n.Shared, true)
   220  	th.AssertEquals(t, n.ID, "4e8e5957-649f-477b-9e5b-f1f75b21c03c")
   221  	th.AssertEquals(t, n.CreatedAt.Format(time.RFC3339), "2019-06-30T04:15:37Z")
   222  	th.AssertEquals(t, n.UpdatedAt.Format(time.RFC3339), "2019-06-30T05:18:49Z")
   223  }
   224  
   225  func TestUpdateRevision(t *testing.T) {
   226  	th.SetupHTTP()
   227  	defer th.TeardownHTTP()
   228  
   229  	th.Mux.HandleFunc("/v2.0/networks/4e8e5957-649f-477b-9e5b-f1f75b21c03c", func(w http.ResponseWriter, r *http.Request) {
   230  		th.TestMethod(t, r, "PUT")
   231  		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
   232  		th.TestHeader(t, r, "Content-Type", "application/json")
   233  		th.TestHeader(t, r, "Accept", "application/json")
   234  		th.TestHeaderUnset(t, r, "If-Match")
   235  		th.TestJSONRequest(t, r, UpdateRequest)
   236  
   237  		w.Header().Add("Content-Type", "application/json")
   238  		w.WriteHeader(http.StatusOK)
   239  
   240  		fmt.Fprint(w, UpdateResponse)
   241  	})
   242  
   243  	th.Mux.HandleFunc("/v2.0/networks/4e8e5957-649f-477b-9e5b-f1f75b21c03d", func(w http.ResponseWriter, r *http.Request) {
   244  		th.TestMethod(t, r, "PUT")
   245  		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
   246  		th.TestHeader(t, r, "Content-Type", "application/json")
   247  		th.TestHeader(t, r, "Accept", "application/json")
   248  		th.TestHeader(t, r, "If-Match", "revision_number=42")
   249  		th.TestJSONRequest(t, r, UpdateRequest)
   250  
   251  		w.Header().Add("Content-Type", "application/json")
   252  		w.WriteHeader(http.StatusOK)
   253  
   254  		fmt.Fprint(w, UpdateResponse)
   255  	})
   256  
   257  	iTrue, iFalse := true, false
   258  	name := "new_network_name"
   259  	options := networks.UpdateOpts{Name: &name, AdminStateUp: &iFalse, Shared: &iTrue}
   260  	_, err := networks.Update(context.TODO(), fake.ServiceClient(), "4e8e5957-649f-477b-9e5b-f1f75b21c03c", options).Extract()
   261  	th.AssertNoErr(t, err)
   262  
   263  	revisionNumber := 42
   264  	options.RevisionNumber = &revisionNumber
   265  	_, err = networks.Update(context.TODO(), fake.ServiceClient(), "4e8e5957-649f-477b-9e5b-f1f75b21c03d", options).Extract()
   266  	th.AssertNoErr(t, err)
   267  }
   268  
   269  func TestDelete(t *testing.T) {
   270  	th.SetupHTTP()
   271  	defer th.TeardownHTTP()
   272  
   273  	th.Mux.HandleFunc("/v2.0/networks/4e8e5957-649f-477b-9e5b-f1f75b21c03c", func(w http.ResponseWriter, r *http.Request) {
   274  		th.TestMethod(t, r, "DELETE")
   275  		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
   276  		w.WriteHeader(http.StatusNoContent)
   277  	})
   278  
   279  	res := networks.Delete(context.TODO(), fake.ServiceClient(), "4e8e5957-649f-477b-9e5b-f1f75b21c03c")
   280  	th.AssertNoErr(t, res.Err)
   281  }
   282  
   283  func TestCreatePortSecurity(t *testing.T) {
   284  	th.SetupHTTP()
   285  	defer th.TeardownHTTP()
   286  
   287  	th.Mux.HandleFunc("/v2.0/networks", func(w http.ResponseWriter, r *http.Request) {
   288  		th.TestMethod(t, r, "POST")
   289  		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
   290  		th.TestHeader(t, r, "Content-Type", "application/json")
   291  		th.TestHeader(t, r, "Accept", "application/json")
   292  		th.TestJSONRequest(t, r, CreatePortSecurityRequest)
   293  		w.Header().Add("Content-Type", "application/json")
   294  		w.WriteHeader(http.StatusCreated)
   295  
   296  		fmt.Fprint(w, CreatePortSecurityResponse)
   297  	})
   298  
   299  	var networkWithExtensions struct {
   300  		networks.Network
   301  		portsecurity.PortSecurityExt
   302  	}
   303  
   304  	iTrue := true
   305  	iFalse := false
   306  	networkCreateOpts := networks.CreateOpts{Name: "private", AdminStateUp: &iTrue}
   307  	createOpts := portsecurity.NetworkCreateOptsExt{
   308  		CreateOptsBuilder:   networkCreateOpts,
   309  		PortSecurityEnabled: &iFalse,
   310  	}
   311  
   312  	err := networks.Create(context.TODO(), fake.ServiceClient(), createOpts).ExtractInto(&networkWithExtensions)
   313  	th.AssertNoErr(t, err)
   314  
   315  	th.AssertEquals(t, networkWithExtensions.Status, "ACTIVE")
   316  	th.AssertEquals(t, networkWithExtensions.PortSecurityEnabled, false)
   317  }
   318  
   319  func TestUpdatePortSecurity(t *testing.T) {
   320  	th.SetupHTTP()
   321  	defer th.TeardownHTTP()
   322  
   323  	th.Mux.HandleFunc("/v2.0/networks/4e8e5957-649f-477b-9e5b-f1f75b21c03c", func(w http.ResponseWriter, r *http.Request) {
   324  		th.TestMethod(t, r, "PUT")
   325  		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
   326  		th.TestHeader(t, r, "Content-Type", "application/json")
   327  		th.TestHeader(t, r, "Accept", "application/json")
   328  		th.TestJSONRequest(t, r, UpdatePortSecurityRequest)
   329  
   330  		w.Header().Add("Content-Type", "application/json")
   331  		w.WriteHeader(http.StatusOK)
   332  
   333  		fmt.Fprint(w, UpdatePortSecurityResponse)
   334  	})
   335  
   336  	var networkWithExtensions struct {
   337  		networks.Network
   338  		portsecurity.PortSecurityExt
   339  	}
   340  
   341  	iFalse := false
   342  	networkUpdateOpts := networks.UpdateOpts{}
   343  	updateOpts := portsecurity.NetworkUpdateOptsExt{
   344  		UpdateOptsBuilder:   networkUpdateOpts,
   345  		PortSecurityEnabled: &iFalse,
   346  	}
   347  
   348  	err := networks.Update(context.TODO(), fake.ServiceClient(), "4e8e5957-649f-477b-9e5b-f1f75b21c03c", updateOpts).ExtractInto(&networkWithExtensions)
   349  	th.AssertNoErr(t, err)
   350  
   351  	th.AssertEquals(t, networkWithExtensions.Name, "private")
   352  	th.AssertEquals(t, networkWithExtensions.AdminStateUp, true)
   353  	th.AssertEquals(t, networkWithExtensions.Shared, false)
   354  	th.AssertEquals(t, networkWithExtensions.ID, "4e8e5957-649f-477b-9e5b-f1f75b21c03c")
   355  	th.AssertEquals(t, networkWithExtensions.PortSecurityEnabled, false)
   356  }