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