From f1e54d1a7fbe6ab26faefdd540232b148db0bebe Mon Sep 17 00:00:00 2001 From: lihaijing Date: Fri, 23 Jun 2017 17:19:37 +0800 Subject: [PATCH] Replace assertTrue(isinstance()) with assertIsInstance() Some of tests use different method of assertTrue(isinstance(A, B)) or assertEqual(type(A), B). The correct way is to use assertIsInstance(A, B) provided by test tools. And add some relevant hacking files. Change-Id: I4b154a2e2898e316c61decf856547d57b1dcc2f8 --- HACKING.rst | 12 +++++ .../glance_store/tests/unit/gce/test_gce.py | 5 +- hacking/__init__.py | 0 hacking/checks.py | 48 +++++++++++++++++++ omnitests/test_hacking.py | 26 ++++++++++ tox.ini | 2 +- 6 files changed, 89 insertions(+), 4 deletions(-) create mode 100644 HACKING.rst create mode 100644 hacking/__init__.py create mode 100644 hacking/checks.py create mode 100644 omnitests/test_hacking.py diff --git a/HACKING.rst b/HACKING.rst new file mode 100644 index 0000000..1320cfd --- /dev/null +++ b/HACKING.rst @@ -0,0 +1,12 @@ +Omni Style Commandments +======================= + +- Step 1: Read the OpenStack Style Commandments + https://github.com/openstack-dev/hacking/blob/master/HACKING.rst +- Step 2: Read on + +Omni Specific Commandments +-------------------------- + +- [O316] Change assertTrue(isinstance(A, B)) by optimal assert like + assertIsInstance(A, B) diff --git a/glance/glance_store/tests/unit/gce/test_gce.py b/glance/glance_store/tests/unit/gce/test_gce.py index ffb47c7..c051050 100644 --- a/glance/glance_store/tests/unit/gce/test_gce.py +++ b/glance/glance_store/tests/unit/gce/test_gce.py @@ -48,15 +48,14 @@ class GCEGlanceTestCase(base.StoreBaseTest): location = Location("gce", StoreLocation, cfg.CONF, store_specs=store_specs) size = self.store.get_size(location) - self.assertTrue(isinstance(size, int)) + self.assertIsInstance(size, int) self.assertEqual(10 * units.Gi, size) def test_store_location_initialization(self): location.SCHEME_TO_CLS_MAP["gce"] = {} location.SCHEME_TO_CLS_MAP['gce']['location_class'] = StoreLocation uri = "gce://%s/fake_gce_id/fake_glance_id" % (self.store.gce_project) - self.assertTrue( - isinstance(location.get_location_from_uri(uri), Location)) + self.assertIsInstance(location.get_location_from_uri(uri), Location) def test_store_location_initialization_with_invalid_url(self): location.SCHEME_TO_CLS_MAP["scheme"] = {} diff --git a/hacking/__init__.py b/hacking/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/hacking/checks.py b/hacking/checks.py new file mode 100644 index 0000000..5e4f222 --- /dev/null +++ b/hacking/checks.py @@ -0,0 +1,48 @@ +# Copyright (c) 2017 OpenStack Foundation. +# +# 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 + +""" +Guidelines for writing new hacking checks + + - Use only for Omni-specific tests. OpenStack general tests + should be submitted to the common 'hacking' module. + - Pick numbers in the range O3xx. Find the current test with + the highest allocated number and then pick the next value. + If nova has an N3xx code for that test, use the same number. + - Keep the test method code in the source file ordered based + on the O3xx value. + - List the new rule in the top level HACKING.rst file + - Add test cases for each new rule to omnitests/test_hacking.py + +""" + + +asse_trueinst_re = re.compile( + r"(.)*assertTrue\(isinstance\((\w|\.|\'|\"|\[|\])+, " + "(\w|\.|\'|\"|\[|\])+\)\)") + + +def assert_true_instance(logical_line): + """Check for assertTrue(isinstance(a, b)) sentences + + O316 + """ + if asse_trueinst_re.match(logical_line): + yield (0, "O316: assertTrue(isinstance(a, b)) sentences not allowed") + + +def factory(register): + register(assert_true_instance) diff --git a/omnitests/test_hacking.py b/omnitests/test_hacking.py new file mode 100644 index 0000000..3946b49 --- /dev/null +++ b/omnitests/test_hacking.py @@ -0,0 +1,26 @@ +# Copyright (c) 2017 OpenStack Foundation. +# +# 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 testtools + +from hacking import checks + + +class HackingTestCase(testtools.TestCase): + def test_assert_true_instance(self): + self.assertEqual(1, len(list(checks.assert_true_instance( + "self.assertTrue(isinstance(e, " + "exception.BuildAbortException))")))) + + self.assertEqual( + 0, len(list(checks.assert_true_instance("self.assertTrue()")))) diff --git a/tox.ini b/tox.ini index 2313195..760dd4c 100644 --- a/tox.ini +++ b/tox.ini @@ -22,4 +22,4 @@ show-source = True enable-extensions = H106,H203 ignore = E123,E125,H404,H405 builtins = _ -exclude=.venv,.git,.tox,dist,doc,*lib/python*,*egg,build,openstack +exclude=.venv,.git,.tox,dist,doc,*lib/python*,*egg,build,openstack \ No newline at end of file