예제 #1
0
 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])
예제 #2
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)
예제 #3
0
 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')
예제 #4
0
 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])
예제 #5
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')
예제 #6
0
 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])
예제 #7
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'))
예제 #8
0
    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)
예제 #9
0
    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)
예제 #10
0
    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())
예제 #11
0
    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())
예제 #12
0
    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)
예제 #13
0
    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)
예제 #14
0
    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")
예제 #15
0
 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)
예제 #16
0
    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')
예제 #17
0
 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())
예제 #18
0
    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')
예제 #19
0
 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'])
예제 #20
0
    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)
예제 #21
0
 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==')])
예제 #22
0
    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')())
예제 #23
0
 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')")
     ])
예제 #24
0
    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)
예제 #25
0
 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)
예제 #26
0
    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)
예제 #27
0
        class Fake(object):
            api_version = api_versions.APIVersion('2.123')

            @api_versions.deprecated_after('2.123')
            def foo(self):
                pass
예제 #28
0
        class B(object):
            api_version = api_versions.APIVersion("777.777")

            @api_versions.wraps("777.777")
            def f(self):
                return 2
예제 #29
0
 def test_null_version(self):
     v = api_versions.APIVersion()
     self.assertTrue(v.is_null())
예제 #30
0
 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')