diff options
| author | Dan Smith <danms@us.ibm.com> | 2012-12-14 11:02:25 -0800 |
|---|---|---|
| committer | Dan Smith <danms@us.ibm.com> | 2012-12-14 11:18:34 -0800 |
| commit | bd7fb1c30ffb71b22bed1ce56c6caab5290cecc0 (patch) | |
| tree | 58ed0e96ab4d8ab6de2152566cb93093679066d1 /nova | |
| parent | 8652d71ade5e778da7c5934cc313f9c85443a0ce (diff) | |
| download | nova-bd7fb1c30ffb71b22bed1ce56c6caab5290cecc0.tar.gz nova-bd7fb1c30ffb71b22bed1ce56c6caab5290cecc0.tar.xz nova-bd7fb1c30ffb71b22bed1ce56c6caab5290cecc0.zip | |
Add a developer trap for api samples
This adds a test in test_api_samples to verify that no new extensions
get added to the tree without matching api_samples. Since not all the
extensions currently in the tree have samples, there is an exclusion
list so that this passes now. Extensions should never be added to that
exclusion list, and the list should eventually go away when we get
all of the extensions tested.
Change-Id: I506450d2f3f5a32ff5c653b5940bae6c47790d01
Diffstat (limited to 'nova')
| -rw-r--r-- | nova/tests/integrated/test_api_samples.py | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/nova/tests/integrated/test_api_samples.py b/nova/tests/integrated/test_api_samples.py index 4f73f6bfe..cff4e1be3 100644 --- a/nova/tests/integrated/test_api_samples.py +++ b/nova/tests/integrated/test_api_samples.py @@ -15,6 +15,7 @@ import base64 import datetime +import inspect import os import re import urllib @@ -312,6 +313,77 @@ class ApiSampleTestBase(integrated_helpers._IntegratedTestBase): return self._get_response(url, 'DELETE') +class ApiSamplesTrap(ApiSampleTestBase): + """Make sure extensions don't get added without tests""" + + all_extensions = True + + def _get_extensions_tested(self): + tests = [] + for attr in globals().values(): + if not inspect.isclass(attr): + continue # Skip non-class objects + if not issubclass(attr, integrated_helpers._IntegratedTestBase): + continue # Skip non-test classes + if attr.extension_name is None: + continue # Skip base tests + cls = importutils.import_class(attr.extension_name) + tests.append(cls.alias) + return tests + + def _get_extensions(self): + extensions = [] + response = self._do_get('extensions') + for extension in jsonutils.loads(response.read())['extensions']: + extensions.append(str(extension['alias'])) + return extensions + + def test_all_extensions_have_samples(self): + # NOTE(danms): This is a list of extensions which are currently + # in the tree but that don't (yet) have tests. This list should + # NOT be allowed to grow, and should shrink to zero (and be + # removed) soon. + do_not_approve_additions = [] + do_not_approve_additions.append('NMN') + do_not_approve_additions.append('OS-FLV-DISABLED') + do_not_approve_additions.append('os-config-drive') + do_not_approve_additions.append('os-coverage') + do_not_approve_additions.append('os-create-server-ext') + do_not_approve_additions.append('os-fixed-ips') + do_not_approve_additions.append('os-flavor-access') + do_not_approve_additions.append('os-flavor-extra-specs') + do_not_approve_additions.append('os-flavor-rxtx') + do_not_approve_additions.append('os-flavor-swap') + do_not_approve_additions.append('os-floating-ip-dns') + do_not_approve_additions.append('os-floating-ip-pools') + do_not_approve_additions.append('os-fping') + do_not_approve_additions.append('os-hypervisors') + do_not_approve_additions.append('os-instance_usage_audit_log') + do_not_approve_additions.append('os-networks') + do_not_approve_additions.append('os-quota-class-sets') + do_not_approve_additions.append('os-services') + do_not_approve_additions.append('os-volumes') + + tests = self._get_extensions_tested() + extensions = self._get_extensions() + missing_tests = [] + for extension in extensions: + # NOTE(danms): if you add tests, remove it from the + # exclusions list + self.assertFalse(extension in do_not_approve_additions and + extension in tests) + + # NOTE(danms): if you add an extension, it must come with + # api_samples tests! + if (extension not in tests and + extension not in do_not_approve_additions): + missing_tests.append(extension) + + if missing_tests: + LOG.error("Extensions are missing tests: %s" % missing_tests) + self.assertEqual(missing_tests, []) + + class VersionsSampleJsonTest(ApiSampleTestBase): def test_versions_get(self): response = self._do_get('', strip_version=True) |
