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 }