github.com/vnpaycloud-console/gophercloud/v2@v2.0.5/openstack/networking/v2/networks/testing/requests_test.go (about) 1 package testing 2 3 import ( 4 "context" 5 "fmt" 6 "net/http" 7 "testing" 8 "time" 9 10 fake "github.com/vnpaycloud-console/gophercloud/v2/openstack/networking/v2/common" 11 "github.com/vnpaycloud-console/gophercloud/v2/openstack/networking/v2/extensions/portsecurity" 12 "github.com/vnpaycloud-console/gophercloud/v2/openstack/networking/v2/networks" 13 "github.com/vnpaycloud-console/gophercloud/v2/pagination" 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, ListResponse) 29 }) 30 31 client := fake.ServiceClient() 32 count := 0 33 34 err := networks.List(client, networks.ListOpts{}).EachPage(context.TODO(), func(_ context.Context, page pagination.Page) (bool, error) { 35 count++ 36 actual, err := networks.ExtractNetworks(page) 37 if err != nil { 38 t.Errorf("Failed to extract networks: %v", err) 39 return false, err 40 } 41 42 th.CheckDeepEquals(t, ExpectedNetworkSlice, actual) 43 44 return true, nil 45 }) 46 47 th.AssertNoErr(t, err) 48 49 if count != 1 { 50 t.Errorf("Expected 1 page, got %d", count) 51 } 52 } 53 54 func TestListWithExtensions(t *testing.T) { 55 th.SetupHTTP() 56 defer th.TeardownHTTP() 57 58 th.Mux.HandleFunc("/v2.0/networks", func(w http.ResponseWriter, r *http.Request) { 59 th.TestMethod(t, r, "GET") 60 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID) 61 62 w.Header().Add("Content-Type", "application/json") 63 w.WriteHeader(http.StatusOK) 64 65 fmt.Fprint(w, ListResponse) 66 }) 67 68 client := fake.ServiceClient() 69 70 type networkWithExt struct { 71 networks.Network 72 portsecurity.PortSecurityExt 73 } 74 75 var allNetworks []networkWithExt 76 77 allPages, err := networks.List(client, networks.ListOpts{}).AllPages(context.TODO()) 78 th.AssertNoErr(t, err) 79 80 err = networks.ExtractNetworksInto(allPages, &allNetworks) 81 th.AssertNoErr(t, err) 82 83 th.AssertEquals(t, allNetworks[0].Status, "ACTIVE") 84 th.AssertEquals(t, allNetworks[0].PortSecurityEnabled, true) 85 th.AssertEquals(t, allNetworks[0].Subnets[0], "54d6f61d-db07-451c-9ab3-b9609b6b6f0b") 86 th.AssertEquals(t, allNetworks[1].Subnets[0], "08eae331-0402-425a-923c-34f7cfe39c1b") 87 th.AssertEquals(t, allNetworks[0].CreatedAt.Format(time.RFC3339), "2019-06-30T04:15:37Z") 88 th.AssertEquals(t, allNetworks[0].UpdatedAt.Format(time.RFC3339), "2019-06-30T05:18:49Z") 89 th.AssertEquals(t, allNetworks[1].CreatedAt.Format(time.RFC3339), "2019-06-30T04:15:37Z") 90 th.AssertEquals(t, allNetworks[1].UpdatedAt.Format(time.RFC3339), "2019-06-30T05:18:49Z") 91 } 92 93 func TestGet(t *testing.T) { 94 th.SetupHTTP() 95 defer th.TeardownHTTP() 96 97 th.Mux.HandleFunc("/v2.0/networks/d32019d3-bc6e-4319-9c1d-6722fc136a22", func(w http.ResponseWriter, r *http.Request) { 98 th.TestMethod(t, r, "GET") 99 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID) 100 101 w.Header().Add("Content-Type", "application/json") 102 w.WriteHeader(http.StatusOK) 103 104 fmt.Fprint(w, GetResponse) 105 }) 106 107 n, err := networks.Get(context.TODO(), fake.ServiceClient(), "d32019d3-bc6e-4319-9c1d-6722fc136a22").Extract() 108 th.AssertNoErr(t, err) 109 th.CheckDeepEquals(t, &Network1, n) 110 th.AssertEquals(t, n.CreatedAt.Format(time.RFC3339), "2019-06-30T04:15:37Z") 111 th.AssertEquals(t, n.UpdatedAt.Format(time.RFC3339), "2019-06-30T05:18:49Z") 112 } 113 114 func TestGetWithExtensions(t *testing.T) { 115 th.SetupHTTP() 116 defer th.TeardownHTTP() 117 118 th.Mux.HandleFunc("/v2.0/networks/d32019d3-bc6e-4319-9c1d-6722fc136a22", func(w http.ResponseWriter, r *http.Request) { 119 th.TestMethod(t, r, "GET") 120 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID) 121 122 w.Header().Add("Content-Type", "application/json") 123 w.WriteHeader(http.StatusOK) 124 125 fmt.Fprint(w, GetResponse) 126 }) 127 128 var networkWithExtensions struct { 129 networks.Network 130 portsecurity.PortSecurityExt 131 } 132 133 err := networks.Get(context.TODO(), fake.ServiceClient(), "d32019d3-bc6e-4319-9c1d-6722fc136a22").ExtractInto(&networkWithExtensions) 134 th.AssertNoErr(t, err) 135 136 th.AssertEquals(t, networkWithExtensions.Status, "ACTIVE") 137 th.AssertEquals(t, networkWithExtensions.PortSecurityEnabled, true) 138 } 139 140 func TestCreate(t *testing.T) { 141 th.SetupHTTP() 142 defer th.TeardownHTTP() 143 144 th.Mux.HandleFunc("/v2.0/networks", func(w http.ResponseWriter, r *http.Request) { 145 th.TestMethod(t, r, "POST") 146 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID) 147 th.TestHeader(t, r, "Content-Type", "application/json") 148 th.TestHeader(t, r, "Accept", "application/json") 149 th.TestJSONRequest(t, r, CreateRequest) 150 w.Header().Add("Content-Type", "application/json") 151 w.WriteHeader(http.StatusCreated) 152 153 fmt.Fprint(w, CreateResponse) 154 }) 155 156 iTrue := true 157 options := networks.CreateOpts{Name: "private", AdminStateUp: &iTrue} 158 n, err := networks.Create(context.TODO(), fake.ServiceClient(), options).Extract() 159 th.AssertNoErr(t, err) 160 161 th.AssertEquals(t, n.Status, "ACTIVE") 162 th.AssertDeepEquals(t, &Network2, n) 163 th.AssertEquals(t, n.CreatedAt.Format(time.RFC3339), "2019-06-30T04:15:37Z") 164 th.AssertEquals(t, n.UpdatedAt.Format(time.RFC3339), "2019-06-30T05:18:49Z") 165 } 166 167 func TestCreateWithOptionalFields(t *testing.T) { 168 th.SetupHTTP() 169 defer th.TeardownHTTP() 170 171 th.Mux.HandleFunc("/v2.0/networks", func(w http.ResponseWriter, r *http.Request) { 172 th.TestMethod(t, r, "POST") 173 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID) 174 th.TestHeader(t, r, "Content-Type", "application/json") 175 th.TestHeader(t, r, "Accept", "application/json") 176 th.TestJSONRequest(t, r, CreateOptionalFieldsRequest) 177 178 w.WriteHeader(http.StatusCreated) 179 fmt.Fprint(w, `{}`) 180 }) 181 182 iTrue := true 183 options := networks.CreateOpts{ 184 Name: "public", 185 AdminStateUp: &iTrue, 186 Shared: &iTrue, 187 TenantID: "12345", 188 AvailabilityZoneHints: []string{"zone1", "zone2"}, 189 } 190 _, err := networks.Create(context.TODO(), fake.ServiceClient(), options).Extract() 191 th.AssertNoErr(t, err) 192 } 193 194 func TestUpdate(t *testing.T) { 195 th.SetupHTTP() 196 defer th.TeardownHTTP() 197 198 th.Mux.HandleFunc("/v2.0/networks/4e8e5957-649f-477b-9e5b-f1f75b21c03c", func(w http.ResponseWriter, r *http.Request) { 199 th.TestMethod(t, r, "PUT") 200 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID) 201 th.TestHeader(t, r, "Content-Type", "application/json") 202 th.TestHeader(t, r, "Accept", "application/json") 203 th.TestJSONRequest(t, r, UpdateRequest) 204 205 w.Header().Add("Content-Type", "application/json") 206 w.WriteHeader(http.StatusOK) 207 208 fmt.Fprint(w, UpdateResponse) 209 }) 210 211 iTrue, iFalse := true, false 212 name := "new_network_name" 213 options := networks.UpdateOpts{Name: &name, AdminStateUp: &iFalse, Shared: &iTrue} 214 n, err := networks.Update(context.TODO(), fake.ServiceClient(), "4e8e5957-649f-477b-9e5b-f1f75b21c03c", options).Extract() 215 th.AssertNoErr(t, err) 216 217 th.AssertEquals(t, n.Name, "new_network_name") 218 th.AssertEquals(t, n.AdminStateUp, false) 219 th.AssertEquals(t, n.Shared, true) 220 th.AssertEquals(t, n.ID, "4e8e5957-649f-477b-9e5b-f1f75b21c03c") 221 th.AssertEquals(t, n.CreatedAt.Format(time.RFC3339), "2019-06-30T04:15:37Z") 222 th.AssertEquals(t, n.UpdatedAt.Format(time.RFC3339), "2019-06-30T05:18:49Z") 223 } 224 225 func TestUpdateRevision(t *testing.T) { 226 th.SetupHTTP() 227 defer th.TeardownHTTP() 228 229 th.Mux.HandleFunc("/v2.0/networks/4e8e5957-649f-477b-9e5b-f1f75b21c03c", func(w http.ResponseWriter, r *http.Request) { 230 th.TestMethod(t, r, "PUT") 231 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID) 232 th.TestHeader(t, r, "Content-Type", "application/json") 233 th.TestHeader(t, r, "Accept", "application/json") 234 th.TestHeaderUnset(t, r, "If-Match") 235 th.TestJSONRequest(t, r, UpdateRequest) 236 237 w.Header().Add("Content-Type", "application/json") 238 w.WriteHeader(http.StatusOK) 239 240 fmt.Fprint(w, UpdateResponse) 241 }) 242 243 th.Mux.HandleFunc("/v2.0/networks/4e8e5957-649f-477b-9e5b-f1f75b21c03d", func(w http.ResponseWriter, r *http.Request) { 244 th.TestMethod(t, r, "PUT") 245 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID) 246 th.TestHeader(t, r, "Content-Type", "application/json") 247 th.TestHeader(t, r, "Accept", "application/json") 248 th.TestHeader(t, r, "If-Match", "revision_number=42") 249 th.TestJSONRequest(t, r, UpdateRequest) 250 251 w.Header().Add("Content-Type", "application/json") 252 w.WriteHeader(http.StatusOK) 253 254 fmt.Fprint(w, UpdateResponse) 255 }) 256 257 iTrue, iFalse := true, false 258 name := "new_network_name" 259 options := networks.UpdateOpts{Name: &name, AdminStateUp: &iFalse, Shared: &iTrue} 260 _, err := networks.Update(context.TODO(), fake.ServiceClient(), "4e8e5957-649f-477b-9e5b-f1f75b21c03c", options).Extract() 261 th.AssertNoErr(t, err) 262 263 revisionNumber := 42 264 options.RevisionNumber = &revisionNumber 265 _, err = networks.Update(context.TODO(), fake.ServiceClient(), "4e8e5957-649f-477b-9e5b-f1f75b21c03d", options).Extract() 266 th.AssertNoErr(t, err) 267 } 268 269 func TestDelete(t *testing.T) { 270 th.SetupHTTP() 271 defer th.TeardownHTTP() 272 273 th.Mux.HandleFunc("/v2.0/networks/4e8e5957-649f-477b-9e5b-f1f75b21c03c", func(w http.ResponseWriter, r *http.Request) { 274 th.TestMethod(t, r, "DELETE") 275 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID) 276 w.WriteHeader(http.StatusNoContent) 277 }) 278 279 res := networks.Delete(context.TODO(), fake.ServiceClient(), "4e8e5957-649f-477b-9e5b-f1f75b21c03c") 280 th.AssertNoErr(t, res.Err) 281 } 282 283 func TestCreatePortSecurity(t *testing.T) { 284 th.SetupHTTP() 285 defer th.TeardownHTTP() 286 287 th.Mux.HandleFunc("/v2.0/networks", func(w http.ResponseWriter, r *http.Request) { 288 th.TestMethod(t, r, "POST") 289 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID) 290 th.TestHeader(t, r, "Content-Type", "application/json") 291 th.TestHeader(t, r, "Accept", "application/json") 292 th.TestJSONRequest(t, r, CreatePortSecurityRequest) 293 w.Header().Add("Content-Type", "application/json") 294 w.WriteHeader(http.StatusCreated) 295 296 fmt.Fprint(w, CreatePortSecurityResponse) 297 }) 298 299 var networkWithExtensions struct { 300 networks.Network 301 portsecurity.PortSecurityExt 302 } 303 304 iTrue := true 305 iFalse := false 306 networkCreateOpts := networks.CreateOpts{Name: "private", AdminStateUp: &iTrue} 307 createOpts := portsecurity.NetworkCreateOptsExt{ 308 CreateOptsBuilder: networkCreateOpts, 309 PortSecurityEnabled: &iFalse, 310 } 311 312 err := networks.Create(context.TODO(), fake.ServiceClient(), createOpts).ExtractInto(&networkWithExtensions) 313 th.AssertNoErr(t, err) 314 315 th.AssertEquals(t, networkWithExtensions.Status, "ACTIVE") 316 th.AssertEquals(t, networkWithExtensions.PortSecurityEnabled, false) 317 } 318 319 func TestUpdatePortSecurity(t *testing.T) { 320 th.SetupHTTP() 321 defer th.TeardownHTTP() 322 323 th.Mux.HandleFunc("/v2.0/networks/4e8e5957-649f-477b-9e5b-f1f75b21c03c", func(w http.ResponseWriter, r *http.Request) { 324 th.TestMethod(t, r, "PUT") 325 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID) 326 th.TestHeader(t, r, "Content-Type", "application/json") 327 th.TestHeader(t, r, "Accept", "application/json") 328 th.TestJSONRequest(t, r, UpdatePortSecurityRequest) 329 330 w.Header().Add("Content-Type", "application/json") 331 w.WriteHeader(http.StatusOK) 332 333 fmt.Fprint(w, UpdatePortSecurityResponse) 334 }) 335 336 var networkWithExtensions struct { 337 networks.Network 338 portsecurity.PortSecurityExt 339 } 340 341 iFalse := false 342 networkUpdateOpts := networks.UpdateOpts{} 343 updateOpts := portsecurity.NetworkUpdateOptsExt{ 344 UpdateOptsBuilder: networkUpdateOpts, 345 PortSecurityEnabled: &iFalse, 346 } 347 348 err := networks.Update(context.TODO(), fake.ServiceClient(), "4e8e5957-649f-477b-9e5b-f1f75b21c03c", updateOpts).ExtractInto(&networkWithExtensions) 349 th.AssertNoErr(t, err) 350 351 th.AssertEquals(t, networkWithExtensions.Name, "private") 352 th.AssertEquals(t, networkWithExtensions.AdminStateUp, true) 353 th.AssertEquals(t, networkWithExtensions.Shared, false) 354 th.AssertEquals(t, networkWithExtensions.ID, "4e8e5957-649f-477b-9e5b-f1f75b21c03c") 355 th.AssertEquals(t, networkWithExtensions.PortSecurityEnabled, false) 356 }