github.com/gophercloud/gophercloud@v1.11.0/openstack/cdn/v1/services/testing/requests_test.go (about) 1 package testing 2 3 import ( 4 "testing" 5 6 "github.com/gophercloud/gophercloud" 7 "github.com/gophercloud/gophercloud/openstack/cdn/v1/services" 8 "github.com/gophercloud/gophercloud/pagination" 9 th "github.com/gophercloud/gophercloud/testhelper" 10 fake "github.com/gophercloud/gophercloud/testhelper/client" 11 ) 12 13 func TestList(t *testing.T) { 14 th.SetupHTTP() 15 defer th.TeardownHTTP() 16 17 HandleListCDNServiceSuccessfully(t) 18 19 count := 0 20 21 err := services.List(fake.ServiceClient(), &services.ListOpts{}).EachPage(func(page pagination.Page) (bool, error) { 22 count++ 23 actual, err := services.ExtractServices(page) 24 if err != nil { 25 t.Errorf("Failed to extract services: %v", err) 26 return false, err 27 } 28 29 expected := []services.Service{ 30 { 31 ID: "96737ae3-cfc1-4c72-be88-5d0e7cc9a3f0", 32 Name: "mywebsite.com", 33 Domains: []services.Domain{ 34 { 35 Domain: "www.mywebsite.com", 36 }, 37 }, 38 Origins: []services.Origin{ 39 { 40 Origin: "mywebsite.com", 41 Port: 80, 42 SSL: false, 43 }, 44 }, 45 Caching: []services.CacheRule{ 46 { 47 Name: "default", 48 TTL: 3600, 49 }, 50 { 51 Name: "home", 52 TTL: 17200, 53 Rules: []services.TTLRule{ 54 { 55 Name: "index", 56 RequestURL: "/index.htm", 57 }, 58 }, 59 }, 60 { 61 Name: "images", 62 TTL: 12800, 63 Rules: []services.TTLRule{ 64 { 65 Name: "images", 66 RequestURL: "*.png", 67 }, 68 }, 69 }, 70 }, 71 Restrictions: []services.Restriction{ 72 { 73 Name: "website only", 74 Rules: []services.RestrictionRule{ 75 { 76 Name: "mywebsite.com", 77 Referrer: "www.mywebsite.com", 78 }, 79 }, 80 }, 81 }, 82 FlavorID: "asia", 83 Status: "deployed", 84 Errors: []services.Error{}, 85 Links: []gophercloud.Link{ 86 { 87 Href: "https://www.poppycdn.io/v1.0/services/96737ae3-cfc1-4c72-be88-5d0e7cc9a3f0", 88 Rel: "self", 89 }, 90 { 91 Href: "mywebsite.com.cdn123.poppycdn.net", 92 Rel: "access_url", 93 }, 94 { 95 Href: "https://www.poppycdn.io/v1.0/flavors/asia", 96 Rel: "flavor", 97 }, 98 }, 99 }, 100 { 101 ID: "96737ae3-cfc1-4c72-be88-5d0e7cc9a3f1", 102 Name: "myothersite.com", 103 Domains: []services.Domain{ 104 { 105 Domain: "www.myothersite.com", 106 }, 107 }, 108 Origins: []services.Origin{ 109 { 110 Origin: "44.33.22.11", 111 Port: 80, 112 SSL: false, 113 }, 114 { 115 Origin: "77.66.55.44", 116 Port: 80, 117 SSL: false, 118 Rules: []services.OriginRule{ 119 { 120 Name: "videos", 121 RequestURL: "^/videos/*.m3u", 122 }, 123 }, 124 }, 125 }, 126 Caching: []services.CacheRule{ 127 { 128 Name: "default", 129 TTL: 3600, 130 }, 131 }, 132 Restrictions: []services.Restriction{}, 133 FlavorID: "europe", 134 Status: "deployed", 135 Links: []gophercloud.Link{ 136 { 137 Href: "https://www.poppycdn.io/v1.0/services/96737ae3-cfc1-4c72-be88-5d0e7cc9a3f1", 138 Rel: "self", 139 }, 140 { 141 Href: "myothersite.com.poppycdn.net", 142 Rel: "access_url", 143 }, 144 { 145 Href: "https://www.poppycdn.io/v1.0/flavors/europe", 146 Rel: "flavor", 147 }, 148 }, 149 }, 150 } 151 152 th.CheckDeepEquals(t, expected, actual) 153 154 return true, nil 155 }) 156 th.AssertNoErr(t, err) 157 158 if count != 1 { 159 t.Errorf("Expected 1 page, got %d", count) 160 } 161 } 162 163 func TestCreate(t *testing.T) { 164 th.SetupHTTP() 165 defer th.TeardownHTTP() 166 167 HandleCreateCDNServiceSuccessfully(t) 168 169 createOpts := services.CreateOpts{ 170 Name: "mywebsite.com", 171 Domains: []services.Domain{ 172 { 173 Domain: "www.mywebsite.com", 174 }, 175 { 176 Domain: "blog.mywebsite.com", 177 }, 178 }, 179 Origins: []services.Origin{ 180 { 181 Origin: "mywebsite.com", 182 Port: 80, 183 SSL: false, 184 }, 185 }, 186 Restrictions: []services.Restriction{ 187 { 188 Name: "website only", 189 Rules: []services.RestrictionRule{ 190 { 191 Name: "mywebsite.com", 192 Referrer: "www.mywebsite.com", 193 }, 194 }, 195 }, 196 }, 197 Caching: []services.CacheRule{ 198 { 199 Name: "default", 200 TTL: 3600, 201 }, 202 }, 203 FlavorID: "cdn", 204 } 205 206 expected := "https://global.cdn.api.rackspacecloud.com/v1.0/services/96737ae3-cfc1-4c72-be88-5d0e7cc9a3f0" 207 actual, err := services.Create(fake.ServiceClient(), createOpts).Extract() 208 th.AssertNoErr(t, err) 209 th.AssertEquals(t, expected, actual) 210 } 211 212 func TestGet(t *testing.T) { 213 th.SetupHTTP() 214 defer th.TeardownHTTP() 215 216 HandleGetCDNServiceSuccessfully(t) 217 218 expected := &services.Service{ 219 ID: "96737ae3-cfc1-4c72-be88-5d0e7cc9a3f0", 220 Name: "mywebsite.com", 221 Domains: []services.Domain{ 222 { 223 Domain: "www.mywebsite.com", 224 Protocol: "http", 225 }, 226 }, 227 Origins: []services.Origin{ 228 { 229 Origin: "mywebsite.com", 230 Port: 80, 231 SSL: false, 232 }, 233 }, 234 Caching: []services.CacheRule{ 235 { 236 Name: "default", 237 TTL: 3600, 238 }, 239 { 240 Name: "home", 241 TTL: 17200, 242 Rules: []services.TTLRule{ 243 { 244 Name: "index", 245 RequestURL: "/index.htm", 246 }, 247 }, 248 }, 249 { 250 Name: "images", 251 TTL: 12800, 252 Rules: []services.TTLRule{ 253 { 254 Name: "images", 255 RequestURL: "*.png", 256 }, 257 }, 258 }, 259 }, 260 Restrictions: []services.Restriction{ 261 { 262 Name: "website only", 263 Rules: []services.RestrictionRule{ 264 { 265 Name: "mywebsite.com", 266 Referrer: "www.mywebsite.com", 267 }, 268 }, 269 }, 270 }, 271 FlavorID: "cdn", 272 Status: "deployed", 273 Errors: []services.Error{}, 274 Links: []gophercloud.Link{ 275 { 276 Href: "https://global.cdn.api.rackspacecloud.com/v1.0/110011/services/96737ae3-cfc1-4c72-be88-5d0e7cc9a3f0", 277 Rel: "self", 278 }, 279 { 280 Href: "blog.mywebsite.com.cdn1.raxcdn.com", 281 Rel: "access_url", 282 }, 283 { 284 Href: "https://global.cdn.api.rackspacecloud.com/v1.0/110011/flavors/cdn", 285 Rel: "flavor", 286 }, 287 }, 288 } 289 290 actual, err := services.Get(fake.ServiceClient(), "96737ae3-cfc1-4c72-be88-5d0e7cc9a3f0").Extract() 291 th.AssertNoErr(t, err) 292 th.AssertDeepEquals(t, expected, actual) 293 } 294 295 func TestSuccessfulUpdate(t *testing.T) { 296 th.SetupHTTP() 297 defer th.TeardownHTTP() 298 299 HandleUpdateCDNServiceSuccessfully(t) 300 301 expected := "https://www.poppycdn.io/v1.0/services/96737ae3-cfc1-4c72-be88-5d0e7cc9a3f0" 302 ops := services.UpdateOpts{ 303 // Append a single Domain 304 services.Append{Value: services.Domain{Domain: "appended.mocksite4.com"}}, 305 // Insert a single Domain 306 services.Insertion{ 307 Index: 4, 308 Value: services.Domain{Domain: "inserted.mocksite4.com"}, 309 }, 310 // Bulk addition 311 services.Append{ 312 Value: services.DomainList{ 313 {Domain: "bulkadded1.mocksite4.com"}, 314 {Domain: "bulkadded2.mocksite4.com"}, 315 }, 316 }, 317 // Replace a single Origin 318 services.Replacement{ 319 Index: 2, 320 Value: services.Origin{Origin: "44.33.22.11", Port: 80, SSL: false}, 321 }, 322 // Bulk replace Origins 323 services.Replacement{ 324 Index: 0, // Ignored 325 Value: services.OriginList{ 326 {Origin: "44.33.22.11", Port: 80, SSL: false}, 327 {Origin: "55.44.33.22", Port: 443, SSL: true}, 328 }, 329 }, 330 // Remove a single CacheRule 331 services.Removal{ 332 Index: 8, 333 Path: services.PathCaching, 334 }, 335 // Bulk removal 336 services.Removal{ 337 All: true, 338 Path: services.PathCaching, 339 }, 340 // Service name replacement 341 services.NameReplacement{ 342 NewName: "differentServiceName", 343 }, 344 } 345 346 actual, err := services.Update(fake.ServiceClient(), "96737ae3-cfc1-4c72-be88-5d0e7cc9a3f0", ops).Extract() 347 th.AssertNoErr(t, err) 348 th.AssertEquals(t, expected, actual) 349 } 350 351 func TestDelete(t *testing.T) { 352 th.SetupHTTP() 353 defer th.TeardownHTTP() 354 355 HandleDeleteCDNServiceSuccessfully(t) 356 357 err := services.Delete(fake.ServiceClient(), "96737ae3-cfc1-4c72-be88-5d0e7cc9a3f0").ExtractErr() 358 th.AssertNoErr(t, err) 359 }