blob: 6c48365e4edd04cffe49e1260fe1ab7040930cd4 [file] [log] [blame]
package services
import (
"testing"
"github.com/rackspace/gophercloud"
os "github.com/rackspace/gophercloud/openstack/cdn/v1/services"
"github.com/rackspace/gophercloud/pagination"
th "github.com/rackspace/gophercloud/testhelper"
fake "github.com/rackspace/gophercloud/testhelper/client"
)
func TestList(t *testing.T) {
th.SetupHTTP()
defer th.TeardownHTTP()
os.HandleListCDNServiceSuccessfully(t)
count := 0
err := List(fake.ServiceClient(), &os.ListOpts{}).EachPage(func(page pagination.Page) (bool, error) {
count++
actual, err := os.ExtractServices(page)
if err != nil {
t.Errorf("Failed to extract services: %v", err)
return false, err
}
expected := []os.Service{
os.Service{
ID: "96737ae3-cfc1-4c72-be88-5d0e7cc9a3f0",
Name: "mywebsite.com",
Domains: []os.Domain{
os.Domain{
Domain: "www.mywebsite.com",
},
},
Origins: []os.Origin{
os.Origin{
Origin: "mywebsite.com",
Port: 80,
SSL: false,
},
},
Caching: []os.CacheRule{
os.CacheRule{
Name: "default",
TTL: 3600,
},
os.CacheRule{
Name: "home",
TTL: 17200,
Rules: []os.TTLRule{
os.TTLRule{
Name: "index",
RequestURL: "/index.htm",
},
},
},
os.CacheRule{
Name: "images",
TTL: 12800,
Rules: []os.TTLRule{
os.TTLRule{
Name: "images",
RequestURL: "*.png",
},
},
},
},
Restrictions: []os.Restriction{
os.Restriction{
Name: "website only",
Rules: []os.RestrictionRule{
os.RestrictionRule{
Name: "mywebsite.com",
Referrer: "www.mywebsite.com",
},
},
},
},
FlavorID: "asia",
Status: "deployed",
Errors: []os.Error{},
Links: []gophercloud.Link{
gophercloud.Link{
Href: "https://www.poppycdn.io/v1.0/services/96737ae3-cfc1-4c72-be88-5d0e7cc9a3f0",
Rel: "self",
},
gophercloud.Link{
Href: "mywebsite.com.cdn123.poppycdn.net",
Rel: "access_url",
},
gophercloud.Link{
Href: "https://www.poppycdn.io/v1.0/flavors/asia",
Rel: "flavor",
},
},
},
os.Service{
ID: "96737ae3-cfc1-4c72-be88-5d0e7cc9a3f1",
Name: "myothersite.com",
Domains: []os.Domain{
os.Domain{
Domain: "www.myothersite.com",
},
},
Origins: []os.Origin{
os.Origin{
Origin: "44.33.22.11",
Port: 80,
SSL: false,
},
os.Origin{
Origin: "77.66.55.44",
Port: 80,
SSL: false,
Rules: []os.OriginRule{
os.OriginRule{
Name: "videos",
RequestURL: "^/videos/*.m3u",
},
},
},
},
Caching: []os.CacheRule{
os.CacheRule{
Name: "default",
TTL: 3600,
},
},
Restrictions: []os.Restriction{},
FlavorID: "europe",
Status: "deployed",
Links: []gophercloud.Link{
gophercloud.Link{
Href: "https://www.poppycdn.io/v1.0/services/96737ae3-cfc1-4c72-be88-5d0e7cc9a3f1",
Rel: "self",
},
gophercloud.Link{
Href: "myothersite.com.poppycdn.net",
Rel: "access_url",
},
gophercloud.Link{
Href: "https://www.poppycdn.io/v1.0/flavors/europe",
Rel: "flavor",
},
},
},
}
th.CheckDeepEquals(t, expected, actual)
return true, nil
})
th.AssertNoErr(t, err)
if count != 1 {
t.Errorf("Expected 1 page, got %d", count)
}
}
func TestCreate(t *testing.T) {
th.SetupHTTP()
defer th.TeardownHTTP()
os.HandleCreateCDNServiceSuccessfully(t)
createOpts := os.CreateOpts{
Name: "mywebsite.com",
Domains: []os.Domain{
os.Domain{
Domain: "www.mywebsite.com",
},
os.Domain{
Domain: "blog.mywebsite.com",
},
},
Origins: []os.Origin{
os.Origin{
Origin: "mywebsite.com",
Port: 80,
SSL: false,
},
},
Restrictions: []os.Restriction{
os.Restriction{
Name: "website only",
Rules: []os.RestrictionRule{
os.RestrictionRule{
Name: "mywebsite.com",
Referrer: "www.mywebsite.com",
},
},
},
},
Caching: []os.CacheRule{
os.CacheRule{
Name: "default",
TTL: 3600,
},
},
FlavorID: "cdn",
}
expected := "https://global.cdn.api.rackspacecloud.com/v1.0/services/96737ae3-cfc1-4c72-be88-5d0e7cc9a3f0"
actual, err := Create(fake.ServiceClient(), createOpts).Extract()
th.AssertNoErr(t, err)
th.AssertEquals(t, expected, actual)
}
func TestGet(t *testing.T) {
th.SetupHTTP()
defer th.TeardownHTTP()
os.HandleGetCDNServiceSuccessfully(t)
expected := &os.Service{
ID: "96737ae3-cfc1-4c72-be88-5d0e7cc9a3f0",
Name: "mywebsite.com",
Domains: []os.Domain{
os.Domain{
Domain: "www.mywebsite.com",
Protocol: "http",
},
},
Origins: []os.Origin{
os.Origin{
Origin: "mywebsite.com",
Port: 80,
SSL: false,
},
},
Caching: []os.CacheRule{
os.CacheRule{
Name: "default",
TTL: 3600,
},
os.CacheRule{
Name: "home",
TTL: 17200,
Rules: []os.TTLRule{
os.TTLRule{
Name: "index",
RequestURL: "/index.htm",
},
},
},
os.CacheRule{
Name: "images",
TTL: 12800,
Rules: []os.TTLRule{
os.TTLRule{
Name: "images",
RequestURL: "*.png",
},
},
},
},
Restrictions: []os.Restriction{
os.Restriction{
Name: "website only",
Rules: []os.RestrictionRule{
os.RestrictionRule{
Name: "mywebsite.com",
Referrer: "www.mywebsite.com",
},
},
},
},
FlavorID: "cdn",
Status: "deployed",
Errors: []os.Error{},
Links: []gophercloud.Link{
gophercloud.Link{
Href: "https://global.cdn.api.rackspacecloud.com/v1.0/110011/services/96737ae3-cfc1-4c72-be88-5d0e7cc9a3f0",
Rel: "self",
},
gophercloud.Link{
Href: "blog.mywebsite.com.cdn1.raxcdn.com",
Rel: "access_url",
},
gophercloud.Link{
Href: "https://global.cdn.api.rackspacecloud.com/v1.0/110011/flavors/cdn",
Rel: "flavor",
},
},
}
actual, err := Get(fake.ServiceClient(), "96737ae3-cfc1-4c72-be88-5d0e7cc9a3f0").Extract()
th.AssertNoErr(t, err)
th.AssertDeepEquals(t, expected, actual)
}
func TestSuccessfulUpdate(t *testing.T) {
th.SetupHTTP()
defer th.TeardownHTTP()
os.HandleUpdateCDNServiceSuccessfully(t)
expected := "https://www.poppycdn.io/v1.0/services/96737ae3-cfc1-4c72-be88-5d0e7cc9a3f0"
ops := []os.Patch{
// Append a single Domain
os.Append{Value: os.Domain{Domain: "appended.mocksite4.com"}},
// Insert a single Domain
os.Insertion{
Index: 4,
Value: os.Domain{Domain: "inserted.mocksite4.com"},
},
// Bulk addition
os.Append{
Value: os.DomainList{
os.Domain{Domain: "bulkadded1.mocksite4.com"},
os.Domain{Domain: "bulkadded2.mocksite4.com"},
},
},
// Replace a single Origin
os.Replacement{
Index: 2,
Value: os.Origin{Origin: "44.33.22.11", Port: 80, SSL: false},
},
// Bulk replace Origins
os.Replacement{
Index: 0, // Ignored
Value: os.OriginList{
os.Origin{Origin: "44.33.22.11", Port: 80, SSL: false},
os.Origin{Origin: "55.44.33.22", Port: 443, SSL: true},
},
},
// Remove a single CacheRule
os.Removal{
Index: 8,
Path: os.PathCaching,
},
// Bulk removal
os.Removal{
All: true,
Path: os.PathCaching,
},
// Service name replacement
os.NameReplacement{
NewName: "differentServiceName",
},
}
actual, err := Update(fake.ServiceClient(), "96737ae3-cfc1-4c72-be88-5d0e7cc9a3f0", ops).Extract()
th.AssertNoErr(t, err)
th.AssertEquals(t, expected, actual)
}
func TestDelete(t *testing.T) {
th.SetupHTTP()
defer th.TeardownHTTP()
os.HandleDeleteCDNServiceSuccessfully(t)
err := Delete(fake.ServiceClient(), "96737ae3-cfc1-4c72-be88-5d0e7cc9a3f0").ExtractErr()
th.AssertNoErr(t, err)
}