summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMonty Taylor <mordred@inaugust.com>2012-12-13 18:21:50 -0800
committerMonty Taylor <mordred@inaugust.com>2012-12-13 18:32:42 -0800
commit9138e99c144de166ad9f5bddd0e110244ffbbf8e (patch)
tree85ea09c730133480970aafec70e9760f4d6658e9
parentd1e7f796bf43b840983266f8510a7e6ed4dce415 (diff)
downloadnova-9138e99c144de166ad9f5bddd0e110244ffbbf8e.tar.gz
nova-9138e99c144de166ad9f5bddd0e110244ffbbf8e.tar.xz
nova-9138e99c144de166ad9f5bddd0e110244ffbbf8e.zip
Add general mechanism for testing api coverage.
Refactor the VirtAPI test that ensures all api methods have a test method to work with parallel test runs. In the process, ensure that it's dead simple to add a similar check for any test covering an API. Change-Id: Ie5849a28aa4bfb8f5882ef57344e4131317d2e96
-rw-r--r--nova/test.py15
-rw-r--r--nova/tests/compute/test_virtapi.py79
2 files changed, 47 insertions, 47 deletions
diff --git a/nova/test.py b/nova/test.py
index 4379b6de4..89db4999a 100644
--- a/nova/test.py
+++ b/nova/test.py
@@ -222,3 +222,18 @@ class TestCase(testtools.TestCase):
def start_service(self, name, host=None, **kwargs):
svc = self.useFixture(ServiceFixture(name, host, **kwargs))
return svc.service
+
+
+class APICoverage(object):
+
+ cover_api = None
+
+ def test_api_methods(self):
+ self.assertTrue(self.cover_api is not None)
+ api_methods = [x for x in dir(self.cover_api)
+ if not x.startswith('_')]
+ test_methods = [x[5:] for x in dir(self)
+ if x.startswith('test_')]
+ self.assertThat(
+ test_methods,
+ testtools.matchers.ContainsAll(api_methods))
diff --git a/nova/tests/compute/test_virtapi.py b/nova/tests/compute/test_virtapi.py
index ac4f75344..e889610f6 100644
--- a/nova/tests/compute/test_virtapi.py
+++ b/nova/tests/compute/test_virtapi.py
@@ -24,38 +24,22 @@ from nova.virt import fake
from nova.virt import virtapi
-class VirtAPIBaseTest(test.TestCase):
+class VirtAPIBaseTest(test.TestCase, test.APICoverage):
+
+ cover_api = virtapi.VirtAPI
+
def setUp(self):
super(VirtAPIBaseTest, self).setUp()
self.context = context.RequestContext('fake-user', 'fake-project')
+ self.set_up_virtapi()
- @classmethod
- def set_up_virtapi(cls):
- cls.virtapi = virtapi.VirtAPI()
-
- @classmethod
- def setUpClass(cls):
- super(VirtAPIBaseTest, cls).setUpClass()
- cls.set_up_virtapi()
- cls._totest_methods = [x for x in dir(cls.virtapi)
- if not x.startswith('_')]
- cls._tested_methods = [x for x in dir(cls)
- if x.startswith('test_')]
-
- def _tested_method(self, method):
- self._tested_methods.remove('test_' + method)
- self._totest_methods.remove(method)
-
- def run(self, result):
- super(VirtAPIBaseTest, self).run(result)
- if not self._tested_methods:
- self.assertEqual(self._totest_methods, [])
+ def set_up_virtapi(self):
+ self.virtapi = virtapi.VirtAPI()
def assertExpected(self, method, *args, **kwargs):
self.assertRaises(NotImplementedError,
getattr(self.virtapi, method), self.context,
*args, **kwargs)
- self._tested_method(method)
def test_instance_update(self):
self.assertExpected('instance_update', 'fake-uuid',
@@ -94,9 +78,11 @@ class VirtAPIBaseTest(test.TestCase):
class FakeVirtAPITest(VirtAPIBaseTest):
- @classmethod
- def set_up_virtapi(cls):
- cls.virtapi = fake.FakeVirtAPI()
+
+ cover_api = fake.FakeVirtAPI
+
+ def set_up_virtapi(self):
+ self.virtapi = fake.FakeVirtAPI()
def assertExpected(self, method, *args, **kwargs):
if method == 'instance_update':
@@ -119,7 +105,6 @@ class FakeVirtAPITest(VirtAPIBaseTest):
self.mox.ReplayAll()
result = getattr(self.virtapi, method)(self.context, *args, **kwargs)
self.assertEqual(result, 'it worked')
- self._tested_method(method)
class FakeCompute(object):
@@ -134,27 +119,28 @@ class FakeCompute(object):
class ComputeVirtAPITest(VirtAPIBaseTest):
- @classmethod
- def set_up_virtapi(cls):
- cls.compute = FakeCompute()
- cls.virtapi = compute_manager.ComputeVirtAPI(cls.compute)
-
- @classmethod
- def setUpClass(cls):
- super(ComputeVirtAPITest, cls).setUpClass()
+
+ cover_api = compute_manager.ComputeVirtAPI
+
+ def set_up_virtapi(self):
+ self.compute = FakeCompute()
+ self.virtapi = compute_manager.ComputeVirtAPI(self.compute)
+
+ def setUp(self):
+ super(ComputeVirtAPITest, self).setUp()
# NOTE(danms): Eventually these should all be migrated to the
# conductor, but until then, dispatch appropriately.
- cls.conductor_methods = ['instance_update', 'instance_get_by_uuid',
- 'instance_get_all_by_host',
- 'aggregate_get_by_host',
- 'aggregate_metadata_add',
- 'aggregate_metadata_delete',
- ]
- cls.db_methods = ['security_group_get_by_instance',
- 'security_group_rule_get_by_security_group',
- 'provider_fw_rule_get_all',
- 'agent_build_get_by_triple',
- ]
+ self.conductor_methods = ['instance_update', 'instance_get_by_uuid',
+ 'instance_get_all_by_host',
+ 'aggregate_get_by_host',
+ 'aggregate_metadata_add',
+ 'aggregate_metadata_delete',
+ ]
+ self.db_methods = ['security_group_get_by_instance',
+ 'security_group_rule_get_by_security_group',
+ 'provider_fw_rule_get_all',
+ 'agent_build_get_by_triple',
+ ]
def assertExpected(self, method, *args, **kwargs):
if method in self.conductor_methods:
@@ -170,4 +156,3 @@ class ComputeVirtAPITest(VirtAPIBaseTest):
self.mox.ReplayAll()
result = getattr(self.virtapi, method)(self.context, *args, **kwargs)
self.assertEqual(result, 'it worked')
- self._tested_method(method)