diff options
author | ZhiQiang Fan <zhiqiang.fan@huawei.com> | 2014-05-30 17:20:47 +0800 |
---|---|---|
committer | ZhiQiang Fan <zhiqiang.fan@huawei.com> | 2014-05-30 17:24:27 +0800 |
commit | c343b184b80d339389a8af1b994f3e82187a6435 (patch) | |
tree | 8e5a03bb9c0d274f08d717ad87cf78522e7b4103 /ceilometerclient | |
parent | d55038ceafdd49ac60ba1e115c331583b430f1ee (diff) | |
download | python-ceilometerclient-c343b184b80d339389a8af1b994f3e82187a6435.tar.gz |
use mock instead of try...finally
There are some test code use try...finally block to catch or ignore
the stdout message. The job can be done by mock too, and it is cleaner.
Change-Id: I0c29382e7bcd0b7f399565b26f27315f7e17a8fc
Diffstat (limited to 'ceilometerclient')
-rw-r--r-- | ceilometerclient/tests/test_shell.py | 9 | ||||
-rw-r--r-- | ceilometerclient/tests/test_utils.py | 21 | ||||
-rw-r--r-- | ceilometerclient/tests/v2/test_shell.py | 197 |
3 files changed, 85 insertions, 142 deletions
diff --git a/ceilometerclient/tests/test_shell.py b/ceilometerclient/tests/test_shell.py index 82329b4..80009aa 100644 --- a/ceilometerclient/tests/test_shell.py +++ b/ceilometerclient/tests/test_shell.py @@ -42,24 +42,19 @@ class ShellTest(utils.BaseTestCase): def setUp(self): super(ShellTest, self).setUp() + @mock.patch('sys.stdout', new=six.StringIO()) @mock.patch.object(ksclient, 'Client') @mock.patch.object(v1client.http.HTTPClient, 'json_request') @mock.patch.object(v1client.http.HTTPClient, 'raw_request') def shell(self, argstr, mock_ksclient, mock_json, mock_raw): - orig = sys.stdout try: - sys.stdout = six.StringIO() _shell = ceilometer_shell.CeilometerShell() _shell.main(argstr.split()) except SystemExit: exc_type, exc_value, exc_traceback = sys.exc_info() self.assertEqual(exc_value.code, 0) - finally: - out = sys.stdout.getvalue() - sys.stdout.close() - sys.stdout = orig - return out + return sys.stdout.getvalue() def test_help_unknown_command(self): self.assertRaises(exc.CommandError, self.shell, 'help foofoo') diff --git a/ceilometerclient/tests/test_utils.py b/ceilometerclient/tests/test_utils.py index 9082328..8840fb8 100644 --- a/ceilometerclient/tests/test_utils.py +++ b/ceilometerclient/tests/test_utils.py @@ -17,7 +17,6 @@ import itertools import mock import six -import sys from ceilometerclient.common import utils from ceilometerclient.tests import utils as test_utils @@ -31,22 +30,16 @@ class UtilsTest(test_utils.BaseTestCase): self.__dict__.update(entries) # test that the prettytable output is wellformatted (left-aligned) - saved_stdout = sys.stdout - try: - sys.stdout = output_dict = six.StringIO() + with mock.patch('sys.stdout', new=six.StringIO()) as stdout: utils.print_dict({'K': 'k', 'Key': 'Value'}) - - finally: - sys.stdout = saved_stdout - - self.assertEqual(output_dict.getvalue(), '''\ + self.assertEqual('''\ +----------+-------+ | Property | Value | +----------+-------+ | K | k | | Key | Value | +----------+-------+ -''') +''', stdout.getvalue()) def test_print_list(self): class Foo: @@ -61,17 +54,13 @@ class UtilsTest(test_utils.BaseTestCase): Foo(12, '0', 'Z')] def do_print_list(sortby): - saved_stdout = sys.stdout - try: - sys.stdout = output = six.StringIO() + with mock.patch('sys.stdout', new=six.StringIO()) as stdout: utils.print_list(foo_list, ['one', 'two', 'three'], ['1st', '2nd', '3rd'], {'one': lambda o: o.one * 10}, sortby) - finally: - sys.stdout = saved_stdout - return output.getvalue() + return stdout.getvalue() printed = do_print_list(None) self.assertEqual(printed, '''\ diff --git a/ceilometerclient/tests/v2/test_shell.py b/ceilometerclient/tests/v2/test_shell.py index 80c57c8..ebb9129 100644 --- a/ceilometerclient/tests/v2/test_shell.py +++ b/ceilometerclient/tests/v2/test_shell.py @@ -107,32 +107,27 @@ class ShellAlarmHistoryCommandTest(utils.BaseTestCase): self.args = mock.Mock() self.args.alarm_id = self.ALARM_ID + @mock.patch('sys.stdout', new=six.StringIO()) def _do_test_alarm_history(self, raw_query=None, parsed_query=None): self.args.query = raw_query - orig = sys.stdout - sys.stdout = six.StringIO() history = [alarms.AlarmChange(mock.Mock(), change) for change in self.ALARM_HISTORY] self.cc.alarms.get_history.return_value = history - try: - ceilometer_shell.do_alarm_history(self.cc, self.args) - self.cc.alarms.get_history.assert_called_once_with( - q=parsed_query, - alarm_id=self.ALARM_ID - ) - out = sys.stdout.getvalue() - required = [ - '.*creation%sname: scombo.*' % self.TIMESTAMP_RE, - '.*rule change%sdescription: combination of one.*' % - self.TIMESTAMP_RE, - '.*state transition%sstate: alarm.*' % self.TIMESTAMP_RE, - ] - for r in required: - self.assertThat(out, matchers.MatchesRegex(r, re.DOTALL)) - finally: - sys.stdout.close() - sys.stdout = orig + ceilometer_shell.do_alarm_history(self.cc, self.args) + self.cc.alarms.get_history.assert_called_once_with( + q=parsed_query, + alarm_id=self.ALARM_ID + ) + out = sys.stdout.getvalue() + required = [ + '.*creation%sname: scombo.*' % self.TIMESTAMP_RE, + '.*rule change%sdescription: combination of one.*' % + self.TIMESTAMP_RE, + '.*state transition%sstate: alarm.*' % self.TIMESTAMP_RE, + ] + for r in required: + self.assertThat(out, matchers.MatchesRegex(r, re.DOTALL)) def test_alarm_all_history(self): self._do_test_alarm_history() @@ -190,28 +185,23 @@ class ShellAlarmCommandTest(utils.BaseTestCase): self.args = mock.Mock() self.args.alarm_id = self.ALARM_ID + @mock.patch('sys.stdout', new=six.StringIO()) def _do_test_alarm_update_repeat_actions(self, method, repeat_actions): self.args.threshold = 42.0 if repeat_actions is not None: self.args.repeat_actions = repeat_actions - orig = sys.stdout - sys.stdout = six.StringIO() alarm = [alarms.Alarm(mock.Mock(), self.ALARM)] self.cc.alarms.get.return_value = alarm self.cc.alarms.update.return_value = alarm[0] - try: - method(self.cc, self.args) - args, kwargs = self.cc.alarms.update.call_args - self.assertEqual(self.ALARM_ID, args[0]) - self.assertEqual(42.0, kwargs.get('threshold')) - if repeat_actions is not None: - self.assertEqual(repeat_actions, kwargs.get('repeat_actions')) - else: - self.assertFalse('repeat_actions' in kwargs) - finally: - sys.stdout.close() - sys.stdout = orig + method(self.cc, self.args) + args, kwargs = self.cc.alarms.update.call_args + self.assertEqual(self.ALARM_ID, args[0]) + self.assertEqual(42.0, kwargs.get('threshold')) + if repeat_actions is not None: + self.assertEqual(repeat_actions, kwargs.get('repeat_actions')) + else: + self.assertFalse('repeat_actions' in kwargs) def test_alarm_update_repeat_actions_untouched(self): method = ceilometer_shell.do_alarm_update @@ -249,6 +239,7 @@ class ShellAlarmCommandTest(utils.BaseTestCase): method = ceilometer_shell.do_alarm_threshold_update self._do_test_alarm_update_repeat_actions(method, False) + @mock.patch('sys.stdout', new=six.StringIO()) def test_alarm_threshold_create_args(self): shell = base_shell.CeilometerShell() argv = ['alarm-threshold-create', @@ -265,33 +256,28 @@ class ShellAlarmCommandTest(utils.BaseTestCase): '--query', 'resource_id=INSTANCE_ID'] _, args = shell.parse_args(argv) - orig = sys.stdout - sys.stdout = six.StringIO() alarm = alarms.Alarm(mock.Mock(), self.ALARM) self.cc.alarms.create.return_value = alarm - try: - ceilometer_shell.do_alarm_threshold_create(self.cc, args) - _, kwargs = self.cc.alarms.create.call_args - self.assertEqual('cpu_high', kwargs.get('name')) - self.assertEqual('instance running hot', kwargs.get('description')) - actions = ['log://', 'http://example.com/alarm/state'] - self.assertEqual(actions, kwargs.get('alarm_actions')) - self.assertTrue('threshold_rule' in kwargs) - rule = kwargs['threshold_rule'] - self.assertEqual('cpu_util', rule.get('meter_name')) - self.assertEqual(70.0, rule.get('threshold')) - self.assertEqual('gt', rule.get('comparison_operator')) - self.assertEqual('avg', rule.get('statistic')) - self.assertEqual(600, rule.get('period')) - self.assertEqual(3, rule.get('evaluation_periods')) - query = dict(field='resource_id', type='', - value='INSTANCE_ID', op='eq') - self.assertEqual([query], rule['query']) - finally: - sys.stdout.close() - sys.stdout = orig - + ceilometer_shell.do_alarm_threshold_create(self.cc, args) + _, kwargs = self.cc.alarms.create.call_args + self.assertEqual('cpu_high', kwargs.get('name')) + self.assertEqual('instance running hot', kwargs.get('description')) + actions = ['log://', 'http://example.com/alarm/state'] + self.assertEqual(actions, kwargs.get('alarm_actions')) + self.assertTrue('threshold_rule' in kwargs) + rule = kwargs['threshold_rule'] + self.assertEqual('cpu_util', rule.get('meter_name')) + self.assertEqual(70.0, rule.get('threshold')) + self.assertEqual('gt', rule.get('comparison_operator')) + self.assertEqual('avg', rule.get('statistic')) + self.assertEqual(600, rule.get('period')) + self.assertEqual(3, rule.get('evaluation_periods')) + query = dict(field='resource_id', type='', + value='INSTANCE_ID', op='eq') + self.assertEqual([query], rule['query']) + + @mock.patch('sys.stdout', new=six.StringIO()) def test_alarm_create_time_constraints(self): shell = base_shell.CeilometerShell() argv = ['alarm-threshold-create', @@ -305,22 +291,16 @@ class ShellAlarmCommandTest(utils.BaseTestCase): ] _, args = shell.parse_args(argv) - orig = sys.stdout - sys.stdout = six.StringIO() alarm = alarms.Alarm(mock.Mock(), self.ALARM) self.cc.alarms.create.return_value = alarm - try: - ceilometer_shell.do_alarm_threshold_create(self.cc, args) - _, kwargs = self.cc.alarms.create.call_args - time_constraints = [dict(name='cons1', start='0 11 * * *', - duration='300'), - dict(name='cons2', start='0 23 * * *', - duration='600')] - self.assertEqual(time_constraints, kwargs['time_constraints']) - finally: - sys.stdout.close() - sys.stdout = orig + ceilometer_shell.do_alarm_threshold_create(self.cc, args) + _, kwargs = self.cc.alarms.create.call_args + time_constraints = [dict(name='cons1', start='0 11 * * *', + duration='300'), + dict(name='cons2', start='0 23 * * *', + duration='600')] + self.assertEqual(time_constraints, kwargs['time_constraints']) class ShellSampleListCommandTest(utils.BaseTestCase): @@ -359,24 +339,19 @@ class ShellSampleListCommandTest(utils.BaseTestCase): self.args.query = None self.args.limit = None + @mock.patch('sys.stdout', new=six.StringIO()) def test_sample_list(self): - sample_list = [samples.Sample(mock.Mock(), sample) for sample in self.SAMPLES] self.cc.samples.list.return_value = sample_list - org_stdout = sys.stdout - try: - sys.stdout = output = six.StringIO() - ceilometer_shell.do_sample_list(self.cc, self.args) - self.cc.samples.list.assert_called_once_with( - meter_name=self.METER, - q=None, - limit=None) - finally: - sys.stdout = org_stdout - - self.assertEqual(output.getvalue(), '''\ + ceilometer_shell.do_sample_list(self.cc, self.args) + self.cc.samples.list.assert_called_once_with( + meter_name=self.METER, + q=None, + limit=None) + + self.assertEqual('''\ +--------------------------------------+----------+-------+----------------\ +------+---------------------+ | Resource ID | Name | Type | Volume \ @@ -393,7 +368,7 @@ class ShellSampleListCommandTest(utils.BaseTestCase): | % | 2013-10-15T05:40:29 | +--------------------------------------+----------+-------+----------------\ +------+---------------------+ -''') +''', sys.stdout.getvalue()) class ShellSampleCreateCommandTest(utils.BaseTestCase): @@ -427,19 +402,15 @@ class ShellSampleCreateCommandTest(utils.BaseTestCase): self.args.resource_id = self.RESOURCE_ID self.args.sample_volume = self.SAMPLE_VOLUME + @mock.patch('sys.stdout', new=six.StringIO()) def test_sample_create(self): - ret_sample = [samples.Sample(mock.Mock(), sample) for sample in self.SAMPLE] self.cc.samples.create.return_value = ret_sample - org_stdout = sys.stdout - try: - sys.stdout = output = six.StringIO() - ceilometer_shell.do_sample_create(self.cc, self.args) - finally: - sys.stdout = org_stdout - - self.assertEqual(output.getvalue(), '''\ + + ceilometer_shell.do_sample_create(self.cc, self.args) + + self.assertEqual('''\ +-------------------+---------------------------------------------+ | Property | Value | +-------------------+---------------------------------------------+ @@ -455,7 +426,7 @@ class ShellSampleCreateCommandTest(utils.BaseTestCase): | user_id | 21b442b8101d407d8242b6610e0ed0eb | | volume | 1.0 | +-------------------+---------------------------------------------+ -''') +''', sys.stdout.getvalue()) class ShellQuerySamplesCommandTest(utils.BaseTestCase): @@ -487,17 +458,13 @@ class ShellQuerySamplesCommandTest(utils.BaseTestCase): self.args.orderby = self.QUERY["orderby"] self.args.limit = self.QUERY["limit"] + @mock.patch('sys.stdout', new=six.StringIO()) def test_query(self): - ret_sample = [samples.Sample(mock.Mock(), sample) for sample in self.SAMPLE] self.cc.query_samples.query.return_value = ret_sample - org_stdout = sys.stdout - try: - sys.stdout = output = six.StringIO() - ceilometer_shell.do_query_samples(self.cc, self.args) - finally: - sys.stdout = org_stdout + + ceilometer_shell.do_query_samples(self.cc, self.args) self.assertEqual('''\ +--------------------------------------+----------+-------+--------+---------\ @@ -510,7 +477,7 @@ class ShellQuerySamplesCommandTest(utils.BaseTestCase): | 2014-02-19T05:50:16.673604 | +--------------------------------------+----------+-------+--------+---------\ -+----------------------------+ -''', output.getvalue()) +''', sys.stdout.getvalue()) class ShellQueryAlarmsCommandTest(utils.BaseTestCase): @@ -549,17 +516,13 @@ class ShellQueryAlarmsCommandTest(utils.BaseTestCase): self.args.orderby = self.QUERY["orderby"] self.args.limit = self.QUERY["limit"] + @mock.patch('sys.stdout', new=six.StringIO()) def test_query(self): - ret_alarm = [alarms.Alarm(mock.Mock(), alarm) for alarm in self.ALARM] self.cc.query_alarms.query.return_value = ret_alarm - org_stdout = sys.stdout - try: - sys.stdout = output = six.StringIO() - ceilometer_shell.do_query_alarms(self.cc, self.args) - finally: - sys.stdout = org_stdout + + ceilometer_shell.do_query_alarms(self.cc, self.args) self.assertEqual('''\ +--------------------------------------+------------------+-------+---------\ @@ -577,7 +540,7 @@ class ShellQueryAlarmsCommandTest(utils.BaseTestCase): +--------------------------------------+------------------+-------+---------\ +------------+--------------------------------------------------------------\ ----------------------------------------+ -''', output.getvalue()) +''', sys.stdout.getvalue()) class ShellQueryAlarmHistoryCommandTest(utils.BaseTestCase): @@ -606,17 +569,13 @@ class ShellQueryAlarmHistoryCommandTest(utils.BaseTestCase): self.args.orderby = self.QUERY["orderby"] self.args.limit = self.QUERY["limit"] + @mock.patch('sys.stdout', new=six.StringIO()) def test_query(self): - ret_alarm_history = [alarms.AlarmChange(mock.Mock(), alarm_history) for alarm_history in self.ALARM_HISTORY] self.cc.query_alarm_history.query.return_value = ret_alarm_history - org_stdout = sys.stdout - try: - sys.stdout = output = six.StringIO() - ceilometer_shell.do_query_alarm_history(self.cc, self.args) - finally: - sys.stdout = org_stdout + + ceilometer_shell.do_query_alarm_history(self.cc, self.args) self.assertEqual('''\ +----------------------------------+--------------------------------------+-\ @@ -634,7 +593,7 @@ rule change | {"threshold": 42.0, "evaluation_periods": 4} | 2014-03-11T16:0\ +----------------------------------+--------------------------------------+-\ ------------+----------------------------------------------+----------------\ ------------+ -''', output.getvalue()) +''', sys.stdout.getvalue()) class ShellStatisticsTest(utils.BaseTestCase): |