From b146e97c77eaa77922831f9c87a5b00ad1e3d460 Mon Sep 17 00:00:00 2001 From: Chmouel Boudjnah Date: Sun, 19 Jan 2014 00:00:15 -0800 Subject: [PATCH] Raise traceback on error when using CLI and -debug When --debug is specified to the CLI don't just print the simple error message but actually reraise that error. Change-Id: Iac624dbb3490d29e32a9ea251c14766186df31db --- ceilometerclient/shell.py | 12 +++++++++--- ceilometerclient/tests/test_shell.py | 21 +++++++++++++++++++++ 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/ceilometerclient/shell.py b/ceilometerclient/shell.py index 57cb604..92ae619 100644 --- a/ceilometerclient/shell.py +++ b/ceilometerclient/shell.py @@ -320,12 +320,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 c71e10b..535be00 100644 --- a/ceilometerclient/tests/test_shell.py +++ b/ceilometerclient/tests/test_shell.py @@ -100,3 +100,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)