def test_microversion_with_default_behaviour(self, mock_client): self.make_env(fake_env=FAKE_ENV6) self.mock_server_version_range.return_value = ( api_versions.APIVersion("2.1"), api_versions.APIVersion("2.3")) self.shell('list') client_args = mock_client.call_args_list[1][0] self.assertEqual(api_versions.APIVersion("2.3"), client_args[0])
def test_get_string(self): v1_string = "3.23" v1 = api_versions.APIVersion(v1_string) self.assertEqual(v1_string, v1.get_string()) self.assertRaises(ValueError, api_versions.APIVersion().get_string)
def test_microversion_with_specific_version_without_microversions(self): self.make_env() self.mock_server_version_range.return_value = ( api_versions.APIVersion(), api_versions.APIVersion()) jacketclient.API_MAX_VERSION = api_versions.APIVersion("2.100") jacketclient.API_MIN_VERSION = api_versions.APIVersion("2.1") self.assertRaises(exceptions.UnsupportedVersion, self.shell, '--os-jacket-api-version 2.3 list')
def test_microversion_with_latest(self, mock_client): self.make_env() jacketclient.API_MAX_VERSION = api_versions.APIVersion('2.3') self.mock_server_version_range.return_value = ( api_versions.APIVersion("2.1"), api_versions.APIVersion("2.3")) self.shell('--os-jacket-api-version 2.latest list') client_args = mock_client.call_args_list[1][0] self.assertEqual(api_versions.APIVersion("2.3"), client_args[0])
def test_microversion_with_v2_without_server_compatible(self, mock_client): self.make_env() self.mock_server_version_range.return_value = ( api_versions.APIVersion('2.2'), api_versions.APIVersion('2.3')) jacketclient.API_MAX_VERSION = api_versions.APIVersion("2.100") jacketclient.API_MIN_VERSION = api_versions.APIVersion("2.1") self.assertRaises(exceptions.UnsupportedVersion, self.shell, '--os-jacket-api-version 2 list')
def test_microversion_with_v2_and_v2_server(self, mock_client): self.make_env() self.mock_server_version_range.return_value = ( api_versions.APIVersion(), api_versions.APIVersion()) jacketclient.API_MAX_VERSION = api_versions.APIVersion("2.100") jacketclient.API_MIN_VERSION = api_versions.APIVersion("2.1") self.shell('--os-jacket-api-version 2 list') client_args = mock_client.call_args_list[1][0] self.assertEqual(api_versions.APIVersion("2.0"), client_args[0])
def test_server_is_too_new(self): fake_client = mock.MagicMock() fake_client.versions.get_current.return_value = mock.MagicMock( version="2.7", min_version="2.4") jacketclient.API_MAX_VERSION = api_versions.APIVersion("2.3") jacketclient.API_MIN_VERSION = api_versions.APIVersion("2.1") self.assertRaises(exceptions.UnsupportedVersion, api_versions.discover_version, fake_client, api_versions.APIVersion('2.latest'))
def test_microversion_is_not_specified(self): response = mock.MagicMock( headers={api_versions.LEGACY_HEADER_NAME: ""}) api_versions.check_headers(response, api_versions.APIVersion("2.2")) self.assertFalse(self.mock_log.warning.called) response = mock.MagicMock(headers={}) api_versions.check_headers(response, api_versions.APIVersion("2.0")) self.assertFalse(self.mock_log.warning.called)
def test_generic_microversion_is_specified(self): response = mock.MagicMock( headers={api_versions.HEADER_NAME: ""}) api_versions.check_headers(response, api_versions.APIVersion("2.27")) self.assertFalse(self.mock_log.warning.called) response = mock.MagicMock(headers={}) api_versions.check_headers(response, api_versions.APIVersion("2.27")) self.assertTrue(self.mock_log.warning.called)
def test_server_without_microversion_rax_workaround(self): fake_client = mock.MagicMock() fake_client.versions.get_current.return_value = None jacketclient.API_MAX_VERSION = api_versions.APIVersion("2.11") jacketclient.API_MIN_VERSION = api_versions.APIVersion("2.1") self.assertEqual( "2.0", api_versions.discover_version( fake_client, api_versions.APIVersion('2.latest')).get_string())
def test_client_end_version_is_the_latest_one(self): fake_client = mock.MagicMock() fake_client.versions.get_current.return_value = mock.MagicMock( version="2.16", min_version="2.4") jacketclient.API_MAX_VERSION = api_versions.APIVersion("2.11") jacketclient.API_MIN_VERSION = api_versions.APIVersion("2.1") self.assertEqual( "2.11", api_versions.discover_version( fake_client, api_versions.APIVersion('2.latest')).get_string())
def test_end_version_is_none(self, mock_versioned_method, mock_name): mock_versioned_method.side_effect = self._side_effect_of_vers_method @api_versions.wraps("2.2") def foo(*args, **kwargs): pass foo(self._get_obj_with_vers("2.4")) mock_versioned_method.assert_called_once_with( mock_name.return_value, api_versions.APIVersion("2.2"), api_versions.APIVersion("2.latest"), mock.ANY)
def test_api_version_doesnt_match(self, mock_versioned_method, mock_name): mock_versioned_method.side_effect = self._side_effect_of_vers_method @api_versions.wraps("2.2", "2.6") def foo(*args, **kwargs): pass self.assertRaises(exceptions.VersionNotFoundForAPIMethod, foo, self._get_obj_with_vers("2.1")) mock_versioned_method.assert_called_once_with( mock_name.return_value, api_versions.APIVersion("2.2"), api_versions.APIVersion("2.6"), mock.ANY)
def test_version_comparisons(self): v1 = api_versions.APIVersion("2.0") v2 = api_versions.APIVersion("2.5") v3 = api_versions.APIVersion("5.23") v4 = api_versions.APIVersion("2.0") v_null = api_versions.APIVersion() self.assertTrue(v1 < v2) self.assertTrue(v3 > v2) self.assertTrue(v1 != v2) self.assertTrue(v1 == v4) self.assertTrue(v1 != v_null) self.assertTrue(v_null == v_null) self.assertRaises(TypeError, v1.__le__, "2.1")
def test_api_version_is_not_null(self): api_version = api_versions.APIVersion("2.3") headers = {} api_versions.update_headers(headers, api_version) self.assertEqual( {"X-OpenStack-Nova-API-Version": api_version.get_string()}, headers)
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') # Missing stuff still fails after a second get self.assertRaises(AttributeError, getattr, f, 'blahblah')
def test_load_versioned_actions_not_in_version_range(self): parser = jacketclient.shell.NovaClientArgumentParser() subparsers = parser.add_subparsers(metavar='<subcommand>') shell = jacketclient.shell.OpenStackComputeShell() shell.subcommands = {} shell._find_actions(subparsers, fake_actions_module, api_versions.APIVersion("2.10000"), False) self.assertNotIn('fake-action', shell.subcommands.keys()) self.assertIn('fake-action2', shell.subcommands.keys())
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') # However, find() should raise an error self.assertRaises(exceptions.NotFound, cs.flavors.find, vegetable='carrot')
def test_api_version_is_gte_27(self): api_version = api_versions.APIVersion("2.27") headers = {} api_versions.update_headers(headers, api_version) self.assertIn('X-OpenStack-Nova-API-Version', headers) self.assertIn('OpenStack-API-Version', headers) self.assertEqual(api_version.get_string(), headers['X-OpenStack-Nova-API-Version']) self.assertEqual('%s %s' % (api_versions.SERVICE_TYPE, api_version.get_string()), headers['OpenStack-API-Version'])
def test_load_actions_with_versioned_args(self, mock_add_arg): parser = jacketclient.shell.NovaClientArgumentParser(add_help=False) subparsers = parser.add_subparsers(metavar='<subcommand>') shell = jacketclient.shell.OpenStackComputeShell() shell.subcommands = {} shell._find_actions(subparsers, fake_actions_module, api_versions.APIVersion("2.20"), False) self.assertIn(mock.call('--foo', help="first foo"), mock_add_arg.call_args_list) self.assertNotIn(mock.call('--foo', help="second foo"), mock_add_arg.call_args_list) mock_add_arg.reset_mock() shell._find_actions(subparsers, fake_actions_module, api_versions.APIVersion("2.21"), False) self.assertNotIn(mock.call('--foo', help="first foo"), mock_add_arg.call_args_list) self.assertIn(mock.call('--foo', help="second foo"), mock_add_arg.call_args_list)
def test_load_versioned_actions_with_args_not_in_version_range( self, mock_add_arg): parser = jacketclient.shell.NovaClientArgumentParser(add_help=False) subparsers = parser.add_subparsers(metavar='<subcommand>') shell = jacketclient.shell.OpenStackComputeShell() shell.subcommands = {} shell._find_actions(subparsers, fake_actions_module, api_versions.APIVersion("2.10000"), False) self.assertIn('fake-action2', shell.subcommands.keys()) mock_add_arg.assert_has_calls( [mock.call('-h', '--help', action='help', help='==SUPPRESS==')])
def test_load_versioned_actions(self): parser = jacketclient.shell.NovaClientArgumentParser() subparsers = parser.add_subparsers(metavar='<subcommand>') shell = jacketclient.shell.OpenStackComputeShell() shell.subcommands = {} shell._find_actions(subparsers, fake_actions_module, api_versions.APIVersion("2.15"), False) self.assertIn('fake-action', shell.subcommands.keys()) self.assertEqual( 1, shell.subcommands['fake-action'].get_default('func')()) shell.subcommands = {} shell._find_actions(subparsers, fake_actions_module, api_versions.APIVersion("2.25"), False) self.assertIn('fake-action', shell.subcommands.keys()) self.assertEqual( 2, shell.subcommands['fake-action'].get_default('func')()) self.assertIn('fake-action2', shell.subcommands.keys()) self.assertEqual( 3, shell.subcommands['fake-action2'].get_default('func')())
def test_load_versioned_actions_with_args_and_help(self, mock_add_arg): parser = jacketclient.shell.NovaClientArgumentParser(add_help=False) subparsers = parser.add_subparsers(metavar='<subcommand>') shell = jacketclient.shell.OpenStackComputeShell() shell.subcommands = {} shell._find_actions(subparsers, fake_actions_module, api_versions.APIVersion("2.4"), True) mock_add_arg.assert_has_calls([ mock.call('-h', '--help', action='help', help='==SUPPRESS=='), mock.call('--bar', help=" (Supported by API versions '2.3' - '2.4')") ])
def test_arguments_property_is_copied(self, mock_name): @nutils.arg("argument_1") @api_versions.wraps("2.666", "2.777") @nutils.arg("argument_2") def some_func(): pass versioned_method = api_versions.get_substitutions( mock_name.return_value, api_versions.APIVersion("2.700"))[0] self.assertEqual(some_func.arguments, versioned_method.func.arguments) self.assertIn((("argument_1",), {}), versioned_method.func.arguments) self.assertIn((("argument_2",), {}), versioned_method.func.arguments)
def test_load_versioned_actions_with_help(self): parser = jacketclient.shell.NovaClientArgumentParser() subparsers = parser.add_subparsers(metavar='<subcommand>') shell = jacketclient.shell.OpenStackComputeShell() shell.subcommands = {} shell._find_actions(subparsers, fake_actions_module, api_versions.APIVersion("2.15"), True) self.assertIn('fake-action', shell.subcommands.keys()) expected_desc = (" (Supported by API versions '%(start)s' - " "'%(end)s')") % { 'start': '2.10', 'end': '2.30' } self.assertEqual(expected_desc, shell.subcommands['fake-action'].description)
def test_version_matches(self): v1 = api_versions.APIVersion("2.0") v2 = api_versions.APIVersion("2.5") v3 = api_versions.APIVersion("2.45") v4 = api_versions.APIVersion("3.3") v5 = api_versions.APIVersion("3.23") v6 = api_versions.APIVersion("2.0") v7 = api_versions.APIVersion("3.3") v8 = api_versions.APIVersion("4.0") v_null = api_versions.APIVersion() self.assertTrue(v2.matches(v1, v3)) self.assertTrue(v2.matches(v1, v_null)) self.assertTrue(v1.matches(v6, v2)) self.assertTrue(v4.matches(v2, v7)) self.assertTrue(v4.matches(v_null, v7)) self.assertTrue(v4.matches(v_null, v8)) self.assertFalse(v1.matches(v2, v3)) self.assertFalse(v5.matches(v2, v4)) self.assertFalse(v2.matches(v3, v1)) self.assertRaises(ValueError, v_null.matches, v1, v3)
class Fake(object): api_version = api_versions.APIVersion('2.123') @api_versions.deprecated_after('2.123') def foo(self): pass
class B(object): api_version = api_versions.APIVersion("777.777") @api_versions.wraps("777.777") def f(self): return 2
def test_null_version(self): v = api_versions.APIVersion() self.assertTrue(v.is_null())
def test_microversion_with_specified_version_out_of_range( self, mock_client): jacketclient.API_MAX_VERSION = api_versions.APIVersion("2.100") jacketclient.API_MIN_VERSION = api_versions.APIVersion("2.90") self.assertRaises(exceptions.CommandError, self.shell, '--os-jacket-api-version 2.199 list')