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  }