github.com/gophercloud/gophercloud@v1.11.0/openstack/networking/v2/networks/testing/requests_test.go (about)

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