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 }