diff --git a/HACKING.rst b/HACKING.rst index 1ecaae91c2..e20cf54a38 100644 --- a/HACKING.rst +++ b/HACKING.rst @@ -86,9 +86,9 @@ Example:: import random import StringIO import time - import unittest import eventlet + import testtools import webob.exc import heat.api.ec2 diff --git a/heat/tests/test_api_cloudwatch.py b/heat/tests/test_api_cloudwatch.py index 82c46e90e9..98cf2f7dff 100644 --- a/heat/tests/test_api_cloudwatch.py +++ b/heat/tests/test_api_cloudwatch.py @@ -524,7 +524,4 @@ class WatchControllerTest(HeatTestCase): cfgopts = DummyConfig() self.controller = watches.WatchController(options=cfgopts) self.controller.policy.policy_path = None - - def tearDown(self): - self.m.VerifyAll() - super(WatchControllerTest, self).tearDown() + self.addCleanup(self.m.VerifyAll) diff --git a/heat/tests/test_cli.py b/heat/tests/test_cli.py index adb37d62bb..4848e88fa1 100644 --- a/heat/tests/test_cli.py +++ b/heat/tests/test_cli.py @@ -13,7 +13,7 @@ # under the License. -import unittest +import testtools import heat import os import subprocess @@ -21,7 +21,7 @@ import subprocess basepath = os.path.join(heat.__path__[0], os.path.pardir) -class CliTest(unittest.TestCase): +class CliTest(testtools.TestCase): def test_heat_cfn(self): self.bin_test_run('heat-cfn') diff --git a/heat/tests/test_dependencies.py b/heat/tests/test_dependencies.py index d04d44f113..eba83d093b 100644 --- a/heat/tests/test_dependencies.py +++ b/heat/tests/test_dependencies.py @@ -13,13 +13,13 @@ # under the License. -import unittest +import testtools from heat.engine.dependencies import Dependencies from heat.engine.dependencies import CircularDependencyException -class dependenciesTest(unittest.TestCase): +class dependenciesTest(testtools.TestCase): def _dep_test(self, func, checkorder, deps): nodes = set.union(*[set(e) for e in deps]) diff --git a/heat/tests/test_event.py b/heat/tests/test_event.py index 3d07b6f6a3..812fc42dd7 100644 --- a/heat/tests/test_event.py +++ b/heat/tests/test_event.py @@ -61,10 +61,7 @@ class EventTest(HeatTestCase): self.resource = self.stack['EventTestResource'] self.resource._store() - - def tearDown(self): - db_api.stack_delete(self.ctx, self.stack.id) - super(EventTest, self).tearDown() + self.addCleanup(db_api.stack_delete, self.ctx, self.stack.id) def test_load(self): self.resource.resource_id_set('resource_physical_id') diff --git a/heat/tests/test_identifier.py b/heat/tests/test_identifier.py index f44749e2ee..0205eff74b 100644 --- a/heat/tests/test_identifier.py +++ b/heat/tests/test_identifier.py @@ -13,12 +13,12 @@ # under the License. -import unittest +import testtools from heat.common import identifier -class IdentifierTest(unittest.TestCase): +class IdentifierTest(testtools.TestCase): url_prefix = 'http://1.2.3.4/foo/' def test_attrs(self): @@ -354,7 +354,7 @@ class IdentifierTest(unittest.TestCase): self.assertEqual(hi._path_components(), ['p1', 'p2', 'p3']) -class ResourceIdentifierTest(unittest.TestCase): +class ResourceIdentifierTest(testtools.TestCase): def test_resource_init_no_path(self): si = identifier.HeatIdentifier('t', 's', 'i') ri = identifier.ResourceIdentifier(resource_name='r', **si) @@ -385,7 +385,7 @@ class ResourceIdentifierTest(unittest.TestCase): 't', 's', 'i', 'p', 'r/r') -class EventIdentifierTest(unittest.TestCase): +class EventIdentifierTest(testtools.TestCase): def test_event_init(self): si = identifier.HeatIdentifier('t', 's', 'i') pi = identifier.ResourceIdentifier(resource_name='p', **si) diff --git a/heat/tests/test_parameters.py b/heat/tests/test_parameters.py index b9f61e2137..bfa3672ba9 100644 --- a/heat/tests/test_parameters.py +++ b/heat/tests/test_parameters.py @@ -13,13 +13,13 @@ # under the License. -import unittest +import testtools import json from heat.engine import parameters -class ParameterTest(unittest.TestCase): +class ParameterTest(testtools.TestCase): def test_new_string(self): p = parameters.Parameter('p', {'Type': 'String'}) self.assertTrue(isinstance(p, parameters.StringParam)) @@ -268,7 +268,7 @@ params_schema = json.loads('''{ }''') -class ParametersTest(unittest.TestCase): +class ParametersTest(testtools.TestCase): def test_pseudo_params(self): params = parameters.Parameters('test_stack', {"Parameters": {}}) diff --git a/heat/tests/test_plugin_loader.py b/heat/tests/test_plugin_loader.py index c72ddd8872..9059ae4dc5 100644 --- a/heat/tests/test_plugin_loader.py +++ b/heat/tests/test_plugin_loader.py @@ -15,13 +15,13 @@ import pkgutil import sys -import unittest +import testtools import heat.engine from heat.common import plugin_loader -class PluginLoaderTest(unittest.TestCase): +class PluginLoaderTest(testtools.TestCase): def test_module_name(self): self.assertEqual(plugin_loader._module_name('foo.bar', 'blarg.wibble'), 'foo.bar.blarg.wibble') diff --git a/heat/tests/test_properties.py b/heat/tests/test_properties.py index 28dc4d1d9f..f3acff60e0 100644 --- a/heat/tests/test_properties.py +++ b/heat/tests/test_properties.py @@ -13,13 +13,13 @@ # under the License. -import unittest +import testtools from heat.engine import properties from heat.common import exception -class PropertyTest(unittest.TestCase): +class PropertyTest(testtools.TestCase): def test_required_default(self): p = properties.Property({'Type': 'String'}) self.assertFalse(p.required()) @@ -256,8 +256,9 @@ class PropertyTest(unittest.TestCase): self.assertRaises(TypeError, p.validate_data, [42, 'fish']) -class PropertiesTest(unittest.TestCase): +class PropertiesTest(testtools.TestCase): def setUp(self): + super(PropertiesTest, self).setUp() schema = { 'int': {'Type': 'Integer'}, 'string': {'Type': 'String'}, @@ -301,7 +302,7 @@ class PropertiesTest(unittest.TestCase): self.assertEqual(self.props.get('foo', 'wibble'), 'wibble') -class PropertiesValidationTest(unittest.TestCase): +class PropertiesValidationTest(testtools.TestCase): def test_required(self): schema = {'foo': {'Type': 'String', 'Required': True}} props = properties.Properties(schema, {'foo': 'bar'}) diff --git a/heat/tests/test_resource.py b/heat/tests/test_resource.py index 431a0f886c..edc7efd370 100644 --- a/heat/tests/test_resource.py +++ b/heat/tests/test_resource.py @@ -376,10 +376,7 @@ class MetadataTest(HeatTestCase): self.res = generic_rsrc.GenericResource('metadata_resource', tmpl, self.stack) scheduler.TaskRunner(self.res.create)() - - def tearDown(self): - self.stack.delete() - super(HeatTestCase, self).tearDown() + self.addCleanup(self.stack.delete) def test_read_initial(self): self.assertEqual(self.res.metadata, {'Test': 'Initial metadata'}) diff --git a/heat/tests/test_rpc_client.py b/heat/tests/test_rpc_client.py index 7e69489019..c397d9ca58 100644 --- a/heat/tests/test_rpc_client.py +++ b/heat/tests/test_rpc_client.py @@ -21,7 +21,7 @@ Unit Tests for heat.rpc.client from oslo.config import cfg import stubout -import unittest +import testtools from heat.common import config from heat.common import context @@ -31,7 +31,7 @@ from heat.rpc import client as rpc_client from heat.openstack.common import rpc -class EngineRpcAPITestCase(unittest.TestCase): +class EngineRpcAPITestCase(testtools.TestCase): def setUp(self): config.register_engine_opts() diff --git a/heat/tests/test_security_group.py b/heat/tests/test_security_group.py index 205820232c..e25ea17053 100644 --- a/heat/tests/test_security_group.py +++ b/heat/tests/test_security_group.py @@ -101,9 +101,6 @@ Resources: quantumclient.Client, 'delete_security_group_rule') self.m.StubOutWithMock(quantumclient.Client, 'delete_security_group') - def tearDown(self): - super(SecurityGroupTest, self).tearDown() - def create_stack(self, template): t = template_format.parse(template) self.stack = self.parse_stack(t) diff --git a/heat/tests/test_short_id.py b/heat/tests/test_short_id.py index fe48309e32..b9b0f7414c 100644 --- a/heat/tests/test_short_id.py +++ b/heat/tests/test_short_id.py @@ -13,13 +13,13 @@ # under the License. -import unittest +import testtools from heat.common import short_id import uuid -class ShortIdTest(unittest.TestCase): +class ShortIdTest(testtools.TestCase): def test_byte_string_8(self): self.assertEqual(short_id._to_byte_string(0xab, 8), '\xab') diff --git a/test-requirements.txt b/test-requirements.txt index 4723abe8c0..45b5c8e1de 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -10,6 +10,7 @@ hacking>=0.5.3,<0.6 coverage discover mox==0.5.3 +testtools>=0.9.29 testrepository>=0.0.13 paramiko python-glanceclient