github.com/gophercloud/gophercloud@v1.11.0/openstack/networking/v2/extensions/provider/testing/results_test.go (about)

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