blob: 8bbdcf2888f1d65dfa71274fc9be3f41f9ea2156 [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import sys
import unittest
from libcloud.utils.py3 import method_type
from libcloud.utils.py3 import httplib
from libcloud.compute.types import Provider
from libcloud.compute.providers import get_driver
from libcloud.compute.drivers.rackspace import RackspaceFirstGenNodeDriver
from libcloud.compute.drivers.rackspace import RackspaceNodeDriver
from libcloud.test.compute.test_openstack import OpenStack_1_0_Tests
from libcloud.test.compute.test_openstack import OpenStack_1_1_Tests, \
OpenStack_1_1_MockHttp
from libcloud.pricing import clear_pricing_data
from libcloud.test.secrets import RACKSPACE_NOVA_PARAMS
from libcloud.test.secrets import RACKSPACE_PARAMS
DEPRECATED_RACKSPACE_PROVIDERS = [Provider.RACKSPACE_UK,
Provider.RACKSPACE_NOVA_BETA,
Provider.RACKSPACE_NOVA_DFW,
Provider.RACKSPACE_NOVA_LON,
Provider.RACKSPACE_NOVA_ORD]
class RackspaceusFirstGenUsTests(OpenStack_1_0_Tests):
should_list_locations = True
should_have_pricing = True
driver_klass = RackspaceFirstGenNodeDriver
driver_type = RackspaceFirstGenNodeDriver
driver_args = RACKSPACE_PARAMS
driver_kwargs = {'region': 'us'}
def test_error_is_thrown_on_accessing_old_constant(self):
for provider in DEPRECATED_RACKSPACE_PROVIDERS:
try:
get_driver(provider)
except Exception as e:
self.assertTrue(str(e).find('has been removed') != -1)
else:
self.fail('Exception was not thrown')
def test_list_sizes_pricing(self):
sizes = self.driver.list_sizes()
for size in sizes:
self.assertTrue(size.price > 0)
class RackspaceusFirstGenUkTests(OpenStack_1_0_Tests):
should_list_locations = True
should_have_pricing = True
driver_klass = RackspaceFirstGenNodeDriver
driver_type = RackspaceFirstGenNodeDriver
driver_args = RACKSPACE_PARAMS
driver_kwargs = {'region': 'uk'}
def test_list_sizes_pricing(self):
sizes = self.driver.list_sizes()
for size in sizes:
self.assertTrue(size.price > 0)
class RackspaceNovaMockHttp(OpenStack_1_1_MockHttp):
def __init__(self, *args, **kwargs):
super(RackspaceNovaMockHttp, self).__init__(*args, **kwargs)
methods1 = OpenStack_1_1_MockHttp.__dict__
names1 = [m for m in methods1 if m.find('_v1_1') == 0]
for name in names1:
method = methods1[name]
new_name = name.replace('_v1_1_slug_', '_v2_1337_')
setattr(self, new_name, method_type(method, self,
RackspaceNovaMockHttp))
def _v2_1337_os_networksv2(self, method, url, body, headers):
if method == 'GET':
body = self.fixtures.load('_os_networks.json')
return (httplib.OK, body, self.json_content_headers,
httplib.responses[httplib.OK])
elif method == 'POST':
body = self.fixtures.load('_os_networks_POST.json')
return (httplib.ACCEPTED, body, self.json_content_headers,
httplib.responses[httplib.OK])
raise NotImplementedError()
def _v2_1337_os_networksv2_f13e5051_feea_416b_827a_1a0acc2dad14(self,
method,
url, body,
headers):
if method == 'DELETE':
body = ''
return (httplib.ACCEPTED, body, self.json_content_headers,
httplib.responses[httplib.OK])
raise NotImplementedError()
class RackspaceNovaLonMockHttp(RackspaceNovaMockHttp):
def _v2_0_tokens(self, method, url, body, headers):
body = self.auth_fixtures.load('_v2_0__auth_lon.json')
return (httplib.OK, body, self.json_content_headers,
httplib.responses[httplib.OK])
# Does not derive from TestCase because it should not be used by setup.py test
class BaseRackspaceNovaTestCase(object):
conn_class = RackspaceNovaMockHttp
auth_url = 'https://auth.api.example.com'
def create_driver(self):
return self.driver_type(*self.driver_args, **self.driver_kwargs)
def setUp(self):
self.driver_klass.connectionCls.conn_class = self.conn_class
self.driver_klass.connectionCls.auth_url = self.auth_url
self.conn_class.type = None
self.driver = self.create_driver()
# normally authentication happens lazily, but we force it here
self.driver.connection._populate_hosts_and_request_paths()
clear_pricing_data()
self.node = self.driver.list_nodes()[1]
def test_service_catalog_contais_right_endpoint(self):
self.assertEqual(self.driver.connection.get_endpoint(),
self.expected_endpoint)
def test_list_sizes_pricing(self):
sizes = self.driver.list_sizes()
for size in sizes:
if size.ram > 256:
self.assertTrue(size.price > 0)
class RackspaceNovaDfwTests(BaseRackspaceNovaTestCase, OpenStack_1_1_Tests):
driver_klass = RackspaceNodeDriver
driver_type = RackspaceNodeDriver
driver_args = RACKSPACE_NOVA_PARAMS
driver_kwargs = {'region': 'dfw'}
expected_endpoint = 'https://dfw.servers.api.rackspacecloud.com/v2/1337'
class RackspaceNovaOrdTests(BaseRackspaceNovaTestCase, OpenStack_1_1_Tests):
driver_klass = RackspaceNodeDriver
driver_type = RackspaceNodeDriver
driver_args = RACKSPACE_NOVA_PARAMS
driver_kwargs = {'region': 'ord'}
expected_endpoint = 'https://ord.servers.api.rackspacecloud.com/v2/1337'
class RackspaceNovaIadTests(BaseRackspaceNovaTestCase, OpenStack_1_1_Tests):
driver_klass = RackspaceNodeDriver
driver_type = RackspaceNodeDriver
driver_args = RACKSPACE_NOVA_PARAMS
driver_kwargs = {'region': 'iad'}
expected_endpoint = 'https://iad.servers.api.rackspacecloud.com/v2/1337'
class RackspaceNovaLonTests(BaseRackspaceNovaTestCase, OpenStack_1_1_Tests):
driver_klass = RackspaceNodeDriver
driver_type = RackspaceNodeDriver
driver_args = RACKSPACE_NOVA_PARAMS
driver_kwargs = {'region': 'lon'}
conn_class = RackspaceNovaLonMockHttp
auth_url = 'https://lon.auth.api.example.com'
expected_endpoint = 'https://lon.servers.api.rackspacecloud.com/v2/1337'
class RackspaceNovaSydTests(BaseRackspaceNovaTestCase, OpenStack_1_1_Tests):
driver_klass = RackspaceNodeDriver
driver_type = RackspaceNodeDriver
driver_args = RACKSPACE_NOVA_PARAMS
driver_kwargs = {'region': 'syd'}
expected_endpoint = 'https://syd.servers.api.rackspacecloud.com/v2/1337'
class RackspaceNovaHkgTests(BaseRackspaceNovaTestCase, OpenStack_1_1_Tests):
driver_klass = RackspaceNodeDriver
driver_type = RackspaceNodeDriver
driver_args = RACKSPACE_NOVA_PARAMS
driver_kwargs = {'region': 'hkg'}
expected_endpoint = 'https://hkg.servers.api.rackspacecloud.com/v2/1337'
if __name__ == '__main__':
sys.exit(unittest.main())