summaryrefslogtreecommitdiff
path: root/ceilometerclient/tests/unit/test_shell.py
diff options
context:
space:
mode:
Diffstat (limited to 'ceilometerclient/tests/unit/test_shell.py')
-rw-r--r--ceilometerclient/tests/unit/test_shell.py287
1 files changed, 0 insertions, 287 deletions
diff --git a/ceilometerclient/tests/unit/test_shell.py b/ceilometerclient/tests/unit/test_shell.py
deleted file mode 100644
index d666594..0000000
--- a/ceilometerclient/tests/unit/test_shell.py
+++ /dev/null
@@ -1,287 +0,0 @@
-# Licensed 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 re
-import sys
-
-import fixtures
-from keystoneauth1 import session as ks_session
-import mock
-import six
-from testtools import matchers
-
-from ceilometerclient.apiclient import client as api_client
-from ceilometerclient import client
-from ceilometerclient import exc
-from ceilometerclient import shell as ceilometer_shell
-from ceilometerclient.tests.unit import utils
-
-FAKE_V2_ENV = {'OS_USERNAME': 'username',
- 'OS_PASSWORD': 'password',
- 'OS_TENANT_NAME': 'tenant_name',
- 'OS_AUTH_URL': 'http://localhost:5000/v2.0'}
-
-FAKE_V3_ENV = {'OS_USERNAME': 'username',
- 'OS_PASSWORD': 'password',
- 'OS_USER_DOMAIN_NAME': 'domain_name',
- 'OS_PROJECT_ID': '1234567890',
- 'OS_AUTH_URL': 'http://localhost:5000/v3'}
-
-
-class ShellTestBase(utils.BaseTestCase):
-
- @mock.patch('sys.stdout', new=six.StringIO())
- @mock.patch.object(ks_session, 'Session', mock.MagicMock())
- @mock.patch.object(client.client.HTTPClient,
- 'client_request', mock.MagicMock())
- def shell(self, argstr):
- try:
- _shell = ceilometer_shell.CeilometerShell()
- _shell.main(argstr.split())
- except SystemExit:
- exc_type, exc_value, exc_traceback = sys.exc_info()
- self.assertEqual(0, exc_value.code)
-
- return sys.stdout.getvalue()
-
- # Patch os.environ to avoid required auth info.
- def make_env(self, env_version, exclude=None):
- env = dict((k, v) for k, v in env_version.items() if k != exclude)
- self.useFixture(fixtures.MonkeyPatch('os.environ', env))
-
-
-class ShellHelpTest(ShellTestBase):
- RE_OPTIONS = re.DOTALL | re.MULTILINE
-
- def test_help_unknown_command(self):
- self.assertRaises(exc.CommandError, self.shell, 'help foofoo')
-
- def test_help(self):
- required = [
- '.*?^usage: ceilometer',
- '.*?^See "ceilometer help COMMAND" '
- 'for help on a specific command',
- ]
- for argstr in ['--help', 'help']:
- help_text = self.shell(argstr)
- for r in required:
- self.assertThat(help_text,
- matchers.MatchesRegex(r,
- self.RE_OPTIONS))
-
- def test_help_on_subcommand(self):
- required = [
- '.*?^usage: ceilometer meter-list',
- ".*?^List the user's meter",
- ]
- argstrings = [
- 'help meter-list',
- ]
- for argstr in argstrings:
- help_text = self.shell(argstr)
- for r in required:
- self.assertThat(help_text,
- matchers.MatchesRegex(r, self.RE_OPTIONS))
-
- def test_get_base_parser(self):
- standalone_shell = ceilometer_shell.CeilometerShell()
- parser = standalone_shell.get_base_parser()
- self.assertEqual(600, parser.get_default('timeout'))
-
-
-class ShellBashCompletionTest(ShellTestBase):
-
- def test_bash_completion(self):
- completion_commands = self.shell("bash-completion")
- options = completion_commands.split(' ')
- self.assertNotIn('bash_completion', options)
- for option in options:
- self.assertThat(option,
- matchers.MatchesRegex(r'[a-z0-9-]'))
-
-
-class ShellKeystoneV2Test(ShellTestBase):
-
- @mock.patch.object(ks_session, 'Session')
- @mock.patch('ceilometerclient.v2.client.Client._get_redirect_client',
- mock.Mock(return_value=None))
- def test_debug_switch_raises_error(self, mock_ksclient):
- mock_ksclient.side_effect = exc.HTTPUnauthorized
- self.make_env(FAKE_V2_ENV)
- args = ['--debug', 'event-list']
- self.assertRaises(exc.CommandError, ceilometer_shell.main, args)
-
- @mock.patch.object(ks_session, 'Session')
- @mock.patch('ceilometerclient.v2.client.Client._get_redirect_client',
- mock.Mock(return_value=None))
- def test_dash_d_switch_raises_error(self, mock_ksclient):
- mock_ksclient.side_effect = exc.CommandError("FAIL")
- self.make_env(FAKE_V2_ENV)
- args = ['-d', 'event-list']
- self.assertRaises(exc.CommandError, ceilometer_shell.main, args)
-
- @mock.patch('sys.stderr')
- @mock.patch.object(ks_session, 'Session')
- def test_no_debug_switch_no_raises_errors(self, mock_ksclient, __):
- mock_ksclient.side_effect = exc.HTTPUnauthorized("FAIL")
- self.make_env(FAKE_V2_ENV)
- args = ['event-list']
- self.assertRaises(SystemExit, ceilometer_shell.main, args)
-
-
-class ShellKeystoneV3Test(ShellTestBase):
-
- @mock.patch.object(ks_session, 'Session')
- @mock.patch('ceilometerclient.v2.client.Client._get_redirect_client',
- mock.Mock(return_value=None))
- def test_debug_switch_raises_error(self, mock_ksclient):
- mock_ksclient.side_effect = exc.HTTPUnauthorized
- self.make_env(FAKE_V3_ENV)
- args = ['--debug', 'event-list']
- self.assertRaises(exc.CommandError, ceilometer_shell.main, args)
-
- @mock.patch.object(ks_session, 'Session')
- def test_dash_d_switch_raises_error(self, mock_ksclient):
- mock_ksclient.side_effect = exc.CommandError("FAIL")
- self.make_env(FAKE_V3_ENV)
- args = ['-d', 'event-list']
- self.assertRaises(exc.CommandError, ceilometer_shell.main, args)
-
- @mock.patch('sys.stderr')
- @mock.patch.object(ks_session, 'Session')
- def test_no_debug_switch_no_raises_errors(self, mock_ksclient, __):
- mock_ksclient.side_effect = exc.HTTPUnauthorized("FAIL")
- self.make_env(FAKE_V3_ENV)
- args = ['event-list']
- self.assertRaises(SystemExit, ceilometer_shell.main, args)
-
-
-class ShellTimeoutTest(ShellTestBase):
-
- @mock.patch('sys.stderr', new=six.StringIO())
- def _test_timeout(self, timeout, expected_msg):
- args = ['--timeout', timeout, 'alarm-list']
- self.assertRaises(SystemExit, ceilometer_shell.main, args)
- self.assertEqual(expected_msg, sys.stderr.getvalue().splitlines()[-1])
-
- def test_timeout_invalid_value(self):
- expected_msg = ('ceilometer: error: argument --timeout: '
- 'abc must be an integer')
- self._test_timeout('abc', expected_msg)
-
- def test_timeout_negative_value(self):
- expected_msg = ('ceilometer: error: argument --timeout: '
- '-1 must be greater than 0')
- self._test_timeout('-1', expected_msg)
-
- def test_timeout_float_value(self):
- expected_msg = ('ceilometer: error: argument --timeout: '
- '1.5 must be an integer')
- self._test_timeout('1.5', expected_msg)
-
- def test_timeout_zero(self):
- expected_msg = ('ceilometer: error: argument --timeout: '
- '0 must be greater than 0')
- self._test_timeout('0', expected_msg)
-
- @mock.patch.object(ks_session, 'Session')
- @mock.patch('ceilometerclient.v2.client.Client._get_redirect_client',
- mock.Mock(return_value=None))
- def test_timeout_keystone_session(self, mocked_session):
- mocked_session.side_effect = exc.HTTPUnauthorized("FAIL")
- self.make_env(FAKE_V2_ENV)
- args = ['--debug', '--timeout', '5', 'alarm-list']
- self.assertRaises(exc.CommandError, ceilometer_shell.main, args)
- args, kwargs = mocked_session.call_args
- self.assertEqual(5, kwargs.get('timeout'))
-
-
-class ShellInsecureTest(ShellTestBase):
-
- @mock.patch.object(api_client, 'HTTPClient')
- @mock.patch('ceilometerclient.v2.client.Client._get_redirect_client',
- mock.Mock(return_value=None))
- def test_insecure_true_ceilometer(self, mocked_client):
- self.make_env(FAKE_V2_ENV)
- args = ['--debug', '--os-insecure', 'true', 'alarm-list']
- self.assertIsNone(ceilometer_shell.main(args))
- args, kwargs = mocked_client.call_args
- self.assertFalse(kwargs.get('verify'))
-
- @mock.patch.object(ks_session, 'Session')
- @mock.patch('ceilometerclient.v2.client.Client._get_redirect_client',
- mock.Mock(return_value=None))
- def test_insecure_true_keystone(self, mocked_session):
- mocked_session.side_effect = exc.HTTPUnauthorized("FAIL")
- self.make_env(FAKE_V2_ENV)
- args = ['--debug', '--os-insecure', 'true', 'alarm-list']
- self.assertRaises(exc.CommandError, ceilometer_shell.main, args)
- args, kwargs = mocked_session.call_args
- self.assertFalse(kwargs.get('verify'))
-
- @mock.patch.object(api_client, 'HTTPClient')
- @mock.patch('ceilometerclient.v2.client.Client._get_redirect_client',
- mock.Mock(return_value=None))
- def test_insecure_false_ceilometer(self, mocked_client):
- self.make_env(FAKE_V2_ENV)
- args = ['--debug', '--os-insecure', 'false', 'alarm-list']
- self.assertIsNone(ceilometer_shell.main(args))
- args, kwargs = mocked_client.call_args
- self.assertTrue(kwargs.get('verify'))
-
- @mock.patch.object(ks_session, 'Session')
- @mock.patch('ceilometerclient.v2.client.Client._get_redirect_client',
- mock.Mock(return_value=None))
- def test_insecure_false_keystone(self, mocked_session):
- mocked_session.side_effect = exc.HTTPUnauthorized("FAIL")
- self.make_env(FAKE_V2_ENV)
- args = ['--debug', '--os-insecure', 'false', 'alarm-list']
- self.assertRaises(exc.CommandError, ceilometer_shell.main, args)
- args, kwargs = mocked_session.call_args
- self.assertTrue(kwargs.get('verify'))
-
-
-class ShellEndpointTest(ShellTestBase):
-
- @mock.patch('ceilometerclient.v2.client.Client')
- def _test_endpoint_and_token(self, token_name, endpoint_name, mocked):
- args = ['--debug', token_name, 'fake-token',
- endpoint_name, 'http://fake-url', 'alarm-list']
- self.assertIsNone(ceilometer_shell.main(args))
- args, kwargs = mocked.call_args
- self.assertEqual('http://fake-url', kwargs.get('endpoint'))
- self.assertEqual('fake-token', kwargs.get('token'))
-
- def test_endpoint_and_token(self):
- self._test_endpoint_and_token('--os-auth-token', '--ceilometer-url')
- self._test_endpoint_and_token('--os-auth-token', '--os-endpoint')
- self._test_endpoint_and_token('--os-token', '--ceilometer-url')
- self._test_endpoint_and_token('--os-token', '--os-endpoint')
-
-
-class ShellAlarmUpdateRepeatAction(ShellTestBase):
- @mock.patch('ceilometerclient.v2.alarms.AlarmManager.update')
- @mock.patch('ceilometerclient.v2.client.Client._get_redirect_client',
- mock.Mock())
- def test_repeat_action_not_specified(self, mocked):
- self.make_env(FAKE_V2_ENV)
-
- def _test(method):
- args = ['--debug', method, '--state', 'alarm', '123']
- ceilometer_shell.main(args)
- args, kwargs = mocked.call_args
- self.assertIsNone(kwargs.get('repeat_actions'))
-
- _test('alarm-update')
- _test('alarm-threshold-update')
- _test('alarm-combination-update')
- _test('alarm-event-update')