diff --git a/ceilometerclient/shell.py b/ceilometerclient/shell.py index 53320682..21bbb982 100644 --- a/ceilometerclient/shell.py +++ b/ceilometerclient/shell.py @@ -327,12 +327,18 @@ class HelpFormatter(argparse.HelpFormatter): super(HelpFormatter, self).start_section(heading) -def main(): +def main(args=None): try: - CeilometerShell().main(sys.argv[1:]) + if args is None: + args = sys.argv[1:] + + CeilometerShell().main(args) except Exception as e: - print(strutils.safe_encode(six.text_type(e)), file=sys.stderr) + if '--debug' in args or '-d' in args: + raise + else: + print(strutils.safe_encode(six.text_type(e)), file=sys.stderr) sys.exit(1) if __name__ == "__main__": diff --git a/ceilometerclient/tests/test_shell.py b/ceilometerclient/tests/test_shell.py index 087ccd10..1536abc1 100644 --- a/ceilometerclient/tests/test_shell.py +++ b/ceilometerclient/tests/test_shell.py @@ -94,3 +94,24 @@ class ShellTest(utils.BaseTestCase): def test_auth_param(self): self.make_env(exclude='OS_USERNAME') self.test_help() + + @mock.patch.object(ksclient, 'Client') + def test_debug_switch_raises_error(self, mock_ksclient): + mock_ksclient.side_effect = exc.Unauthorized + self.make_env() + args = ['--debug', 'event-list'] + self.assertRaises(exc.Unauthorized, ceilometer_shell.main, args) + + @mock.patch.object(ksclient, 'Client') + def test_dash_d_switch_raises_error(self, mock_ksclient): + mock_ksclient.side_effect = exc.CommandError("FAIL") + self.make_env() + args = ['-d', 'event-list'] + self.assertRaises(exc.CommandError, ceilometer_shell.main, args) + + @mock.patch.object(ksclient, 'Client') + def test_no_debug_switch_no_raises_errors(self, mock_ksclient): + mock_ksclient.side_effect = exc.Unauthorized("FAIL") + self.make_env() + args = ['event-list'] + self.assertRaises(SystemExit, ceilometer_shell.main, args)