github.com/vnpaycloud-console/gophercloud/v2@v2.0.5/openstack/networking/v2/extensions/provider/testing/results_test.go (about)

     1  package testing
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"net/http"
     7  	"testing"
     8  
     9  	"github.com/vnpaycloud-console/gophercloud/v2"
    10  	fake "github.com/vnpaycloud-console/gophercloud/v2/openstack/networking/v2/common"
    11  	"github.com/vnpaycloud-console/gophercloud/v2/openstack/networking/v2/extensions/provider"
    12  	"github.com/vnpaycloud-console/gophercloud/v2/openstack/networking/v2/networks"
    13  	nettest "github.com/vnpaycloud-console/gophercloud/v2/openstack/networking/v2/networks/testing"
    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, nettest.ListResponse)
    29  	})
    30  
    31  	type NetworkWithExt struct {
    32  		networks.Network
    33  		provider.NetworkProviderExt
    34  	}
    35  	var actual []NetworkWithExt
    36  
    37  	allPages, err := networks.List(fake.ServiceClient(), networks.ListOpts{}).AllPages(context.TODO())
    38  	th.AssertNoErr(t, err)
    39  
    40  	err = networks.ExtractNetworksInto(allPages, &actual)
    41  	th.AssertNoErr(t, err)
    42  
    43  	th.AssertEquals(t, "d32019d3-bc6e-4319-9c1d-6722fc136a22", actual[0].ID)
    44  	th.AssertEquals(t, "db193ab3-96e3-4cb3-8fc5-05f4296d0324", actual[1].ID)
    45  	th.AssertEquals(t, "local", actual[1].NetworkType)
    46  	th.AssertEquals(t, "1234567890", actual[1].SegmentationID)
    47  	th.AssertEquals(t, actual[0].Subnets[0], "54d6f61d-db07-451c-9ab3-b9609b6b6f0b")
    48  	th.AssertEquals(t, actual[1].Subnets[0], "08eae331-0402-425a-923c-34f7cfe39c1b")
    49  
    50  }
    51  
    52  func TestGet(t *testing.T) {
    53  	th.SetupHTTP()
    54  	defer th.TeardownHTTP()
    55  
    56  	th.Mux.HandleFunc("/v2.0/networks/d32019d3-bc6e-4319-9c1d-6722fc136a22", func(w http.ResponseWriter, r *http.Request) {
    57  		th.TestMethod(t, r, "GET")
    58  		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
    59  
    60  		w.Header().Add("Content-Type", "application/json")
    61  		w.WriteHeader(http.StatusOK)
    62  
    63  		fmt.Fprint(w, nettest.GetResponse)
    64  	})
    65  
    66  	var s struct {
    67  		networks.Network
    68  		provider.NetworkProviderExt
    69  	}
    70  
    71  	err := networks.Get(context.TODO(), fake.ServiceClient(), "d32019d3-bc6e-4319-9c1d-6722fc136a22").ExtractInto(&s)
    72  	th.AssertNoErr(t, err)
    73  
    74  	th.AssertEquals(t, "d32019d3-bc6e-4319-9c1d-6722fc136a22", s.ID)
    75  	th.AssertEquals(t, "", s.PhysicalNetwork)
    76  	th.AssertEquals(t, "local", s.NetworkType)
    77  	th.AssertEquals(t, "9876543210", s.SegmentationID)
    78  }
    79  
    80  func TestCreate(t *testing.T) {
    81  	th.SetupHTTP()
    82  	defer th.TeardownHTTP()
    83  
    84  	th.Mux.HandleFunc("/v2.0/networks", func(w http.ResponseWriter, r *http.Request) {
    85  		th.TestMethod(t, r, "POST")
    86  		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
    87  		th.TestHeader(t, r, "Content-Type", "application/json")
    88  		th.TestHeader(t, r, "Accept", "application/json")
    89  		th.TestJSONRequest(t, r, nettest.CreateRequest)
    90  
    91  		w.Header().Add("Content-Type", "application/json")
    92  		w.WriteHeader(http.StatusCreated)
    93  
    94  		fmt.Fprint(w, nettest.CreateResponse)
    95  	})
    96  
    97  	var s struct {
    98  		networks.Network
    99  		provider.NetworkProviderExt
   100  	}
   101  
   102  	options := networks.CreateOpts{Name: "private", AdminStateUp: gophercloud.Enabled}
   103  	err := networks.Create(context.TODO(), fake.ServiceClient(), options).ExtractInto(&s)
   104  	th.AssertNoErr(t, err)
   105  
   106  	th.AssertEquals(t, "db193ab3-96e3-4cb3-8fc5-05f4296d0324", s.ID)
   107  	th.AssertEquals(t, "", s.PhysicalNetwork)
   108  	th.AssertEquals(t, "local", s.NetworkType)
   109  	th.AssertEquals(t, "9876543210", s.SegmentationID)
   110  }
   111  
   112  func TestCreateWithMultipleProvider(t *testing.T) {
   113  	th.SetupHTTP()
   114  	defer th.TeardownHTTP()
   115  
   116  	th.Mux.HandleFunc("/v2.0/networks", func(w http.ResponseWriter, r *http.Request) {
   117  		th.TestMethod(t, r, "POST")
   118  		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
   119  		th.TestHeader(t, r, "Content-Type", "application/json")
   120  		th.TestHeader(t, r, "Accept", "application/json")
   121  		th.TestJSONRequest(t, r, `
   122  {
   123  	"network": {
   124  			"name": "sample_network",
   125  			"admin_state_up": true,
   126  			"shared": true,
   127  			"tenant_id": "12345",
   128  			"segments": [
   129  				{
   130  					"provider:segmentation_id": 666,
   131  					"provider:physical_network": "br-ex",
   132  					"provider:network_type": "vxlan"
   133  				},
   134  				{
   135  					"provider:segmentation_id": 615,
   136  					"provider:physical_network": "br-ex",
   137  					"provider:network_type": "vxlan"
   138  				}
   139  			]
   140  	}
   141  }
   142  		`)
   143  
   144  		w.WriteHeader(http.StatusCreated)
   145  		fmt.Fprint(w, `
   146  {
   147  	"network": {
   148  		"status": "ACTIVE",
   149  		"name": "sample_network",
   150  		"admin_state_up": true,
   151  		"shared": true,
   152  		"tenant_id": "12345",
   153  		"segments": [
   154  			{
   155  				"provider:segmentation_id": 666,
   156  				"provider:physical_network": "br-ex",
   157  				"provider:network_type": "vlan"
   158  			},
   159  			{
   160  				"provider:segmentation_id": 615,
   161  				"provider:physical_network": "br-ex",
   162  				"provider:network_type": "vlan"
   163  			}
   164  		]
   165  	}
   166  }
   167  	`)
   168  	})
   169  
   170  	iTrue := true
   171  	segments := []provider.Segment{
   172  		{NetworkType: "vxlan", PhysicalNetwork: "br-ex", SegmentationID: 666},
   173  		{NetworkType: "vxlan", PhysicalNetwork: "br-ex", SegmentationID: 615},
   174  	}
   175  
   176  	networkCreateOpts := networks.CreateOpts{
   177  		Name:         "sample_network",
   178  		AdminStateUp: &iTrue,
   179  		Shared:       &iTrue,
   180  		TenantID:     "12345",
   181  	}
   182  
   183  	providerCreateOpts := provider.CreateOptsExt{
   184  		CreateOptsBuilder: networkCreateOpts,
   185  		Segments:          segments,
   186  	}
   187  
   188  	_, err := networks.Create(context.TODO(), fake.ServiceClient(), providerCreateOpts).Extract()
   189  	th.AssertNoErr(t, err)
   190  }
   191  
   192  func TestUpdate(t *testing.T) {
   193  	th.SetupHTTP()
   194  	defer th.TeardownHTTP()
   195  
   196  	iTrue := true
   197  	name := "new_network_name"
   198  	segments := []provider.Segment{
   199  		{NetworkType: "vxlan", PhysicalNetwork: "br-ex", SegmentationID: 615},
   200  	}
   201  	networkUpdateOpts := networks.UpdateOpts{Name: &name, AdminStateUp: gophercloud.Disabled, Shared: &iTrue}
   202  	providerUpdateOpts := provider.UpdateOptsExt{
   203  		UpdateOptsBuilder: networkUpdateOpts,
   204  		Segments:          &segments,
   205  	}
   206  
   207  	th.Mux.HandleFunc("/v2.0/networks/4e8e5957-649f-477b-9e5b-f1f75b21c03c", func(w http.ResponseWriter, r *http.Request) {
   208  		th.TestMethod(t, r, "PUT")
   209  		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
   210  		th.TestHeader(t, r, "Content-Type", "application/json")
   211  		th.TestHeader(t, r, "Accept", "application/json")
   212  		th.TestJSONRequest(t, r, `{
   213    "network": {
   214      "admin_state_up": false,
   215      "name": "new_network_name",
   216      "segments": [
   217        {
   218          "provider:network_type": "vxlan",
   219          "provider:physical_network": "br-ex",
   220          "provider:segmentation_id": 615
   221        }
   222      ],
   223      "shared": true
   224    }
   225  }`)
   226  
   227  		w.Header().Add("Content-Type", "application/json")
   228  		w.WriteHeader(http.StatusOK)
   229  
   230  		fmt.Fprint(w, nettest.UpdateResponse)
   231  	})
   232  
   233  	var s struct {
   234  		networks.Network
   235  		provider.NetworkProviderExt
   236  	}
   237  
   238  	err := networks.Update(context.TODO(), fake.ServiceClient(), "4e8e5957-649f-477b-9e5b-f1f75b21c03c", providerUpdateOpts).ExtractInto(&s)
   239  	th.AssertNoErr(t, err)
   240  
   241  	th.AssertEquals(t, "4e8e5957-649f-477b-9e5b-f1f75b21c03c", s.ID)
   242  	th.AssertEquals(t, "", s.PhysicalNetwork)
   243  	th.AssertEquals(t, "local", s.NetworkType)
   244  	th.AssertEquals(t, "1234567890", s.SegmentationID)
   245  }