diff --git a/novaclient/tests/unit/test_base.py b/novaclient/tests/unit/test_base.py index a24636ca5..74ceca397 100644 --- a/novaclient/tests/unit/test_base.py +++ b/novaclient/tests/unit/test_base.py @@ -14,6 +14,7 @@ from requests import Response import six +from novaclient import api_versions from novaclient import base from novaclient import exceptions from novaclient.tests.unit import utils @@ -21,9 +22,6 @@ from novaclient.tests.unit.v2 import fakes from novaclient.v2 import flavors -cs = fakes.FakeClient() - - def create_response_obj_with_header(): resp = Response() resp.headers['x-openstack-request-id'] = fakes.FAKE_REQUEST_ID @@ -37,7 +35,6 @@ def create_response_obj_with_compute_header(): class BaseTest(utils.TestCase): - def test_resource_repr(self): r = base.Resource(None, dict(foo="bar", baz="spam")) self.assertEqual("", repr(r)) @@ -50,6 +47,7 @@ class BaseTest(utils.TestCase): self.assertEqual(4, base.getid(TmpObject)) def test_resource_lazy_getattr(self): + cs = fakes.FakeClient(api_versions.APIVersion("2.0")) f = flavors.Flavor(cs.flavors, {'id': 1}) self.assertEqual('256 MB Server', f.name) cs.assert_called('GET', '/flavors/1') @@ -74,6 +72,7 @@ class BaseTest(utils.TestCase): self.assertEqual(r1, r2) def test_findall_invalid_attribute(self): + cs = fakes.FakeClient(api_versions.APIVersion("2.0")) # Make sure findall with an invalid attribute doesn't cause errors. # The following should not raise an exception. cs.flavors.findall(vegetable='carrot') diff --git a/novaclient/tests/unit/v2/contrib/test_list_extensions.py b/novaclient/tests/unit/v2/contrib/test_list_extensions.py index 5c6d369d2..02fe296ca 100644 --- a/novaclient/tests/unit/v2/contrib/test_list_extensions.py +++ b/novaclient/tests/unit/v2/contrib/test_list_extensions.py @@ -11,6 +11,7 @@ # License for the specific language governing permissions and limitations # under the License. +from novaclient import api_versions from novaclient import extension from novaclient.tests.unit import utils from novaclient.tests.unit.v2 import fakes @@ -24,7 +25,8 @@ class ListExtensionsTests(utils.TestCase): extension.Extension(list_extensions.__name__.split(".")[-1], list_extensions), ] - self.cs = fakes.FakeClient(extensions=extensions) + self.cs = fakes.FakeClient(api_versions.APIVersion("2.0"), + extensions=extensions) def test_list_extensions(self): all_exts = self.cs.list_extensions.show_all() diff --git a/novaclient/tests/unit/v2/contrib/test_migrations.py b/novaclient/tests/unit/v2/contrib/test_migrations.py index d203e64ca..4cf5d45eb 100644 --- a/novaclient/tests/unit/v2/contrib/test_migrations.py +++ b/novaclient/tests/unit/v2/contrib/test_migrations.py @@ -24,7 +24,8 @@ class MigrationsTest(utils.TestCase): extension.Extension(migrations.__name__.split(".")[-1], migrations), ] - self.cs = fakes.FakeClient(extensions=self.extensions) + self.cs = fakes.FakeClient(api_versions.APIVersion("2.0"), + extensions=self.extensions) def test_list_migrations(self): ml = self.cs.migrations.list() diff --git a/novaclient/tests/unit/v2/fakes.py b/novaclient/tests/unit/v2/fakes.py index 15c44783e..58d5b39ed 100644 --- a/novaclient/tests/unit/v2/fakes.py +++ b/novaclient/tests/unit/v2/fakes.py @@ -56,13 +56,12 @@ FAKE_RESPONSE_HEADERS = {'x-openstack-request-id': FAKE_REQUEST_ID} class FakeClient(fakes.FakeClient, client.Client): - def __init__(self, api_version=None, *args, **kwargs): + def __init__(self, api_version, *args, **kwargs): client.Client.__init__(self, 'username', 'password', 'project_id', 'auth_url', extensions=kwargs.get('extensions'), direct_use=False) - self.api_version = api_version or api_versions.APIVersion("2.1") - kwargs["api_version"] = self.api_version + kwargs["api_version"] = api_version self.client = FakeHTTPClient(**kwargs) @@ -2368,8 +2367,8 @@ class FakeSessionClient(fakes.FakeClient, client.Client): client.Client.__init__(self, 'username', 'password', 'project_id', 'auth_url', extensions=kwargs.get('extensions'), - api_version=api_version, direct_use=False) - kwargs['api_version'] = api_version + direct_use=False) + kwargs["api_version"] = api_version self.client = FakeSessionMockClient(**kwargs) diff --git a/novaclient/tests/unit/v2/test_flavor_access.py b/novaclient/tests/unit/v2/test_flavor_access.py index c6cafdf86..1c604f91e 100644 --- a/novaclient/tests/unit/v2/test_flavor_access.py +++ b/novaclient/tests/unit/v2/test_flavor_access.py @@ -13,28 +13,29 @@ # License for the specific language governing permissions and limitations # under the License. +from novaclient import api_versions from novaclient.tests.unit import utils from novaclient.tests.unit.v2 import fakes from novaclient.v2 import flavor_access -cs = fakes.FakeClient() - - class FlavorAccessTest(utils.TestCase): + def setUp(self): + super(FlavorAccessTest, self).setUp() + self.cs = fakes.FakeClient(api_versions.APIVersion("2.0")) def test_list_access_by_flavor_private(self): - kwargs = {'flavor': cs.flavors.get(2)} - r = cs.flavor_access.list(**kwargs) + kwargs = {'flavor': self.cs.flavors.get(2)} + r = self.cs.flavor_access.list(**kwargs) self.assert_request_id(r, fakes.FAKE_REQUEST_ID_LIST) - cs.assert_called('GET', '/flavors/2/os-flavor-access') + self.cs.assert_called('GET', '/flavors/2/os-flavor-access') for a in r: self.assertIsInstance(a, flavor_access.FlavorAccess) def test_add_tenant_access(self): - flavor = cs.flavors.get(2) + flavor = self.cs.flavors.get(2) tenant = 'proj2' - r = cs.flavor_access.add_tenant_access(flavor, tenant) + r = self.cs.flavor_access.add_tenant_access(flavor, tenant) self.assert_request_id(r, fakes.FAKE_REQUEST_ID_LIST) body = { @@ -43,14 +44,14 @@ class FlavorAccessTest(utils.TestCase): } } - cs.assert_called('POST', '/flavors/2/action', body) + self.cs.assert_called('POST', '/flavors/2/action', body) for a in r: self.assertIsInstance(a, flavor_access.FlavorAccess) def test_remove_tenant_access(self): - flavor = cs.flavors.get(2) + flavor = self.cs.flavors.get(2) tenant = 'proj2' - r = cs.flavor_access.remove_tenant_access(flavor, tenant) + r = self.cs.flavor_access.remove_tenant_access(flavor, tenant) self.assert_request_id(r, fakes.FAKE_REQUEST_ID_LIST) body = { @@ -59,14 +60,14 @@ class FlavorAccessTest(utils.TestCase): } } - cs.assert_called('POST', '/flavors/2/action', body) + self.cs.assert_called('POST', '/flavors/2/action', body) for a in r: self.assertIsInstance(a, flavor_access.FlavorAccess) def test_repr_flavor_access(self): - flavor = cs.flavors.get(2) + flavor = self.cs.flavors.get(2) tenant = 'proj3' - r = cs.flavor_access.add_tenant_access(flavor, tenant) + r = self.cs.flavor_access.add_tenant_access(flavor, tenant) def get_expected(flavor_access): return ("" % diff --git a/novaclient/tests/unit/v2/test_flavors.py b/novaclient/tests/unit/v2/test_flavors.py index 70eb8e40a..14bf78b3d 100644 --- a/novaclient/tests/unit/v2/test_flavors.py +++ b/novaclient/tests/unit/v2/test_flavors.py @@ -15,6 +15,7 @@ import mock +from novaclient import api_versions from novaclient import base from novaclient import exceptions from novaclient.tests.unit import utils @@ -25,12 +26,9 @@ from novaclient.v2 import flavors class FlavorsTest(utils.TestCase): def setUp(self): super(FlavorsTest, self).setUp() - self.cs = self._get_fake_client() + self.cs = fakes.FakeClient(api_versions.APIVersion("2.0")) self.flavor_type = self._get_flavor_type() - def _get_fake_client(self): - return fakes.FakeClient() - def _get_flavor_type(self): return flavors.Flavor diff --git a/novaclient/tests/unit/v2/test_quota_classes.py b/novaclient/tests/unit/v2/test_quota_classes.py index c45c731ef..a1da954d1 100644 --- a/novaclient/tests/unit/v2/test_quota_classes.py +++ b/novaclient/tests/unit/v2/test_quota_classes.py @@ -13,30 +13,31 @@ # License for the specific language governing permissions and limitations # under the License. +from novaclient import api_versions from novaclient.tests.unit import utils from novaclient.tests.unit.v2 import fakes -cs = fakes.FakeClient() - - class QuotaClassSetsTest(utils.TestCase): + def setUp(self): + super(QuotaClassSetsTest, self).setUp() + self.cs = fakes.FakeClient(api_versions.APIVersion("2.0")) def test_class_quotas_get(self): class_name = 'test' - q = cs.quota_classes.get(class_name) + q = self.cs.quota_classes.get(class_name) self.assert_request_id(q, fakes.FAKE_REQUEST_ID_LIST) - cs.assert_called('GET', '/os-quota-class-sets/%s' % class_name) + self.cs.assert_called('GET', '/os-quota-class-sets/%s' % class_name) def test_update_quota(self): - q = cs.quota_classes.get('test') + q = self.cs.quota_classes.get('test') self.assert_request_id(q, fakes.FAKE_REQUEST_ID_LIST) q.update(cores=2) - cs.assert_called('PUT', '/os-quota-class-sets/test') + self.cs.assert_called('PUT', '/os-quota-class-sets/test') def test_refresh_quota(self): - q = cs.quota_classes.get('test') - q2 = cs.quota_classes.get('test') + q = self.cs.quota_classes.get('test') + q2 = self.cs.quota_classes.get('test') self.assertEqual(q.cores, q2.cores) q2.cores = 0 self.assertNotEqual(q.cores, q2.cores) diff --git a/novaclient/tests/unit/v2/test_services.py b/novaclient/tests/unit/v2/test_services.py index 16f068e7b..320f839ac 100644 --- a/novaclient/tests/unit/v2/test_services.py +++ b/novaclient/tests/unit/v2/test_services.py @@ -20,14 +20,13 @@ from novaclient.v2 import services class ServicesTest(utils.TestCase): + api_version = "2.0" + def setUp(self): super(ServicesTest, self).setUp() - self.cs = self._get_fake_client() + self.cs = fakes.FakeClient(api_versions.APIVersion(self.api_version)) self.service_type = self._get_service_type() - def _get_fake_client(self): - return fakes.FakeClient() - def _get_service_type(self): return services.Service @@ -109,9 +108,7 @@ class ServicesTest(utils.TestCase): class ServicesV211TestCase(ServicesTest): - def setUp(self): - super(ServicesV211TestCase, self).setUp() - self.cs.api_version = api_versions.APIVersion("2.11") + api_version = "2.11" def _update_body(self, host, binary, disabled_reason=None, force_down=None): diff --git a/novaclient/tests/unit/v2/test_usage.py b/novaclient/tests/unit/v2/test_usage.py index 3109e77f3..e67178b41 100644 --- a/novaclient/tests/unit/v2/test_usage.py +++ b/novaclient/tests/unit/v2/test_usage.py @@ -15,6 +15,7 @@ import datetime import six +from novaclient import api_versions from novaclient.tests.unit import utils from novaclient.tests.unit.v2 import fakes from novaclient.v2 import usage @@ -23,12 +24,9 @@ from novaclient.v2 import usage class UsageTest(utils.TestCase): def setUp(self): super(UsageTest, self).setUp() - self.cs = self._get_fake_client() + self.cs = fakes.FakeClient(api_versions.APIVersion("2.0")) self.usage_type = self._get_usage_type() - def _get_fake_client(self): - return fakes.FakeClient() - def _get_usage_type(self): return usage.Usage diff --git a/novaclient/tests/unit/v2/test_versions.py b/novaclient/tests/unit/v2/test_versions.py index f88f534b7..30496a7ea 100644 --- a/novaclient/tests/unit/v2/test_versions.py +++ b/novaclient/tests/unit/v2/test_versions.py @@ -14,6 +14,7 @@ import mock +from novaclient import api_versions from novaclient import base from novaclient import exceptions as exc from novaclient.tests.unit import utils @@ -24,7 +25,7 @@ from novaclient.v2 import versions class VersionsTest(utils.TestCase): def setUp(self): super(VersionsTest, self).setUp() - self.cs = fakes.FakeClient() + self.cs = fakes.FakeClient(api_versions.APIVersion("2.0")) self.service_type = versions.Version @mock.patch.object(versions.VersionManager, '_is_session_client', @@ -98,7 +99,8 @@ class VersionsTest(utils.TestCase): # doesn't return uuid in url endpoint_type = 'v2.1' expected_endpoint = 'http://nova-api:8774/v2.1/' - cs_2_1 = fakes.FakeClient(endpoint_type=endpoint_type) + cs_2_1 = fakes.FakeClient(api_versions.APIVersion("2.0"), + endpoint_type=endpoint_type) result = cs_2_1.versions.get_current() self.assert_request_id(result, fakes.FAKE_REQUEST_ID_LIST) @@ -117,7 +119,8 @@ class VersionsTest(utils.TestCase): # doesn't return uuid in url endpoint_type = 'v2' expected_endpoint = 'http://nova-api:8774/v2/' - cs_2 = fakes.FakeClient(endpoint_type=endpoint_type) + cs_2 = fakes.FakeClient(api_versions.APIVersion("2.0"), + endpoint_type=endpoint_type) result = cs_2.versions.get_current() self.assert_request_id(result, fakes.FAKE_REQUEST_ID_LIST) diff --git a/novaclient/tests/unit/v2/test_volumes.py b/novaclient/tests/unit/v2/test_volumes.py index 6ff7367e2..17c4df5d0 100644 --- a/novaclient/tests/unit/v2/test_volumes.py +++ b/novaclient/tests/unit/v2/test_volumes.py @@ -13,51 +13,56 @@ # License for the specific language governing permissions and limitations # under the License. +from novaclient import api_versions from novaclient.tests.unit import utils from novaclient.tests.unit.v2 import fakes from novaclient.v2 import volumes -cs = fakes.FakeClient() - - class VolumesTest(utils.TestCase): + def setUp(self): + super(VolumesTest, self).setUp() + self.cs = fakes.FakeClient(api_versions.APIVersion("2.0")) def test_create_server_volume(self): - v = cs.volumes.create_server_volume( + v = self.cs.volumes.create_server_volume( server_id=1234, volume_id='15e59938-07d5-11e1-90e3-e3dffe0c5983', device='/dev/vdb' ) self.assert_request_id(v, fakes.FAKE_REQUEST_ID_LIST) - cs.assert_called('POST', '/servers/1234/os-volume_attachments') + self.cs.assert_called('POST', '/servers/1234/os-volume_attachments') self.assertIsInstance(v, volumes.Volume) def test_update_server_volume(self): vol_id = '15e59938-07d5-11e1-90e3-e3dffe0c5983' - v = cs.volumes.update_server_volume( + v = self.cs.volumes.update_server_volume( server_id=1234, attachment_id='Work', new_volume_id=vol_id ) self.assert_request_id(v, fakes.FAKE_REQUEST_ID_LIST) - cs.assert_called('PUT', '/servers/1234/os-volume_attachments/Work') + self.cs.assert_called('PUT', + '/servers/1234/os-volume_attachments/Work') self.assertIsInstance(v, volumes.Volume) def test_get_server_volume(self): - v = cs.volumes.get_server_volume(1234, 'Work') + v = self.cs.volumes.get_server_volume(1234, 'Work') self.assert_request_id(v, fakes.FAKE_REQUEST_ID_LIST) - cs.assert_called('GET', '/servers/1234/os-volume_attachments/Work') + self.cs.assert_called('GET', + '/servers/1234/os-volume_attachments/Work') self.assertIsInstance(v, volumes.Volume) def test_list_server_volumes(self): - vl = cs.volumes.get_server_volumes(1234) + vl = self.cs.volumes.get_server_volumes(1234) self.assert_request_id(vl, fakes.FAKE_REQUEST_ID_LIST) - cs.assert_called('GET', '/servers/1234/os-volume_attachments') + self.cs.assert_called('GET', + '/servers/1234/os-volume_attachments') for v in vl: self.assertIsInstance(v, volumes.Volume) def test_delete_server_volume(self): - ret = cs.volumes.delete_server_volume(1234, 'Work') + ret = self.cs.volumes.delete_server_volume(1234, 'Work') self.assert_request_id(ret, fakes.FAKE_REQUEST_ID_LIST) - cs.assert_called('DELETE', '/servers/1234/os-volume_attachments/Work') + self.cs.assert_called('DELETE', + '/servers/1234/os-volume_attachments/Work') diff --git a/novaclient/v2/client.py b/novaclient/v2/client.py index c6d985e25..a43a38254 100644 --- a/novaclient/v2/client.py +++ b/novaclient/v2/client.py @@ -17,7 +17,6 @@ import logging from keystoneauth1.exceptions import catalog as key_ex -from novaclient import api_versions from novaclient import client from novaclient import exceptions from novaclient.i18n import _LE @@ -137,7 +136,6 @@ class Client(object): self.limits = limits.LimitsManager(self) self.servers = servers.ServerManager(self) self.versions = versions.VersionManager(self) - self.api_version = api_version or api_versions.APIVersion("2.1") # extensions self.agents = agents.AgentsManager(self) @@ -217,6 +215,14 @@ class Client(object): logger=logger, **kwargs) + @property + def api_version(self): + return self.client.api_version + + @api_version.setter + def api_version(self, value): + self.client.api_version = value + @client._original_only def __enter__(self): self.client.open_session()