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 }