]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Use testtools instead of unittest or unittest2.
authorMonty Taylor <mordred@inaugust.com>
Wed, 6 Feb 2013 06:01:30 +0000 (17:01 +1100)
committerAkihiro MOTOKI <motoki@da.jp.nec.com>
Tue, 26 Feb 2013 10:32:30 +0000 (19:32 +0900)
As part of the move towards testr and parallel test running, we
start to use testtools and fixtures to make the test suite
resilient and more pedantic.

Part of blueprint grizzly-testtools

Change-Id: I90250de9fe21237db34f6a50b89b15863e270aa5

89 files changed:
HACKING.rst
quantum/plugins/cisco/tests/unit/__init__.py
quantum/plugins/cisco/tests/unit/test_cisco_extension.py
quantum/plugins/cisco/tests/unit/test_database.py
quantum/plugins/cisco/tests/unit/v2/__init__.py
quantum/plugins/cisco/tests/unit/v2/nexus/__init__.py
quantum/plugins/cisco/tests/unit/v2/test_api_v2.py
quantum/tests/unit/__init__.py
quantum/tests/unit/_test_rootwrap_exec.py
quantum/tests/unit/bigswitch/test_restproxy_plugin.py
quantum/tests/unit/brocade/test_brocade_vlan.py
quantum/tests/unit/cisco/test_nexus_plugin.py
quantum/tests/unit/hyperv/test_hyperv_quantum_agent.py
quantum/tests/unit/hyperv/test_hyperv_rpcapi.py
quantum/tests/unit/linuxbridge/test_defaults.py
quantum/tests/unit/linuxbridge/test_lb_db.py
quantum/tests/unit/linuxbridge/test_lb_quantum_agent.py
quantum/tests/unit/linuxbridge/test_lb_security_group.py
quantum/tests/unit/linuxbridge/test_rpcapi.py
quantum/tests/unit/metaplugin/test_metaplugin.py
quantum/tests/unit/midonet/test_midonet_lib.py
quantum/tests/unit/nec/test_config.py
quantum/tests/unit/nec/test_db.py
quantum/tests/unit/nec/test_ofc_manager.py
quantum/tests/unit/nec/test_pfc_driver.py
quantum/tests/unit/nec/test_trema_driver.py
quantum/tests/unit/nicira/test_defaults.py
quantum/tests/unit/nicira/test_networkgw.py
quantum/tests/unit/nicira/test_nicira_plugin.py
quantum/tests/unit/nicira/test_nvp_api_common.py
quantum/tests/unit/nicira/test_nvp_api_request.py
quantum/tests/unit/nicira/test_nvp_api_request_eventlet.py
quantum/tests/unit/nicira/test_nvplib.py
quantum/tests/unit/openvswitch/test_ovs_db.py
quantum/tests/unit/openvswitch/test_ovs_defaults.py
quantum/tests/unit/openvswitch/test_ovs_lib.py
quantum/tests/unit/openvswitch/test_ovs_quantum_agent.py
quantum/tests/unit/openvswitch/test_ovs_rpcapi.py
quantum/tests/unit/openvswitch/test_ovs_tunnel.py
quantum/tests/unit/ryu/test_defaults.py
quantum/tests/unit/ryu/test_ryu_agent.py
quantum/tests/unit/ryu/test_ryu_plugin.py
quantum/tests/unit/test_agent_config.py
quantum/tests/unit/test_agent_linux_utils.py
quantum/tests/unit/test_agent_netns_cleanup.py
quantum/tests/unit/test_agent_ovs_cleanup.py
quantum/tests/unit/test_agent_rpc.py
quantum/tests/unit/test_api_api_common.py
quantum/tests/unit/test_api_v2.py
quantum/tests/unit/test_api_v2_resource.py
quantum/tests/unit/test_attributes.py
quantum/tests/unit/test_auth.py
quantum/tests/unit/test_common_utils.py
quantum/tests/unit/test_config.py
quantum/tests/unit/test_db.py
quantum/tests/unit/test_db_migration.py
quantum/tests/unit/test_db_plugin.py
quantum/tests/unit/test_db_rpc_base.py
quantum/tests/unit/test_debug_commands.py
quantum/tests/unit/test_dhcp_agent.py
quantum/tests/unit/test_extension_extended_attribute.py
quantum/tests/unit/test_extension_extraroute.py
quantum/tests/unit/test_extensions.py
quantum/tests/unit/test_iptables_firewall.py
quantum/tests/unit/test_iptables_manager.py
quantum/tests/unit/test_l3_agent.py
quantum/tests/unit/test_l3_plugin.py
quantum/tests/unit/test_linux_daemon.py
quantum/tests/unit/test_linux_dhcp.py
quantum/tests/unit/test_linux_external_process.py
quantum/tests/unit/test_linux_interface.py
quantum/tests/unit/test_linux_ip_lib.py
quantum/tests/unit/test_loadbalancer_plugin.py
quantum/tests/unit/test_metadata_agent.py
quantum/tests/unit/test_metadata_namespace_proxy.py
quantum/tests/unit/test_policy.py
quantum/tests/unit/test_quantum_context.py
quantum/tests/unit/test_quantum_manager.py
quantum/tests/unit/test_quota_per_tenant_ext.py
quantum/tests/unit/test_rootwrap.py
quantum/tests/unit/test_routerserviceinsertion.py
quantum/tests/unit/test_security_groups_rpc.py
quantum/tests/unit/test_servicetype.py
quantum/tests/unit/test_setup.py [deleted file]
quantum/tests/unit/test_wsgi.py
quantum/tests/unit/testlib_api.py
run_tests.py
setup.cfg
tools/test-requires

index 0423c41e120d346017c35649d21b16e1fd6a2a48..4333d256850adc55f9adf61c4a6964c25d1a9845 100644 (file)
@@ -66,9 +66,9 @@ Example::
   import random
   import StringIO
   import time
-  import unittest
 
   import eventlet
+  import testtools
   import webob.exc
 
   import quantum.api.networks
@@ -199,6 +199,12 @@ bug that had no unit test, a new passing unit test should be added. If a
 submitted bug fix does have a unit test, be sure to add a new one that fails
 without the patch and passes with the patch.
 
+All unittest classes must ultimately inherit from testtools.TestCase.
+All setUp and tearDown methods must upcall using the super() method.
+tearDown methods should be avoided and addCleanup calls should be preferred.
+Never manually create tempfiles. Always use the tempfile fixtures from
+the fixture library to ensure that they are cleaned up.
+
 
 openstack-common
 ----------------
index b895a356efc36e1fb48f4e4d982436e00995cbfd..319c1d1c7a9b0a2ce57ea0ea53f1ffe7ffc0f53f 100644 (file)
 # The code below enables nosetests to work with i18n _() blocks
 
 import __builtin__
-import unittest
-
-
 setattr(__builtin__, '_', lambda x: x)
-
-
-class BaseTest(unittest.TestCase):
-
-    def setUp(self):
-        pass
-
-
-def setUp():
-    pass
index f2798419f120bcc3f74ab2d455f6d0319c70d2ff..87fa731facd5753ce3d0aba85c4d7e5385366520 100644 (file)
@@ -20,9 +20,9 @@
 
 import logging
 import os.path
-import unittest
 
 import routes
+import testtools
 import webob
 from webtest import TestApp
 
@@ -149,19 +149,14 @@ class ExtensionsTestApp(wsgi.Router):
         self._delete_port(net_id, port_id)
         self._delete_network(net_id)
 
-    def tearDown(self):
-
-        """ Tear down """
-
-        db.clear_db()
-
 
-class QosExtensionTest(unittest.TestCase):
+class QosExtensionTest(testtools.TestCase):
 
     def setUp(self):
 
         """ Set up function """
 
+        super(QosExtensionTest, self).setUp()
         parent_resource = dict(member_name="tenant",
                                collection_name="extensions/csco/tenants")
         controller = qos.QosController(QuantumManager.get_plugin())
@@ -411,12 +406,13 @@ class QosExtensionTest(unittest.TestCase):
         db.clear_db()
 
 
-class CredentialExtensionTest(unittest.TestCase):
+class CredentialExtensionTest(testtools.TestCase):
 
     def setUp(self):
 
         """ Set up function """
 
+        super(CredentialExtensionTest, self).setUp()
         parent_resource = dict(member_name="tenant",
                                collection_name="extensions/csco/tenants")
         controller = credential.CredentialController(QuantumManager.
index aa1f4d9ed3fa33a3d41e785ff59c113fcda2072c..20362369bef8d43dd2613ffaaa50ef697d2b63ff 100644 (file)
@@ -21,7 +21,8 @@ that tests the database api method calls
 """
 
 import logging as LOG
-import unittest
+
+import testtools
 
 from quantum.openstack.common import log as logging
 from quantum.plugins.cisco.common import cisco_constants as const
@@ -346,18 +347,16 @@ class QuantumDB(object):
             raise Exception("Failed to unplug interface: %s" % str(exc))
 
 
-class NexusDBTest(unittest.TestCase):
+class NexusDBTest(testtools.TestCase):
     """Class conisting of nexus DB unit tests"""
     def setUp(self):
+        super(NexusDBTest, self).setUp()
         """Setup for nexus db tests"""
         l2network_db.initialize()
+        self.addCleanup(db.clear_db)
         self.dbtest = NexusDB()
         LOG.debug("Setup")
 
-    def tearDown(self):
-        """Tear Down"""
-        db.clear_db()
-
     def testa_create_nexusportbinding(self):
         """create nexus port binding"""
         binding1 = self.dbtest.create_nexusportbinding("port1", 10)
@@ -410,19 +409,17 @@ class NexusDBTest(unittest.TestCase):
             self.dbtest.delete_nexusportbinding(vlan_id)
 
 
-class L2networkDBTest(unittest.TestCase):
+class L2networkDBTest(testtools.TestCase):
     """Class conisting of L2network DB unit tests"""
     def setUp(self):
         """Setup for tests"""
+        super(L2networkDBTest, self).setUp()
         l2network_db.initialize()
         self.dbtest = L2networkDB()
         self.quantum = QuantumDB()
+        self.addCleanup(db.clear_db)
         LOG.debug("Setup")
 
-    def tearDown(self):
-        """Tear Down"""
-        db.clear_db()
-
     def testa_create_vlanbinding(self):
         """test add vlan binding"""
         net1 = self.quantum.create_network("t1", "netid1")
@@ -518,19 +515,17 @@ class L2networkDBTest(unittest.TestCase):
             self.dbtest.delete_vlan_binding(netid)
 
 
-class QuantumDBTest(unittest.TestCase):
+class QuantumDBTest(testtools.TestCase):
     """Class conisting of Quantum DB unit tests"""
     def setUp(self):
         """Setup for tests"""
+        super(QuantumDBTest, self).setUp()
         l2network_db.initialize()
+        self.addCleanup(db.clear_db)
         self.dbtest = QuantumDB()
         self.tenant_id = "t1"
         LOG.debug("Setup")
 
-    def tearDown(self):
-        """Tear Down"""
-        db.clear_db()
-
     def testa_create_network(self):
         """test to create network"""
         net1 = self.dbtest.create_network(self.tenant_id, "plugin_test1")
index 622dcfb73948bac1db24ceb71d9d1cbc0c972a64..c8bda896ecc625df89d1ff3d76f7e68dc9ec5839 100644 (file)
 #    under the License.
 
 import __builtin__
-import unittest
-
-
 setattr(__builtin__, '_', lambda x: x)
-
-
-class BaseTest(unittest.TestCase):
-
-    def setUp(self):
-        pass
-
-
-def setUp():
-    pass
index 622dcfb73948bac1db24ceb71d9d1cbc0c972a64..c8bda896ecc625df89d1ff3d76f7e68dc9ec5839 100644 (file)
 #    under the License.
 
 import __builtin__
-import unittest
-
-
 setattr(__builtin__, '_', lambda x: x)
-
-
-class BaseTest(unittest.TestCase):
-
-    def setUp(self):
-        pass
-
-
-def setUp():
-    pass
index bf3cb6b4d90d5acef9f6ad6a5fd3e9a3cd32012d..cfa3dc6ea212e46927628d94be5af6b2370c470f 100644 (file)
@@ -40,6 +40,7 @@ def curdir(*p):
 class APIv2TestCase(test_api_v2.APIv2TestCase):
 
     def setUp(self):
+        super(APIv2TestCase, self).setUp()
         plugin = 'quantum.plugins.cisco.network_plugin.PluginV2'
         # Ensure 'stale' patched copies of the plugin are never returned
         QuantumManager._instance = None
index 84a08f086fcd2eca4319eaf4b6d382c75df98044..de5064afe0c2b903e776e33a8022559b9eb59215 100644 (file)
@@ -20,7 +20,8 @@
 
 import __builtin__
 import os
-import unittest
+
+import testtools
 
 setattr(__builtin__, '_', lambda x: x)
 
@@ -33,13 +34,3 @@ cfg.CONF.state_path = absdir
 # An empty lock path forces lockutils.synchronized to use a temporary
 # location for lock files that will be cleaned up automatically.
 cfg.CONF.lock_path = ''
-
-
-class BaseTest(unittest.TestCase):
-
-    def setUp(self):
-        pass
-
-
-def setUp():
-    pass
index 4a906a730a93852ac23f3993d8a15c424b54b194..f3c37d42117beb55b504249b7c47b29c3cc719f6 100644 (file)
@@ -16,7 +16,8 @@
 #    under the License.
 
 import os
-import unittest
+
+import testtools
 
 from quantum.agent.linux import utils
 from quantum.openstack.common import log as logging
@@ -25,7 +26,7 @@ from quantum.openstack.common import log as logging
 LOG = logging.getLogger(__name__)
 
 
-class RootwrapTestExec(unittest.TestCase):
+class RootwrapTestExec(testtools.TestCase):
     """Simple unit test to test the basic rootwrap mechanism
 
     Essentially hello-world.  Just run a command as root and check that
@@ -39,6 +40,7 @@ class RootwrapTestExec(unittest.TestCase):
     """
 
     def setUp(self):
+        super(RootwrapTestExec, self).setUp()
         self.cwd = os.getcwd() + "/../../.."
         # stuff a stupid bash script into /tmp, so that the next
         # method can execute it.
@@ -77,3 +79,4 @@ come to the aid of their party.")
     def tearDown(self):
         os.remove(self.test_file)
         os.remove(self.conf_file)
+        super(RootwrapTestExec, self).tearDown()
index 72829ec7c640768d888890200c8fa4a7998660d6..25c8aa990a70a8d34dd5d62695a438b4397aae7b 100644 (file)
@@ -67,14 +67,11 @@ class BigSwitchProxyPluginV2TestCase(test_plugin.QuantumDbPluginV2TestCase):
 
         self.httpPatch = patch('httplib.HTTPConnection', create=True,
                                new=HTTPConnectionMock)
+        self.addCleanup(self.httpPatch.stop)
         MockHTTPConnection = self.httpPatch.start()
         super(BigSwitchProxyPluginV2TestCase,
               self).setUp(self._plugin_name)
 
-    def tearDown(self):
-        super(BigSwitchProxyPluginV2TestCase, self).tearDown()
-        self.httpPatch.stop()
-
 
 class TestBigSwitchProxyBasicGet(test_plugin.TestBasicGet,
                                  BigSwitchProxyPluginV2TestCase):
index 8c5eb9eef6ce793bded45902861ee0cbc02247f3..454417d0206d36046a40a72a8bbbc88bd7055b99 100644 (file)
 """
 Test vlans alloc/dealloc.
 """
-import unittest2 as unittest
+import testtools
 
 from quantum.db import api as db
 from quantum.openstack.common import context
 from quantum.plugins.brocade import vlanbm as vlan_bitmap
 
 
-class TestVlanBitmap(unittest.TestCase):
+class TestVlanBitmap(testtools.TestCase):
     """exercise Vlan bitmap ."""
 
     def setUp(self):
+        super(TestVlanBitmap, self).setUp()
         db.configure_db()
+        self.addCleanup(db.clear_db)
         self.context = context.get_admin_context()
         self.context.session = db.get_session()
 
@@ -69,6 +71,3 @@ class TestVlanBitmap(unittest.TestCase):
         self.vbm_.release_vlan(4)
         vlan_id = self.vbm_.get_next_vlan(None)
         self.assertEqual(vlan_id, 4)
-
-    def tearDown(self):
-        db.clear_db()
index ee60fdf735467a90d423348cbe37d88832d84861..91609a42311200b3baf8b53f2fbdbc0f7b3d3736 100644 (file)
@@ -14,7 +14,7 @@
 # limitations under the License.
 
 import mock
-import unittest
+import testtools
 
 from quantum.db import api as db
 from quantum.openstack.common import importutils
@@ -34,12 +34,13 @@ NEXUS_DRIVER = ('quantum.plugins.cisco.tests.unit.v2.nexus.'
                 'fake_nexus_driver.CiscoNEXUSFakeDriver')
 
 
-class TestCiscoNexusPlugin(unittest.TestCase):
+class TestCiscoNexusPlugin(testtools.TestCase):
 
     def setUp(self):
         """
         Set up function
         """
+        super(TestCiscoNexusPlugin, self).setUp()
         self.tenant_id = "test_tenant_cisco1"
         self.net_name = "test_network_cisco1"
         self.net_id = 000007
@@ -133,9 +134,3 @@ class TestCiscoNexusPlugin(unittest.TestCase):
         )
 
         self.assertEqual(expected_instance_id, INSTANCE)
-
-    def tearDown(self):
-        """Clear the test environment"""
-        pass
-        # Remove database contents
-        #db.clear_db(network_models_v2.model_base.BASEV2)
index 53fee9772acc4a19db718196b53e72fe52db16c7..7ea8110af68cb464f58170ecf5c65f9b56237168 100644 (file)
@@ -24,14 +24,15 @@ import sys
 
 import mock
 from oslo.config import cfg
-import unittest2 as unittest
+import testtools
 
 from quantum.plugins.hyperv.agent import hyperv_quantum_agent
 
 
-class TestHyperVQuantumAgent(unittest.TestCase):
+class TestHyperVQuantumAgent(testtools.TestCase):
 
     def setUp(self):
+        super(TestHyperVQuantumAgent, self).setUp()
         self.addCleanup(cfg.CONF.reset)
         # Avoid rpc initialization for unit tests
         cfg.CONF.set_override('rpc_backend',
@@ -42,9 +43,6 @@ class TestHyperVQuantumAgent(unittest.TestCase):
         self.agent.agent_id = mock.Mock()
         self.agent._utils = mock.Mock()
 
-    def tearDown(self):
-        cfg.CONF.reset()
-
     def test_port_bound(self):
         port = mock.Mock()
         net_uuid = 'my-net-uuid'
index 098fcea122d7f0c8c8fd8e72dca5ea55058c27b4..707f4fb20734208c61d2a198ad6706154581c0ab 100644 (file)
@@ -21,7 +21,7 @@ Unit Tests for hyperv quantum rpc
 """
 
 import mock
-import unittest2
+import testtools
 
 from quantum.agent import rpc as agent_rpc
 from quantum.common import topics
@@ -31,7 +31,7 @@ from quantum.plugins.hyperv import agent_notifier_api as ana
 from quantum.plugins.hyperv.common import constants
 
 
-class rpcHyperVApiTestCase(unittest2.TestCase):
+class rpcHyperVApiTestCase(testtools.TestCase):
 
     def _test_hyperv_quantum_api(
             self, rpcapi, topic, method, rpc_method, **kwargs):
index 7c6457059c5e3b0b79f0dda2a0c9c82de70a11bb..d67103c259b2fa4a979f7319d26542e994019e75 100644 (file)
 # limitations under the License.
 
 from oslo.config import cfg
-import unittest2 as unittest
+import testtools
 
 #NOTE this import loads tests required options
 from quantum.plugins.linuxbridge.common import config
 
 
-class ConfigurationTest(unittest.TestCase):
+class ConfigurationTest(testtools.TestCase):
 
     def test_defaults(self):
         self.assertEqual(-1,
index a497fea8384e6fb5b848dfc9d0c9e3bb9b1e4c13..e8007976f5c94f3b0cb7bfcd1c6e1fcdb99a76a7 100644 (file)
@@ -13,7 +13,8 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-import unittest2
+import testtools
+from testtools import matchers
 
 from quantum.common import exceptions as q_exc
 from quantum.db import api as db
@@ -29,14 +30,13 @@ UPDATED_VLAN_RANGES = {PHYS_NET: [(VLAN_MIN + 5, VLAN_MAX + 5)],
                        PHYS_NET_2: [(VLAN_MIN + 20, VLAN_MAX + 20)]}
 
 
-class NetworkStatesTest(unittest2.TestCase):
+class NetworkStatesTest(testtools.TestCase):
     def setUp(self):
+        super(NetworkStatesTest, self).setUp()
         lb_db.initialize()
         lb_db.sync_network_states(VLAN_RANGES)
         self.session = db.get_session()
-
-    def tearDown(self):
-        db.clear_db()
+        self.addCleanup(db.clear_db)
 
     def test_sync_network_states(self):
         self.assertIsNone(lb_db.get_network_state(PHYS_NET,
@@ -105,11 +105,11 @@ class NetworkStatesTest(unittest2.TestCase):
         for x in xrange(VLAN_MIN, VLAN_MAX + 1):
             physical_network, vlan_id = lb_db.reserve_network(self.session)
             self.assertEqual(physical_network, PHYS_NET)
-            self.assertGreaterEqual(vlan_id, VLAN_MIN)
-            self.assertLessEqual(vlan_id, VLAN_MAX)
+            self.assertThat(vlan_id, matchers.GreaterThan(VLAN_MIN - 1))
+            self.assertThat(vlan_id, matchers.LessThan(VLAN_MAX + 1))
             vlan_ids.add(vlan_id)
 
-        with self.assertRaises(q_exc.NoNetworkAvailable):
+        with testtools.ExpectedException(q_exc.NoNetworkAvailable):
             physical_network, vlan_id = lb_db.reserve_network(self.session)
 
         for vlan_id in vlan_ids:
@@ -123,7 +123,7 @@ class NetworkStatesTest(unittest2.TestCase):
         self.assertTrue(lb_db.get_network_state(PHYS_NET,
                                                 vlan_id).allocated)
 
-        with self.assertRaises(q_exc.VlanIdInUse):
+        with testtools.ExpectedException(q_exc.VlanIdInUse):
             lb_db.reserve_specific_network(self.session, PHYS_NET, vlan_id)
 
         lb_db.release_network(self.session, PHYS_NET, vlan_id, VLAN_RANGES)
@@ -137,7 +137,7 @@ class NetworkStatesTest(unittest2.TestCase):
         self.assertTrue(lb_db.get_network_state(PHYS_NET,
                                                 vlan_id).allocated)
 
-        with self.assertRaises(q_exc.VlanIdInUse):
+        with testtools.ExpectedException(q_exc.VlanIdInUse):
             lb_db.reserve_specific_network(self.session, PHYS_NET, vlan_id)
 
         lb_db.release_network(self.session, PHYS_NET, vlan_id, VLAN_RANGES)
index 8ce3fc4095937a8d525db7176e6fc5caaeebbc27..a03a29adf2931232f1207d61fcae416190d02c20 100644 (file)
 
 import mock
 from oslo.config import cfg
-import unittest2 as unittest
+import testtools
 
 from quantum.plugins.linuxbridge.agent import linuxbridge_quantum_agent
 from quantum.plugins.linuxbridge.common import constants as lconst
 
 
-class TestLinuxBridge(unittest.TestCase):
+class TestLinuxBridge(testtools.TestCase):
 
     def setUp(self):
+        super(TestLinuxBridge, self).setUp()
         self.addCleanup(cfg.CONF.reset)
         interface_mappings = {'physnet1': 'eth1'}
         root_helper = cfg.CONF.AGENT.root_helper
index 39f528c2109cc74743601f08d1ffb0e1fee259ce..56accecf504467670f1937ea87cbb37c87035607 100644 (file)
@@ -37,7 +37,6 @@ class LinuxBridgeSecurityGroupsTestCase(test_sg.SecurityGroupDBTestCase):
     _plugin_name = PLUGIN_NAME
 
     def setUp(self, plugin=None):
-        self.addCleanup(mock.patch.stopall)
         notifier_p = mock.patch(NOTIFIER)
         notifier_cls = notifier_p.start()
         self.notifier = mock.Mock()
@@ -48,10 +47,11 @@ class LinuxBridgeSecurityGroupsTestCase(test_sg.SecurityGroupDBTestCase):
                                              RESOURCE_ATTRIBUTE_MAP[item].
                                              copy())
         super(LinuxBridgeSecurityGroupsTestCase, self).setUp(PLUGIN_NAME)
+        self.addCleanup(mock.patch.stopall)
 
     def tearDown(self):
-        super(LinuxBridgeSecurityGroupsTestCase, self).tearDown()
         attributes.RESOURCE_ATTRIBUTE_MAP = self._attribute_map_bk_
+        super(LinuxBridgeSecurityGroupsTestCase, self).tearDown()
 
 
 class TestLinuxBridgeSecurityGroups(LinuxBridgeSecurityGroupsTestCase,
index bfdfdd402cac6ed798f7681e392bd6135d948bca..bf205118f85def6d880518b1635e767e4380a72a 100644 (file)
@@ -19,7 +19,7 @@ Unit Tests for linuxbridge rpc
 """
 
 import stubout
-import unittest2
+import testtools
 
 from quantum.agent import rpc as agent_rpc
 from quantum.common import topics
@@ -28,7 +28,7 @@ from quantum.openstack.common import rpc
 from quantum.plugins.linuxbridge import lb_quantum_plugin as plb
 
 
-class rpcApiTestCase(unittest2.TestCase):
+class rpcApiTestCase(testtools.TestCase):
 
     def _test_lb_api(self, rpcapi, topic, method, rpc_method, **kwargs):
         ctxt = context.RequestContext('fake_user', 'fake_project')
index 53480e277fcebbc6c5f3fedce0857715fa5c0769..5a408abee824d6ff5624b70bb001462cac817a2b 100644 (file)
@@ -21,7 +21,7 @@ import mock
 import mox
 from oslo.config import cfg
 import stubout
-import unittest2 as unittest
+import testtools
 
 from quantum import context
 from quantum.db import api as db
@@ -65,7 +65,7 @@ def setup_metaplugin_conf():
     cfg.CONF.set_override('max_dns_nameservers', 10)
 
 
-class MetaQuantumPluginV2Test(unittest.TestCase):
+class MetaQuantumPluginV2Test(testtools.TestCase):
     """Class conisting of MetaQuantumPluginV2 unit tests"""
 
     def setUp(self):
@@ -287,7 +287,7 @@ class MetaQuantumPluginV2Test(unittest.TestCase):
 
         self.plugin.delete_router(self.context, router_ret1['id'])
         self.plugin.delete_router(self.context, router_ret2['id'])
-        with self.assertRaises(FlavorNotFound):
+        with testtools.ExpectedException(FlavorNotFound):
             self.plugin.get_router(self.context, router_ret1['id'])
 
     def test_extension_method(self):
@@ -310,3 +310,4 @@ class MetaQuantumPluginV2Test(unittest.TestCase):
         self.stubs.SmartUnsetAll()
         self.mox.VerifyAll()
         db.clear_db()
+        super(MetaQuantumPluginV2Test, self).tearDown()
index d3621e1ce67ed0587d43e1dde5bbeb42574e1e2e..ead637e1963e896cec388ce213218a1aaacd875f 100644 (file)
@@ -19,7 +19,7 @@
 # @author: Ryu Ishimoto, Midokura Japan KK
 # @author: Tomoe Sugihara, Midokura Japan KK
 
-import unittest2 as unittest
+import testtools
 import uuid
 
 import mock
@@ -27,14 +27,12 @@ import mock
 from quantum.plugins.midonet import midonet_lib
 
 
-class MidonetLibTestCase(unittest.TestCase):
+class MidonetLibTestCase(testtools.TestCase):
 
     def setUp(self):
+        super(MidonetLibTestCase, self).setUp()
         self.mock_api = mock.Mock()
 
-    def tearDown(self):
-        self.mock_api = None
-
     def _create_mock_chains(self, sg_id, sg_name):
         mock_in_chain = mock.Mock()
         mock_in_chain.get_name.return_value = "OS_SG_%s_%s_IN" % (sg_id,
@@ -69,10 +67,6 @@ class MidonetChainManagerTestCase(MidonetLibTestCase):
         super(MidonetChainManagerTestCase, self).setUp()
         self.mgr = midonet_lib.ChainManager(self.mock_api)
 
-    def tearDown(self):
-        self.mgr = None
-        super(MidonetChainManagerTestCase, self).tearDown()
-
     def test_create_for_sg(self):
         tenant_id = 'test_tenant'
         sg_id = str(uuid.uuid4())
@@ -147,10 +141,6 @@ class MidonetPortGroupManagerTestCase(MidonetLibTestCase):
         super(MidonetPortGroupManagerTestCase, self).setUp()
         self.mgr = midonet_lib.PortGroupManager(self.mock_api)
 
-    def tearDown(self):
-        self.mgr = None
-        super(MidonetPortGroupManagerTestCase, self).tearDown()
-
     def test_create(self):
         tenant_id = 'test_tenant'
         sg_id = str(uuid.uuid4())
@@ -197,10 +187,6 @@ class MidonetRuleManagerTestCase(MidonetLibTestCase):
         self.mgr.chain_manager = mock.Mock()
         self.mgr.pg_manager = mock.Mock()
 
-    def tearDown(self):
-        self.mgr = None
-        super(MidonetRuleManagerTestCase, self).tearDown()
-
     def _create_test_rule(self, tenant_id, sg_id, rule_id, direction="egress",
                           protocol="tcp", port_min=1, port_max=65535,
                           src_ip='192.168.1.0/24', src_group_id=None,
index 3aa82faabe3d4eaa9b6d7328341a15cfc0236111..60699dccb88eefe592cb2919b77b29d81d2cfb88 100644 (file)
 #    under the License.
 # @author: Ryota MIBU
 
-import unittest
+import testtools
 
 from quantum.plugins.nec.common import config
 
 
-class ConfigurationTest(unittest.TestCase):
+class ConfigurationTest(testtools.TestCase):
 
     def test_defaults(self):
         self.assertEqual(-1, config.CONF.DATABASE.sql_max_retries)
index 58cbaef5558cbadf92f26de4bff2436bea88a648..0975b403413496ba8e84d5cdddba8939fbc3aa1e 100644 (file)
@@ -16,7 +16,7 @@
 # @author: Ryota MIBU
 
 import random
-import unittest
+import testtools
 
 from quantum.db import api as db_api
 from quantum.openstack.common import uuidutils
@@ -25,17 +25,15 @@ from quantum.plugins.nec.db import api as ndb
 from quantum.plugins.nec.db import models as nmodels
 
 
-class NECPluginV2DBTestBase(object):
+class NECPluginV2DBTestBase(testtools.TestCase):
     """Class conisting of NECPluginV2 DB unit tests"""
 
     def setUp(self):
         """Setup for tests"""
+        super(NECPluginV2DBTestBase, self).setUp()
         ndb.initialize()
         self.session = db_api.get_session()
-
-    def tearDown(self):
-        """Tear Down"""
-        ndb.clear_db()
+        self.addCleanup(ndb.clear_db)
 
     def get_ofc_item_random_params(self):
         """create random parameters for ofc_item test"""
@@ -55,8 +53,7 @@ class NECPluginV2DBTestBase(object):
         return port_id, datapath_id, port_no, vlan_id, mac, none
 
 
-class NECPluginV2DBTest(NECPluginV2DBTestBase,
-                        unittest.TestCase):
+class NECPluginV2DBTest(NECPluginV2DBTestBase):
 
     def testa_add_ofc_item(self):
         """test add OFC item"""
@@ -166,8 +163,7 @@ class NECPluginV2DBTest(NECPluginV2DBTestBase,
         self.assertEqual(None, portinfo_none)
 
 
-class NECPluginV2DBOldMappingTest(NECPluginV2DBTestBase,
-                                  unittest.TestCase):
+class NECPluginV2DBOldMappingTest(NECPluginV2DBTestBase):
     """Test related to old ID mapping"""
 
     # Mapping Table mode
index 51ed4306ffda889efdd3f7d081038a11bd9ca64c..b42e1b6b76cd66585235a5e949696dfab02cef16 100644 (file)
@@ -15,7 +15,7 @@
 #    under the License.
 # @author: Ryota MIBU
 
-import unittest
+import testtools
 
 from quantum import context
 from quantum.openstack.common import uuidutils
@@ -25,19 +25,18 @@ from quantum.plugins.nec.db import models as nmodels
 from quantum.plugins.nec import ofc_manager
 
 
-class OFCManagerTestBase(object):
+class OFCManagerTestBase(testtools.TestCase):
     """Class conisting of OFCManager unit tests"""
 
     def setUp(self):
+        super(OFCManagerTestBase, self).setUp()
         driver = "quantum.tests.unit.nec.stub_ofc_driver.StubOFCDriver"
         config.CONF.set_override('driver', driver, 'OFC')
         ndb.initialize()
+        self.addCleanup(ndb.clear_db)
         self.ofc = ofc_manager.OFCManager()
         self.ctx = context.get_admin_context()
 
-    def tearDown(self):
-        ndb.clear_db()
-
     def get_random_params(self):
         """create random parameters for portinfo test"""
         tenant = uuidutils.generate_uuid()
@@ -48,7 +47,7 @@ class OFCManagerTestBase(object):
         return tenant, network, port, _filter, none
 
 
-class OFCManagerTest(OFCManagerTestBase, unittest.TestCase):
+class OFCManagerTest(OFCManagerTestBase):
     def testa_create_ofc_tenant(self):
         """test create ofc_tenant"""
         t, n, p, f, none = self.get_random_params()
@@ -177,7 +176,7 @@ class OFCManagerTest(OFCManagerTestBase, unittest.TestCase):
                                           'ofc_packet_filter', f))
 
 
-class OFCManagerTestWithOldMapping(OFCManagerTestBase, unittest.TestCase):
+class OFCManagerTestWithOldMapping(OFCManagerTestBase):
 
     def test_exists_ofc_tenant(self):
         t, n, p, f, none = self.get_random_params()
index e59d13ab087bb64b0316f120cc0bf4c433e4bb11..91b5d35775a31328c3e63306ada74b52d825cdb0 100644 (file)
@@ -19,7 +19,7 @@ import random
 import string
 
 import mox
-import unittest
+import testtools
 
 from quantum import context
 from quantum.openstack.common import uuidutils
@@ -43,17 +43,16 @@ def _ofc(id):
     return "ofc-%s" % id
 
 
-class PFCDriverTestBase():
+class PFCDriverTestBase(testtools.TestCase):
 
     driver = 'quantum.plugins.nec.drivers.pfc.PFCDriverBase'
 
     def setUp(self):
+        super(PFCDriverTestBase, self).setUp()
         self.mox = mox.Mox()
         self.driver = drivers.get_driver(self.driver)(TestConfig)
         self.mox.StubOutWithMock(ofc.OFCClient, 'do_request')
-
-    def tearDown(self):
-        self.mox.UnsetStubs()
+        self.addCleanup(self.mox.UnsetStubs)
 
     def get_ofc_item_random_params(self):
         """create random parameters for ofc_item test"""
@@ -168,11 +167,11 @@ class PFCDriverTestBase():
         self.mox.VerifyAll()
 
 
-class PFCDriverBaseTest(PFCDriverTestBase, unittest.TestCase):
+class PFCDriverBaseTest(PFCDriverTestBase):
     pass
 
 
-class PFCV3DriverTest(PFCDriverTestBase, unittest.TestCase):
+class PFCV3DriverTest(PFCDriverTestBase):
     driver = 'pfc_v3'
 
     def testa_create_tenant(self):
@@ -189,20 +188,18 @@ class PFCV3DriverTest(PFCDriverTestBase, unittest.TestCase):
         pass
 
 
-class PFCV4DriverTest(PFCDriverTestBase, unittest.TestCase):
+class PFCV4DriverTest(PFCDriverTestBase):
     driver = 'pfc_v4'
 
 
-class PFCDriverStringTest(unittest.TestCase):
+class PFCDriverStringTest(testtools.TestCase):
 
     driver = 'quantum.plugins.nec.drivers.pfc.PFCDriverBase'
 
     def setUp(self):
+        super(PFCDriverStringTest, self).setUp()
         self.driver = drivers.get_driver(self.driver)(TestConfig)
 
-    def tearDown(self):
-        pass
-
     def test_generate_pfc_id_uuid(self):
         id_str = uuidutils.generate_uuid()
         exp_str = (id_str[:14] + id_str[15:]).replace('-', '')[:31]
@@ -238,18 +235,17 @@ class PFCDriverStringTest(unittest.TestCase):
         self.assertEqual(exp_str, ret_str)
 
 
-class PFCIdConvertTest(unittest.TestCase):
+class PFCIdConvertTest(testtools.TestCase):
     driver = 'quantum.plugins.nec.drivers.pfc.PFCDriverBase'
 
     def setUp(self):
+        super(PFCIdConvertTest, self).setUp()
         self.mox = mox.Mox()
         self.driver = drivers.get_driver(self.driver)(TestConfig)
         self.ctx = self.mox.CreateMock(context.Context)
         self.ctx.session = "session"
         self.mox.StubOutWithMock(ndb, 'get_ofc_id_lookup_both')
-
-    def tearDown(self):
-        self.mox.UnsetStubs()
+        self.addCleanup(self.mox.UnsetStubs)
 
     def generate_random_ids(self, count=1):
         if count == 1:
index 4eedd09ae481eb192b3df83e0733ad54ab840024..a785234963813c9a2216881f95439cab3048f5ec 100644 (file)
@@ -16,7 +16,7 @@
 # @author: Ryota MIBU
 
 import mox
-import unittest
+import testtools
 
 from quantum import context
 from quantum.openstack.common import uuidutils
@@ -32,17 +32,16 @@ class TestConfig(object):
     port = 8888
 
 
-class TremaDriverTestBase():
+class TremaDriverTestBase(testtools.TestCase):
 
     driver_name = "trema"
 
     def setUp(self):
+        super(TremaDriverTestBase, self).setUp()
         self.mox = mox.Mox()
         self.driver = drivers.get_driver(self.driver_name)(TestConfig)
         self.mox.StubOutWithMock(ofc_client.OFCClient, 'do_request')
-
-    def tearDown(self):
-        self.mox.UnsetStubs()
+        self.addCleanup(self.mox.UnsetStubs)
 
     def get_ofc_item_random_params(self):
         """create random parameters for ofc_item test"""
@@ -80,7 +79,7 @@ class TremaDriverNetworkTestBase(TremaDriverTestBase):
         self.mox.VerifyAll()
 
 
-class TremaPortBaseDriverTest(TremaDriverNetworkTestBase, unittest.TestCase):
+class TremaPortBaseDriverTest(TremaDriverNetworkTestBase):
 
     driver_name = "trema_port"
 
@@ -111,8 +110,7 @@ class TremaPortBaseDriverTest(TremaDriverNetworkTestBase, unittest.TestCase):
         self.mox.VerifyAll()
 
 
-class TremaPortMACBaseDriverTest(TremaDriverNetworkTestBase,
-                                 unittest.TestCase):
+class TremaPortMACBaseDriverTest(TremaDriverNetworkTestBase):
 
     driver_name = "trema_portmac"
 
@@ -152,7 +150,7 @@ class TremaPortMACBaseDriverTest(TremaDriverNetworkTestBase,
         self.mox.VerifyAll()
 
 
-class TremaMACBaseDriverTest(TremaDriverNetworkTestBase, unittest.TestCase):
+class TremaMACBaseDriverTest(TremaDriverNetworkTestBase):
 
     driver_name = "trema_mac"
 
@@ -180,7 +178,7 @@ class TremaMACBaseDriverTest(TremaDriverNetworkTestBase, unittest.TestCase):
         self.mox.VerifyAll()
 
 
-class TremaFilterDriverTest(TremaDriverTestBase, unittest.TestCase):
+class TremaFilterDriverTest(TremaDriverTestBase):
 
     def get_ofc_item_random_params(self):
         """create random parameters for ofc_item test"""
@@ -247,16 +245,15 @@ def generate_random_ids(count=1):
         return [uuidutils.generate_uuid() for i in xrange(count)]
 
 
-class TremaIdConvertTest(unittest.TestCase):
+class TremaIdConvertTest(testtools.TestCase):
     driver_name = 'trema'
 
     def setUp(self):
+        super(TremaIdConvertTest, self).setUp()
         self.driver = drivers.get_driver(self.driver_name)(TestConfig)
         self.mox = mox.Mox()
         self.ctx = self.mox.CreateMock(context.Context)
-
-    def tearDown(self):
-        self.mox.UnsetStubs()
+        self.addCleanup(self.mox.UnsetStubs)
 
     def test_convert_tenant_id(self):
         ofc_t_id = generate_random_ids(1)
@@ -291,16 +288,15 @@ class TremaIdConvertTest(unittest.TestCase):
         self.assertEqual(ret, ofc_f_id)
 
 
-class TremaIdConvertTestBase(object):
+class TremaIdConvertTestBase(testtools.TestCase):
     def setUp(self):
+        super(TremaIdConvertTestBase, self).setUp()
         self.mox = mox.Mox()
         self.driver = drivers.get_driver(self.driver_name)(TestConfig)
         self.ctx = self.mox.CreateMock(context.Context)
         self.ctx.session = "session"
         self.mox.StubOutWithMock(ndb, 'get_ofc_id_lookup_both')
-
-    def tearDown(self):
-        self.mox.UnsetStubs()
+        self.addCleanup(self.mox.UnsetStubs)
 
     def _test_convert_port_id(self, port_path_template):
         t_id, n_id = generate_random_ids(2)
@@ -339,7 +335,7 @@ class TremaIdConvertTestBase(object):
         self.assertEqual(ret, ofc_p_id)
 
 
-class TremaIdConvertPortBaseTest(TremaIdConvertTestBase, unittest.TestCase):
+class TremaIdConvertPortBaseTest(TremaIdConvertTestBase):
     driver_name = "trema_port"
 
     def test_convert_port_id(self):
@@ -354,7 +350,7 @@ class TremaIdConvertPortBaseTest(TremaIdConvertTestBase, unittest.TestCase):
             '/networs/%(network)s/ports/%(port)s')
 
 
-class TremaIdConvertPortMACBaseTest(TremaIdConvertTestBase, unittest.TestCase):
+class TremaIdConvertPortMACBaseTest(TremaIdConvertTestBase):
     driver_name = "trema_portmac"
 
     def test_convert_port_id(self):
@@ -370,7 +366,7 @@ class TremaIdConvertPortMACBaseTest(TremaIdConvertTestBase, unittest.TestCase):
             '/networs/%(network)s/ports/dummy-%(port)s/attachments/%(port)s')
 
 
-class TremaIdConvertMACBaseTest(TremaIdConvertTestBase, unittest.TestCase):
+class TremaIdConvertMACBaseTest(TremaIdConvertTestBase):
     driver_name = "trema_mac"
 
     def test_convert_port_id(self):
index 62a48ef2b8f3d38772a024b1b7da5d0457b2fb29..fffb796305932e7a98e4a4232021b29253590de5 100644 (file)
 #    under the License.
 #
 
-import unittest2 as unittest
+import testtools
 
 from oslo.config import cfg
 
 from quantum.plugins.nicira.nicira_nvp_plugin.common import config
 
 
-class ConfigurationTest(unittest.TestCase):
+class ConfigurationTest(testtools.TestCase):
 
     def test_defaults(self):
         self.assertEqual(-1, cfg.CONF.DATABASE.sql_max_retries)
index 03aac871918fa03b49c3bb65f801834a9cc242ea..ecc7c0eebbd63fdc11747220f80624deced37763 100644 (file)
@@ -16,7 +16,7 @@
 import contextlib
 
 import mock
-import unittest2 as unittest
+import testtools
 from webob import exc
 import webtest
 
@@ -53,9 +53,10 @@ class TestExtensionManager(object):
         return []
 
 
-class NetworkGatewayExtensionTestCase(unittest.TestCase):
+class NetworkGatewayExtensionTestCase(testtools.TestCase):
 
     def setUp(self):
+        super(NetworkGatewayExtensionTestCase, self).setUp()
         plugin = '%s.%s' % (networkgw.__name__,
                             networkgw.NetworkGatewayPluginBase.__name__)
         self._resource = networkgw.RESOURCE_NAME.replace('-', '_')
@@ -71,9 +72,11 @@ class NetworkGatewayExtensionTestCase(unittest.TestCase):
 
         # Update the plugin and extensions path
         cfg.CONF.set_override('core_plugin', plugin)
+        self.addCleanup(cfg.CONF.reset)
 
-        self._plugin_patcher = mock.patch(plugin, autospec=True)
-        self.plugin = self._plugin_patcher.start()
+        _plugin_patcher = mock.patch(plugin, autospec=True)
+        self.plugin = _plugin_patcher.start()
+        self.addCleanup(_plugin_patcher.stop)
 
         # Instantiate mock plugin and enable extensions
         manager.QuantumManager.get_plugin().supported_extension_aliases = (
@@ -83,12 +86,6 @@ class NetworkGatewayExtensionTestCase(unittest.TestCase):
         self.ext_mdw = test_extensions.setup_extensions_middleware(ext_mgr)
         self.api = webtest.TestApp(self.ext_mdw)
 
-    def tearDown(self):
-        self._plugin_patcher.stop()
-        self.api = None
-        self.plugin = None
-        cfg.CONF.reset()
-
     def test_network_gateway_create(self):
         nw_gw_id = _uuid()
         data = {self._resource: {'name': 'nw-gw',
index 803b7039032109d4c8934683305dd63bd7d45d20..87c09abe195d1d684c87a426aa67a9fd16739f96 100644 (file)
@@ -20,6 +20,7 @@ import os
 import mock
 import netaddr
 from oslo.config import cfg
+import testtools
 import webob.exc
 
 from quantum.common import constants
@@ -88,11 +89,8 @@ class NiciraPluginV2TestCase(test_plugin.QuantumDbPluginV2TestCase):
         instance.return_value.request.side_effect = _fake_request
         super(NiciraPluginV2TestCase, self).setUp(self._plugin_name)
         cfg.CONF.set_override('enable_metadata_access_network', False, 'NVP')
-
-    def tearDown(self):
-        self.fc.reset_all()
-        super(NiciraPluginV2TestCase, self).tearDown()
-        self.mock_nvpapi.stop()
+        self.addCleanup(self.fc.reset_all)
+        self.addCleanup(self.mock_nvpapi.stop)
 
 
 class TestNiciraBasicGet(test_plugin.TestBasicGet, NiciraPluginV2TestCase):
@@ -183,9 +181,10 @@ class TestNiciraNetworksV2(test_plugin.TestNetworksV2,
         self._test_create_bridge_network(vlan_id=123)
 
     def test_create_bridge_vlan_network_outofrange_returns_400(self):
-        with self.assertRaises(webob.exc.HTTPClientError) as ctx_manager:
+        with testtools.ExpectedException(
+                webob.exc.HTTPClientError) as ctx_manager:
             self._test_create_bridge_network(vlan_id=5000)
-        self.assertEqual(ctx_manager.exception.code, 400)
+            self.assertEqual(ctx_manager.exception.code, 400)
 
     def test_list_networks_filter_by_id(self):
         # We add this unit test to cover some logic specific to the
@@ -220,10 +219,7 @@ class NiciraPortSecurityTestCase(psec.PortSecurityDBTestCase):
 
         instance.return_value.request.side_effect = _fake_request
         super(NiciraPortSecurityTestCase, self).setUp(self._plugin_name)
-
-    def tearDown(self):
-        super(NiciraPortSecurityTestCase, self).tearDown()
-        self.mock_nvpapi.stop()
+        self.addCleanup(self.mock_nvpapi.stop)
 
 
 class TestNiciraPortSecurity(psec.TestPortSecurity,
index ce332dbfd8f1ae9184a2157e85bf733843e3edea..c9b774d4a721f414a01c4b48f8f1cb1426a0441c 100644 (file)
@@ -7,20 +7,15 @@
 
 # System
 import httplib
-import unittest
 
 # Third party
+import testtools
+
 # Local
 import quantum.plugins.nicira.nicira_nvp_plugin.api_client.common as naco
 
 
-class NvpApiCommonTest(unittest.TestCase):
-
-    def setUp(self):
-        pass
-
-    def tearDown(self):
-        pass
+class NvpApiCommonTest(testtools.TestCase):
 
     def test_conn_str(self):
         conn = httplib.HTTPSConnection('localhost', 4242, timeout=0)
index c0d3ab1391547c3befce2f346e48fc6277940f40..005449a2ca4f9e9152ade6e40a2dd4d0fd2688ab 100644 (file)
@@ -8,9 +8,10 @@
 import eventlet
 eventlet.monkey_patch()
 import logging
-import unittest
 import urllib2
 
+import testtools
+
 logging.basicConfig(level=logging.DEBUG)
 lg = logging.getLogger("test_nvp_api_request")
 
@@ -21,10 +22,6 @@ def fetch(url):
     return urllib2.urlopen(url).read()
 
 
-class NvpApiRequestTest(unittest.TestCase):
-
-    def setUp(self):
-        pass
+class NvpApiRequestTest(testtools.TestCase):
 
-    def tearDown(self):
-        pass
+    pass
index 3e7ec54a290722a5049d0c239b8b414548be1947..4a475c7dd6f0612bfebedebec6c484943478b7a9 100644 (file)
@@ -16,12 +16,12 @@ import httplib
 import logging
 import new
 import random
-import unittest
 
 import eventlet
 from eventlet.green import urllib2
 from mock import Mock
 from mock import patch
+import testtools
 
 from quantum.plugins.nicira.nicira_nvp_plugin.api_client import (
     client_eventlet as nace,
@@ -40,10 +40,11 @@ def fetch(url):
     return urllib2.urlopen(url).read()
 
 
-class NvpApiRequestEventletTest(unittest.TestCase):
+class NvpApiRequestEventletTest(testtools.TestCase):
 
     def setUp(self):
 
+        super(NvpApiRequestEventletTest, self).setUp()
         self.client = nace.NvpApiClientEventlet(
             [("127.0.0.1", 4401, True)], "admin", "admin")
         self.url = "/ws.v1/_debug"
@@ -52,6 +53,7 @@ class NvpApiRequestEventletTest(unittest.TestCase):
     def tearDown(self):
         self.client = None
         self.req = None
+        super(NvpApiRequestEventletTest, self).tearDown()
 
     def test_construct_eventlet_api_request(self):
         e = nare.NvpApiRequestEventlet(self.client, self.url)
index 9f40b6218847d0b5c141c5b9384b9541ed4cf83e..0648c975c0d71d70363f8d046b984122a225e82b 100644 (file)
 #
 # @author: Salvatore Orlando, VMware
 
+import mock
 import os
 
-import mock
-import unittest2 as unittest
+import testtools
 
 from quantum.openstack.common import jsonutils as json
 import quantum.plugins.nicira.nicira_nvp_plugin as nvp_plugin
@@ -32,7 +32,7 @@ NICIRA_PKG_PATH = nvp_plugin.__name__
 _uuid = test_api_v2._uuid
 
 
-class NvplibTestCase(unittest.TestCase):
+class NvplibTestCase(testtools.TestCase):
 
     def setUp(self):
         # mock nvp api client
@@ -57,10 +57,8 @@ class NvplibTestCase(unittest.TestCase):
             self.fake_cluster.retries, self.fake_cluster.redirects)
 
         super(NvplibTestCase, self).setUp()
-
-    def tearDown(self):
-        self.fc.reset_all()
-        self.mock_nvpapi.stop()
+        self.addCleanup(self.fc.reset_all)
+        self.addCleanup(self.mock_nvpapi.stop)
 
 
 class TestNvplibNatRules(NvplibTestCase):
@@ -143,7 +141,7 @@ class NvplibL2GatewayTestCase(NvplibTestCase):
             gw_ids.append(self._create_gw_service(_uuid(), name)['uuid'])
         results = nvplib.get_l2_gw_services(self.fake_cluster)
         self.assertEqual(len(results), 2)
-        self.assertItemsEqual(gw_ids, [r['uuid'] for r in results])
+        self.assertEqual(sorted(gw_ids), sorted([r['uuid'] for r in results]))
 
     def test_delete_l2_gw_service(self):
         display_name = 'fake-gateway'
index 3685e34a626ef8abbab4f9497586480aebba547a..452e1c5abfecfb85d55b0b2fd015d65a88576936 100644 (file)
@@ -13,7 +13,8 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-import unittest2
+import testtools
+from testtools import matchers
 
 from quantum.common import exceptions as q_exc
 from quantum.db import api as db
@@ -33,14 +34,13 @@ TUNNEL_RANGES = [(TUN_MIN, TUN_MAX)]
 UPDATED_TUNNEL_RANGES = [(TUN_MIN + 5, TUN_MAX + 5)]
 
 
-class VlanAllocationsTest(unittest2.TestCase):
+class VlanAllocationsTest(testtools.TestCase):
     def setUp(self):
+        super(VlanAllocationsTest, self).setUp()
         ovs_db_v2.initialize()
         ovs_db_v2.sync_vlan_allocations(VLAN_RANGES)
         self.session = db.get_session()
-
-    def tearDown(self):
-        db.clear_db()
+        self.addCleanup(db.clear_db)
 
     def test_sync_vlan_allocations(self):
         self.assertIsNone(ovs_db_v2.get_vlan_allocation(PHYS_NET,
@@ -117,19 +117,19 @@ class VlanAllocationsTest(unittest2.TestCase):
         for x in xrange(VLAN_MIN, VLAN_MAX + 1):
             physical_network, vlan_id = ovs_db_v2.reserve_vlan(self.session)
             self.assertEqual(physical_network, PHYS_NET)
-            self.assertGreaterEqual(vlan_id, VLAN_MIN)
-            self.assertLessEqual(vlan_id, VLAN_MAX)
+            self.assertThat(vlan_id, matchers.GreaterThan(VLAN_MIN - 1))
+            self.assertThat(vlan_id, matchers.LessThan(VLAN_MAX + 1))
             vlan_ids.add(vlan_id)
 
-        with self.assertRaises(q_exc.NoNetworkAvailable):
+        with testtools.ExpectedException(q_exc.NoNetworkAvailable):
             physical_network, vlan_id = ovs_db_v2.reserve_vlan(self.session)
 
         ovs_db_v2.release_vlan(self.session, PHYS_NET, vlan_ids.pop(),
                                VLAN_RANGES)
         physical_network, vlan_id = ovs_db_v2.reserve_vlan(self.session)
         self.assertEqual(physical_network, PHYS_NET)
-        self.assertGreaterEqual(vlan_id, VLAN_MIN)
-        self.assertLessEqual(vlan_id, VLAN_MAX)
+        self.assertThat(vlan_id, matchers.GreaterThan(VLAN_MIN - 1))
+        self.assertThat(vlan_id, matchers.LessThan(VLAN_MAX + 1))
         vlan_ids.add(vlan_id)
 
         for vlan_id in vlan_ids:
@@ -144,7 +144,7 @@ class VlanAllocationsTest(unittest2.TestCase):
         self.assertTrue(ovs_db_v2.get_vlan_allocation(PHYS_NET,
                                                       vlan_id).allocated)
 
-        with self.assertRaises(q_exc.VlanIdInUse):
+        with testtools.ExpectedException(q_exc.VlanIdInUse):
             ovs_db_v2.reserve_specific_vlan(self.session, PHYS_NET, vlan_id)
 
         ovs_db_v2.release_vlan(self.session, PHYS_NET, vlan_id, VLAN_RANGES)
@@ -158,7 +158,7 @@ class VlanAllocationsTest(unittest2.TestCase):
         self.assertTrue(ovs_db_v2.get_vlan_allocation(PHYS_NET,
                                                       vlan_id).allocated)
 
-        with self.assertRaises(q_exc.VlanIdInUse):
+        with testtools.ExpectedException(q_exc.VlanIdInUse):
             ovs_db_v2.reserve_specific_vlan(self.session, PHYS_NET, vlan_id)
 
         ovs_db_v2.release_vlan(self.session, PHYS_NET, vlan_id, VLAN_RANGES)
@@ -169,8 +169,8 @@ class VlanAllocationsTest(unittest2.TestCase):
         for x in xrange(VLAN_MIN, VLAN_MAX + 1):
             physical_network, vlan_id = ovs_db_v2.reserve_vlan(self.session)
             self.assertEqual(physical_network, PHYS_NET)
-            self.assertGreaterEqual(vlan_id, VLAN_MIN)
-            self.assertLessEqual(vlan_id, VLAN_MAX)
+            self.assertThat(vlan_id, matchers.GreaterThan(VLAN_MIN - 1))
+            self.assertThat(vlan_id, matchers.LessThan(VLAN_MAX + 1))
             vlan_ids.add(vlan_id)
 
         ovs_db_v2.release_vlan(self.session, PHYS_NET, vlan_ids.pop(),
@@ -178,14 +178,13 @@ class VlanAllocationsTest(unittest2.TestCase):
         ovs_db_v2.sync_vlan_allocations({})
 
 
-class TunnelAllocationsTest(unittest2.TestCase):
+class TunnelAllocationsTest(testtools.TestCase):
     def setUp(self):
+        super(TunnelAllocationsTest, self).setUp()
         ovs_db_v2.initialize()
         ovs_db_v2.sync_tunnel_allocations(TUNNEL_RANGES)
         self.session = db.get_session()
-
-    def tearDown(self):
-        db.clear_db()
+        self.addCleanup(db.clear_db)
 
     def test_sync_tunnel_allocations(self):
         self.assertIsNone(ovs_db_v2.get_tunnel_allocation(TUN_MIN - 1))
@@ -214,17 +213,17 @@ class TunnelAllocationsTest(unittest2.TestCase):
         tunnel_ids = set()
         for x in xrange(TUN_MIN, TUN_MAX + 1):
             tunnel_id = ovs_db_v2.reserve_tunnel(self.session)
-            self.assertGreaterEqual(tunnel_id, TUN_MIN)
-            self.assertLessEqual(tunnel_id, TUN_MAX)
+            self.assertThat(tunnel_id, matchers.GreaterThan(TUN_MIN - 1))
+            self.assertThat(tunnel_id, matchers.LessThan(TUN_MAX + 1))
             tunnel_ids.add(tunnel_id)
 
-        with self.assertRaises(q_exc.NoNetworkAvailable):
+        with testtools.ExpectedException(q_exc.NoNetworkAvailable):
             tunnel_id = ovs_db_v2.reserve_tunnel(self.session)
 
         ovs_db_v2.release_tunnel(self.session, tunnel_ids.pop(), TUNNEL_RANGES)
         tunnel_id = ovs_db_v2.reserve_tunnel(self.session)
-        self.assertGreaterEqual(tunnel_id, TUN_MIN)
-        self.assertLessEqual(tunnel_id, TUN_MAX)
+        self.assertThat(tunnel_id, matchers.GreaterThan(TUN_MIN - 1))
+        self.assertThat(tunnel_id, matchers.LessThan(TUN_MAX + 1))
         tunnel_ids.add(tunnel_id)
 
         for tunnel_id in tunnel_ids:
@@ -236,7 +235,7 @@ class TunnelAllocationsTest(unittest2.TestCase):
         ovs_db_v2.reserve_specific_tunnel(self.session, tunnel_id)
         self.assertTrue(ovs_db_v2.get_tunnel_allocation(tunnel_id).allocated)
 
-        with self.assertRaises(q_exc.TunnelIdInUse):
+        with testtools.ExpectedException(q_exc.TunnelIdInUse):
             ovs_db_v2.reserve_specific_tunnel(self.session, tunnel_id)
 
         ovs_db_v2.release_tunnel(self.session, tunnel_id, TUNNEL_RANGES)
@@ -248,7 +247,7 @@ class TunnelAllocationsTest(unittest2.TestCase):
         ovs_db_v2.reserve_specific_tunnel(self.session, tunnel_id)
         self.assertTrue(ovs_db_v2.get_tunnel_allocation(tunnel_id).allocated)
 
-        with self.assertRaises(q_exc.TunnelIdInUse):
+        with testtools.ExpectedException(q_exc.TunnelIdInUse):
             ovs_db_v2.reserve_specific_tunnel(self.session, tunnel_id)
 
         ovs_db_v2.release_tunnel(self.session, tunnel_id, TUNNEL_RANGES)
index 60c13e4f10241b25a6235e890739a3e0f0a566c4..898a035faafc06695de8e892364f29507a55fa86 100644 (file)
@@ -13,7 +13,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-import unittest
+import testtools
 
 from oslo.config import cfg
 
@@ -21,7 +21,7 @@ from oslo.config import cfg
 from quantum.plugins.openvswitch.common import config
 
 
-class ConfigurationTest(unittest.TestCase):
+class ConfigurationTest(testtools.TestCase):
 
     def test_defaults(self):
         self.assertEqual('br-int', cfg.CONF.OVS.integration_bridge)
index d84780da9d14427bd1ecbd89d8f3d7b57c9d6546..e3fb81a6493e413f9272dd749d6ecfd192009b0e 100644 (file)
 # @author: Dan Wendlandt, Nicira, Inc.
 
 import mox
-import unittest2 as unittest
+import testtools
 
 from quantum.agent.linux import ovs_lib, utils
 from quantum.openstack.common import uuidutils
 
 
-class OVS_Lib_Test(unittest.TestCase):
+class OVS_Lib_Test(testtools.TestCase):
     """
     A test suite to excercise the OVS libraries shared by Quantum agents.
     Note: these tests do not actually execute ovs-* utilities, and thus
@@ -30,6 +30,7 @@ class OVS_Lib_Test(unittest.TestCase):
     """
 
     def setUp(self):
+        super(OVS_Lib_Test, self).setUp()
         self.BR_NAME = "br-int"
         self.TO = "--timeout=2"
 
@@ -37,9 +38,7 @@ class OVS_Lib_Test(unittest.TestCase):
         self.root_helper = 'sudo'
         self.br = ovs_lib.OVSBridge(self.BR_NAME, self.root_helper)
         self.mox.StubOutWithMock(utils, "execute")
-
-    def tearDown(self):
-        self.mox.UnsetStubs()
+        self.addCleanup(self.mox.UnsetStubs)
 
     def test_vifport(self):
         """create and stringify vif port, confirm no exceptions"""
index 17f0c8c4fd8db9a6363c5f07491ec608425816cd..0744f9c5b51c8c6b0dcfaf0f3975b53b676d0ab5 100644 (file)
@@ -16,7 +16,7 @@
 
 import mock
 from oslo.config import cfg
-import unittest2 as unittest
+import testtools
 
 from quantum.plugins.openvswitch.agent import ovs_quantum_agent
 
@@ -25,7 +25,7 @@ NOTIFIER = ('quantum.plugins.openvswitch.'
             'ovs_quantum_plugin.AgentNotifierApi')
 
 
-class CreateAgentConfigMap(unittest.TestCase):
+class CreateAgentConfigMap(testtools.TestCase):
 
     def test_create_agent_config_map_succeeds(self):
         self.assertTrue(ovs_quantum_agent.create_agent_config_map(cfg.CONF))
@@ -34,13 +34,14 @@ class CreateAgentConfigMap(unittest.TestCase):
         self.addCleanup(cfg.CONF.reset)
         # An ip address is required for tunneling but there is no default
         cfg.CONF.set_override('enable_tunneling', True, group='OVS')
-        with self.assertRaises(ValueError):
+        with testtools.ExpectedException(ValueError):
             ovs_quantum_agent.create_agent_config_map(cfg.CONF)
 
 
-class TestOvsQuantumAgent(unittest.TestCase):
+class TestOvsQuantumAgent(testtools.TestCase):
 
     def setUp(self):
+        super(TestOvsQuantumAgent, self).setUp()
         self.addCleanup(cfg.CONF.reset)
         self.addCleanup(mock.patch.stopall)
         notifier_p = mock.patch(NOTIFIER)
index fdb181ba5cd0ce17151fb10ac1fa9ae1392e7c13..32224335b9e3a713e64b315eb8479fdfd6b1e74b 100644 (file)
@@ -19,7 +19,7 @@ Unit Tests for openvswitch rpc
 """
 
 import stubout
-import unittest2
+import testtools
 
 from quantum.agent import rpc as agent_rpc
 from quantum.common import topics
@@ -29,7 +29,7 @@ from quantum.plugins.openvswitch.common import constants
 from quantum.plugins.openvswitch import ovs_quantum_plugin as povs
 
 
-class rpcApiTestCase(unittest2.TestCase):
+class rpcApiTestCase(testtools.TestCase):
 
     def _test_ovs_api(self, rpcapi, topic, method, rpc_method, **kwargs):
         ctxt = context.RequestContext('fake_user', 'fake_project')
index 8f5e578f55d91ea16be07143fe607e75ad2fe63a..79460590cbf83e3d114ca08d9b7dbf70c0e0e141 100644 (file)
 #
 # @author: Dave Lapsley, Nicira Networks, Inc.
 
-import unittest
-
 import mox
 from oslo.config import cfg
+import testtools
 
 from quantum.agent.linux import ip_lib
 from quantum.agent.linux import ovs_lib
@@ -60,12 +59,16 @@ class DummyVlanBinding:
         self.vlan_id = vlan_id
 
 
-class TunnelTest(unittest.TestCase):
+class TunnelTest(testtools.TestCase):
+
     def setUp(self):
+        super(TunnelTest, self).setUp()
         cfg.CONF.set_override('rpc_backend',
                               'quantum.openstack.common.rpc.impl_fake')
         cfg.CONF.set_override('report_interval', 0, 'AGENT')
         self.mox = mox.Mox()
+        self.addCleanup(self.mox.UnsetStubs)
+
         self.INT_BRIDGE = 'integration_bridge'
         self.TUN_BRIDGE = 'tunnel_bridge'
         self.MAP_TUN_BRIDGE = 'tunnel_bridge_mapping'
@@ -124,9 +127,6 @@ class TunnelTest(unittest.TestCase):
         self.mox.StubOutWithMock(utils, 'get_interface_mac')
         utils.get_interface_mac(self.INT_BRIDGE).AndReturn('000000000001')
 
-    def tearDown(self):
-        self.mox.UnsetStubs()
-
     def testConstruct(self):
         self.mox.ReplayAll()
         b = ovs_quantum_agent.OVSQuantumAgent(self.INT_BRIDGE,
index c2d81bf49c935f3fa7cc64cc86f9c4a463dfc4cc..40fc8d679b2d3faea85f3cee208a009ba521bf39 100644 (file)
 #    under the License.
 
 from oslo.config import cfg
-import unittest2
+import testtools
 
 #NOTE this import loads tests required options
 from quantum.plugins.ryu.common import config
 
 
-class ConfigurationTest(unittest2.TestCase):
+class ConfigurationTest(testtools.TestCase):
     """Configuration file Tests"""
     def test_defaults(self):
         self.assertEqual('br-int', cfg.CONF.OVS.integration_bridge)
index 95cc4407e92700113d73b2042005076285dd2893..6c3c91ced7bb067b96e83c6c18ebedec4d144ada 100644 (file)
@@ -17,17 +17,18 @@ from contextlib import nested
 import httplib
 
 import mock
-import unittest2 as unittest
+import testtools
 
 from quantum.openstack.common import importutils
 from quantum.tests.unit.ryu import fake_ryu
 
 
-class RyuAgentTestCase(unittest.TestCase):
+class RyuAgentTestCase(testtools.TestCase):
 
     _AGENT_NAME = 'quantum.plugins.ryu.agent.ryu_quantum_agent'
 
     def setUp(self):
+        super(RyuAgentTestCase, self).setUp()
         self.addCleanup(mock.patch.stopall)
         self.fake_ryu = fake_ryu.patch_fake_ryu_client().start()
         self.mod_agent = importutils.import_module(self._AGENT_NAME)
index f3305b0e4388b09a97b90fc07035103e80471c37..9a3db8fd32a76da5d25c3d191d996315e40b68e5 100644 (file)
@@ -27,6 +27,7 @@ class RyuPluginV2TestCase(test_plugin.QuantumDbPluginV2TestCase):
         self.ryu_patcher = fake_ryu.patch_fake_ryu_client()
         self.ryu_patcher.start()
         super(RyuPluginV2TestCase, self).setUp(self._plugin_name)
+        self.addCleanup(self.ryu_patcher.stop)
 
 
 class TestRyuBasicGet(test_plugin.TestBasicGet, RyuPluginV2TestCase):
index 688f75009c43bb8ff981d46bd2ca8a875800798a..f1a800734e69e7a63d98ae75ad6912aac1ac8061 100644 (file)
@@ -15,7 +15,7 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import unittest2
+import testtools
 
 from quantum.agent.common import config
 
@@ -25,7 +25,7 @@ def test_setup_conf():
     assert conf.state_path.endswith('/var/lib/quantum')
 
 
-class TestRootHelper(unittest2.TestCase):
+class TestRootHelper(testtools.TestCase):
 
     def test_agent_root_helper(self):
         conf = config.setup_conf()
index 92677ef67344cb794f50926bb3bfc7e1008d78e5..840d9dcb7c38c93a61c26b43f148234fc8940251 100644 (file)
 #    under the License.
 # @author: Dan Wendlandt, Nicira, Inc.
 
-import unittest
-
 import mock
+import testtools
 
 from quantum.agent.linux import utils
 
 
-class AgentUtilsExecuteTest(unittest.TestCase):
+class AgentUtilsExecuteTest(testtools.TestCase):
     def setUp(self):
+        super(AgentUtilsExecuteTest, self).setUp()
         self.root_helper = "echo"
         self.test_file = "/tmp/test_execute.tmp"
         open(self.test_file, 'w').close()
@@ -61,7 +61,7 @@ class AgentUtilsExecuteTest(unittest.TestCase):
         self.assertEqual(result, "%s\n" % self.test_file)
 
 
-class AgentUtilsGetInterfaceMAC(unittest.TestCase):
+class AgentUtilsGetInterfaceMAC(testtools.TestCase):
     def test_get_interface_mac(self):
         expect_val = '01:02:03:04:05:06'
         with mock.patch('fcntl.ioctl') as ioctl:
index 1bbd80d5bdb4c051f75932499aab0315cf6a535a..45f284837c237f494a6f25458d97b6f883d17d50 100644 (file)
 
 import mock
 from oslo.config import cfg
-import unittest2 as unittest
+import testtools
 
 from quantum.agent import netns_cleanup_util as util
 
 
-class TestNullDelegate(unittest.TestCase):
+class TestNullDelegate(testtools.TestCase):
     def test_getattribute(self):
         null_delegate = util.NullDelegate()
         self.assertIsNone(null_delegate.test())
 
 
-class TestNetnsCleanup(unittest.TestCase):
-    def tearDown(self):
-        cfg.CONF.reset()
+class TestNetnsCleanup(testtools.TestCase):
+    def setUp(self):
+        super(TestNetnsCleanup, self).setUp()
+        self.addCleanup(cfg.CONF.reset)
 
     def test_kill_dhcp(self, dhcp_active=True):
         conf = mock.Mock()
index d5cfb64db3952acbcdb7ef9f54c6bc07d1d869bc..6ab4b0fdde248d3ec7a53499e2a7d7fda8b388fb 100644 (file)
@@ -19,7 +19,7 @@ import contextlib
 import itertools
 import mock
 from oslo.config import cfg
-import unittest2 as unittest
+import testtools
 
 from quantum.agent.linux import ip_lib
 from quantum.agent.linux import ovs_lib
@@ -27,9 +27,10 @@ from quantum.agent import ovs_cleanup_util as util
 from quantum.openstack.common import uuidutils
 
 
-class TestOVSCleanup(unittest.TestCase):
-    def tearDown(self):
-        cfg.CONF.reset()
+class TestOVSCleanup(testtools.TestCase):
+    def setUp(self):
+        super(TestOVSCleanup, self).setUp()
+        self.addCleanup(cfg.CONF.reset)
 
     def test_setup_conf(self):
         conf = util.setup_conf()
index d9a6ffd28facac632e22333750451612f4806abc..b99a202c6ff567a984fb5b2535a3ec3681e728c4 100644 (file)
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import unittest
-
 import mock
 from oslo.config import cfg
+import testtools
 
 from quantum.agent import rpc
 from quantum.openstack.common import context
 
 
-class AgentRPCPluginApi(unittest.TestCase):
+class AgentRPCPluginApi(testtools.TestCase):
     def _test_rpc_call(self, method):
         agent = rpc.PluginApi('fake_topic')
         ctxt = context.RequestContext('fake_user', 'fake_project')
@@ -48,7 +47,7 @@ class AgentRPCPluginApi(unittest.TestCase):
         self._test_rpc_call('tunnel_sync')
 
 
-class AgentRPCMethods(unittest.TestCase):
+class AgentRPCMethods(testtools.TestCase):
     def test_create_consumers(self):
         dispatcher = mock.Mock()
         expected = [
index cdd5d55d4b9d6e49e81689f8061316044040be7f..a3863bc5cc4111854daf9b13f24c3f3a01f281de 100644 (file)
@@ -18,7 +18,8 @@
 # @author: Zhongyue Luo, Intel Corporation.
 #
 
-import unittest2
+import testtools
+from testtools import matchers
 from webob import exc
 
 from quantum.api import api_common as common
@@ -28,8 +29,9 @@ class FakeController(common.QuantumController):
     _resource_name = 'fake'
 
 
-class APICommonTestCase(unittest2.TestCase):
+class APICommonTestCase(testtools.TestCase):
     def setUp(self):
+        super(APICommonTestCase, self).setUp()
         self.controller = FakeController(None)
 
     def test_prepare_request_body(self):
@@ -56,7 +58,7 @@ class APICommonTestCase(unittest2.TestCase):
             }
         }
         actual = self.controller._prepare_request_body(body, params)
-        self.assertDictEqual(expect, actual)
+        self.assertThat(expect, matchers.Equals(actual))
 
     def test_prepare_request_body_none(self):
         body = None
@@ -71,7 +73,7 @@ class APICommonTestCase(unittest2.TestCase):
             }
         }
         actual = self.controller._prepare_request_body(body, params)
-        self.assertDictEqual(expect, actual)
+        self.assertThat(expect, matchers.Equals(actual))
 
     def test_prepare_request_body_keyerror(self):
         body = {'t2': {}}
index 732cfd35bcdc1d8d381557987e49d46129bd060e..e426e4d1bf6eb3c29ca8ae1943a8778666fbda1d 100644 (file)
@@ -20,7 +20,8 @@ import urlparse
 
 import mock
 from oslo.config import cfg
-import unittest2 as unittest
+import testtools
+from testtools import matchers
 import webob
 from webob import exc
 import webtest
@@ -67,7 +68,7 @@ def _get_path(resource, id=None, action=None, fmt=None):
     return path
 
 
-class ResourceIndexTestCase(unittest.TestCase):
+class ResourceIndexTestCase(testtools.TestCase):
     def test_index_json(self):
         index = webtest.TestApp(router.Index({'foo': 'bar'}))
         res = index.get('')
@@ -92,8 +93,10 @@ class ResourceIndexTestCase(unittest.TestCase):
         self.assertTrue(link['rel'] == 'self')
 
 
-class APIv2TestBase(unittest.TestCase):
+class APIv2TestBase(testtools.TestCase):
     def setUp(self):
+        super(APIv2TestBase, self).setUp()
+
         plugin = 'quantum.quantum_plugin_base_v2.QuantumPluginBaseV2'
         # Ensure 'stale' patched copies of the plugin are never returned
         QuantumManager._instance = None
@@ -111,15 +114,11 @@ class APIv2TestBase(unittest.TestCase):
         instance = self.plugin.return_value
         instance._QuantumPluginBaseV2__native_pagination_support = True
         instance._QuantumPluginBaseV2__native_sorting_support = True
+        self.addCleanup(self._plugin_patcher.stop)
+        self.addCleanup(cfg.CONF.reset)
+
         api = router.APIRouter()
         self.api = webtest.TestApp(api)
-        super(APIv2TestBase, self).setUp()
-
-    def tearDown(self):
-        self._plugin_patcher.stop()
-        self.api = None
-        self.plugin = None
-        cfg.CONF.reset()
 
 
 class _ArgMatcher(object):
@@ -138,10 +137,6 @@ def _list_cmp(l1, l2):
 
 
 class APIv2TestCase(APIv2TestBase):
-    # NOTE(jkoelker) This potentially leaks the mock object if the setUp
-    #                raises without being caught. Using unittest2
-    #                or dropping 2.6 support so we can use addCleanup
-    #                will get around this.
     def _do_field_list(self, resource, base_fields):
         attr_info = attributes.RESOURCE_ATTRIBUTE_MAP[resource]
         policy_attrs = [name for (name, info) in attr_info.items()
@@ -599,9 +594,9 @@ class JSONV2TestCase(APIv2TestBase, testlib_api.WebTestCase):
                            params=params).json
 
         self.assertEqual(len(res['networks']), 2)
-        self.assertItemsEqual([id1, id2],
-                              [res['networks'][0]['id'],
-                               res['networks'][1]['id']])
+        self.assertEqual(sorted([id1, id2]),
+                         sorted([res['networks'][0]['id'],
+                                res['networks'][1]['id']]))
 
         self.assertIn('networks_links', res)
         next_links = []
@@ -1110,8 +1105,10 @@ class JSONV2TestCase(APIv2TestBase, testlib_api.WebTestCase):
         self.assertEqual(res.status_int, 400)
 
 
-class SubresourceTest(unittest.TestCase):
+class SubresourceTest(testtools.TestCase):
     def setUp(self):
+        super(SubresourceTest, self).setUp()
+
         plugin = 'quantum.tests.unit.test_api_v2.TestSubresourcePlugin'
         QuantumManager._instance = None
         PluginAwareExtensionManager._instance = None
@@ -1127,6 +1124,8 @@ class SubresourceTest(unittest.TestCase):
 
         self._plugin_patcher = mock.patch(plugin, autospec=True)
         self.plugin = self._plugin_patcher.start()
+        self.addCleanup(self._plugin_patcher.stop)
+        self.addCleanup(cfg.CONF.reset)
 
         router.SUB_RESOURCES['dummy'] = {
             'collection_name': 'dummies',
@@ -1146,13 +1145,10 @@ class SubresourceTest(unittest.TestCase):
         self.api = webtest.TestApp(api)
 
     def tearDown(self):
-        self._plugin_patcher.stop()
-        self.api = None
-        self.plugin = None
         router.SUB_RESOURCES = {}
-        cfg.CONF.reset()
         # Restore the global RESOURCE_ATTRIBUTE_MAP
         attributes.RESOURCE_ATTRIBUTE_MAP = self.saved_attr_map
+        super(SubresourceTest, self).tearDown()
 
     def test_index_sub_resource(self):
         instance = self.plugin.return_value
@@ -1210,7 +1206,7 @@ class XMLV2TestCase(JSONV2TestCase):
     fmt = 'xml'
 
 
-class V2Views(unittest.TestCase):
+class V2Views(testtools.TestCase):
     def _view(self, keys, collection, resource):
         data = dict((key, 'value') for key in keys)
         data['fake'] = 'value'
@@ -1332,12 +1328,9 @@ class QuotaTest(APIv2TestBase):
         self.assertEqual(res.status_int, exc.HTTPCreated.code)
 
 
-class ExtensionTestCase(unittest.TestCase):
-    # NOTE(jkoelker) This potentially leaks the mock object if the setUp
-    #                raises without being caught. Using unittest2
-    #                or dropping 2.6 support so we can use addCleanup
-    #                will get around this.
+class ExtensionTestCase(testtools.TestCase):
     def setUp(self):
+        super(ExtensionTestCase, self).setUp()
         plugin = 'quantum.quantum_plugin_base_v2.QuantumPluginBaseV2'
 
         # Ensure 'stale' patched copies of the plugin are never returned
@@ -1369,6 +1362,7 @@ class ExtensionTestCase(unittest.TestCase):
         self.api = webtest.TestApp(api)
 
     def tearDown(self):
+        super(ExtensionTestCase, self).tearDown()
         self._plugin_patcher.stop()
         self.api = None
         self.plugin = None
@@ -1424,13 +1418,13 @@ class TestSubresourcePlugin():
             return
 
 
-class ListArgsTestCase(unittest.TestCase):
+class ListArgsTestCase(testtools.TestCase):
     def test_list_args(self):
         path = '/?fields=4&foo=3&fields=2&bar=1'
         request = webob.Request.blank(path)
         expect_val = ['2', '4']
         actual_val = api_common.list_args(request, 'fields')
-        self.assertItemsEqual(actual_val, expect_val)
+        self.assertEqual(sorted(actual_val), expect_val)
 
     def test_list_args_with_empty(self):
         path = '/?foo=4&bar=3&baz=2&qux=1'
@@ -1438,7 +1432,7 @@ class ListArgsTestCase(unittest.TestCase):
         self.assertEqual([], api_common.list_args(request, 'fields'))
 
 
-class FiltersTestCase(unittest.TestCase):
+class FiltersTestCase(testtools.TestCase):
     def test_all_skip_args(self):
         path = '/?fields=4&fields=3&fields=2&fields=1'
         request = webob.Request.blank(path)
@@ -1486,7 +1480,7 @@ class FiltersTestCase(unittest.TestCase):
         self.assertEqual(actual_val, expect_val)
 
 
-class CreateResourceTestCase(unittest.TestCase):
+class CreateResourceTestCase(testtools.TestCase):
     def test_resource_creation(self):
         resource = base.create_resource('fakes', 'fake', None, {})
         self.assertIsInstance(resource, webob.dec.wsgify)
index 30e5ab4b9eb7bd8f9aeba35ad2615e373dcb6101..e89b577eeffa4aa38dbdebeade9873f8e06920bf 100644 (file)
@@ -18,9 +18,8 @@
 # @author: Zhongyue Luo, Intel Corporation.
 #
 
-import unittest2 as unittest
-
 import mock
+import testtools
 from webob import exc
 import webtest
 
@@ -30,8 +29,9 @@ from quantum import context
 from quantum import wsgi
 
 
-class RequestTestCase(unittest.TestCase):
+class RequestTestCase(testtools.TestCase):
     def setUp(self):
+        super(RequestTestCase, self).setUp()
         self.req = wsgi_resource.Request({'foo': 'bar'})
 
     def test_content_type_missing(self):
@@ -99,7 +99,7 @@ class RequestTestCase(unittest.TestCase):
         self.assertTrue(self.req.context.is_admin)
 
 
-class ResourceTestCase(unittest.TestCase):
+class ResourceTestCase(testtools.TestCase):
     def test_unmapped_quantum_error(self):
         controller = mock.MagicMock()
         controller.test.side_effect = q_exc.QuantumException()
index 23fb934dbfe692682250d8f8aef207b26119a42f..dc7e61015c47d6e91e38bb1ddabcdff969035286 100644 (file)
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import unittest2
+import testtools
 
 from quantum.api.v2 import attributes
 from quantum.common import exceptions as q_exc
 
 
-class TestAttributes(unittest2.TestCase):
+class TestAttributes(testtools.TestCase):
 
     def _construct_dict_and_constraints(self):
         """ Constructs a test dictionary and a definition of constraints.
@@ -487,7 +487,7 @@ class TestAttributes(unittest2.TestCase):
 
         del dictionary['key1']
         msg = attributes._validate_dict(dictionary, constraints)
-        self.assertIn('Expected keys:', msg, 'The error was not detected.')
+        self.assertIn('Expected keys:', msg)
 
     def test_validate_dict_wrong_values(self):
         dictionary, constraints = self._construct_dict_and_constraints()
@@ -502,7 +502,7 @@ class TestAttributes(unittest2.TestCase):
         del dictionary['key3']['k4']
         dictionary['key3']['k5'] = 'a string value'
         msg = attributes._validate_dict(dictionary, constraints)
-        self.assertIn('Expected keys:', msg, 'The error was not detected.')
+        self.assertIn('Expected keys:', msg)
 
     def test_validate_dict_or_none(self):
         dictionary, constraints = self._construct_dict_and_constraints()
@@ -537,7 +537,7 @@ class TestAttributes(unittest2.TestCase):
             self.assertIsNone(msg)
 
 
-class TestConvertToBoolean(unittest2.TestCase):
+class TestConvertToBoolean(testtools.TestCase):
 
     def test_convert_to_boolean_bool(self):
         self.assertIs(attributes.convert_to_boolean(True), True)
@@ -562,7 +562,7 @@ class TestConvertToBoolean(unittest2.TestCase):
                           '7')
 
 
-class TestConvertToInt(unittest2.TestCase):
+class TestConvertToInt(testtools.TestCase):
 
     def test_convert_to_int_int(self):
         self.assertEqual(attributes.convert_to_int(-1), -1)
@@ -596,7 +596,7 @@ class TestConvertToInt(unittest2.TestCase):
                 value, attributes.convert_none_to_empty_list(value))
 
 
-class TestConvertKvp(unittest2.TestCase):
+class TestConvertKvp(testtools.TestCase):
 
     def test_convert_kvp_list_to_dict_succeeds_for_missing_values(self):
         result = attributes.convert_kvp_list_to_dict(['True'])
@@ -612,11 +612,11 @@ class TestConvertKvp(unittest2.TestCase):
         self.assertEqual({'a': ['b'], 'c': ['d']}, result)
 
     def test_convert_kvp_str_to_list_fails_for_missing_key(self):
-        with self.assertRaises(q_exc.InvalidInput):
+        with testtools.ExpectedException(q_exc.InvalidInput):
             attributes.convert_kvp_str_to_list('=a')
 
     def test_convert_kvp_str_to_list_fails_for_missing_equals(self):
-        with self.assertRaises(q_exc.InvalidInput):
+        with testtools.ExpectedException(q_exc.InvalidInput):
             attributes.convert_kvp_str_to_list('a')
 
     def test_convert_kvp_str_to_list_succeeds_for_one_equals(self):
@@ -628,7 +628,7 @@ class TestConvertKvp(unittest2.TestCase):
         self.assertEqual(['a', 'a=a'], result)
 
 
-class TestConvertToList(unittest2.TestCase):
+class TestConvertToList(testtools.TestCase):
 
     def test_convert_to_empty_list(self):
         for item in (None, [], (), {}):
index e2c55b97b6deff701ee34e76eee7ef6c662a9f15..1f0a69108df5db8d80f4da1c045862e60ef144aa 100644 (file)
@@ -1,11 +1,10 @@
-import unittest
-
+import testtools
 import webob
 
 from quantum import auth
 
 
-class QuantumKeystoneContextTestCase(unittest.TestCase):
+class QuantumKeystoneContextTestCase(testtools.TestCase):
     def setUp(self):
         super(QuantumKeystoneContextTestCase, self).setUp()
 
index 762c90e6e49d80bfef93bd55b5d8e48ea43f5bde..64ab401c548f77603dc504b920ceb2349f00c316 100644 (file)
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import unittest2 as unittest
+import testtools
 
 from quantum.common import utils
 
 
-class TestParseMappings(unittest.TestCase):
+class TestParseMappings(testtools.TestCase):
     def parse(self, mapping_list, unique_values=True):
         return utils.parse_mappings(mapping_list, unique_values)
 
     def test_parse_mappings_fails_for_missing_separator(self):
-        with self.assertRaises(ValueError):
+        with testtools.ExpectedException(ValueError):
             self.parse(['key'])
 
     def test_parse_mappings_fails_for_missing_key(self):
-        with self.assertRaises(ValueError):
+        with testtools.ExpectedException(ValueError):
             self.parse([':val'])
 
     def test_parse_mappings_fails_for_missing_value(self):
-        with self.assertRaises(ValueError):
+        with testtools.ExpectedException(ValueError):
             self.parse(['key:'])
 
     def test_parse_mappings_fails_for_extra_separator(self):
-        with self.assertRaises(ValueError):
+        with testtools.ExpectedException(ValueError):
             self.parse(['key:val:junk'])
 
     def test_parse_mappings_fails_for_duplicate_key(self):
-        with self.assertRaises(ValueError):
+        with testtools.ExpectedException(ValueError):
             self.parse(['key:val1', 'key:val2'])
 
     def test_parse_mappings_fails_for_duplicate_value(self):
-        with self.assertRaises(ValueError):
+        with testtools.ExpectedException(ValueError):
             self.parse(['key1:val', 'key2:val'])
 
     def test_parse_mappings_succeeds_for_one_mapping(self):
index 3f814a40cf738d5584452096919fa2f01e2ee344..5ae77bdec6b17dc4b4cbe2c07b86ecc32250a2f3 100644 (file)
 # limitations under the License.
 
 import os
-import unittest
+import testtools
 
 from oslo.config import cfg
 
 from quantum.common import config
 
 
-class ConfigurationTest(unittest.TestCase):
+class ConfigurationTest(testtools.TestCase):
 
     def test_defaults(self):
         self.assertEqual('0.0.0.0', cfg.CONF.bind_host)
index fad7b4d436fdc09e6e41bc19cc1ee2c9611098ee..dcdf376ed68ae36180a2326cfa97a7517fb19594 100644 (file)
 
 """Test of DB API"""
 
+import fixtures
 import mock
 from oslo.config import cfg
-import unittest2 as unittest
+import testtools
 
 import quantum.db.api as db
 
 
-class DBTestCase(unittest.TestCase):
+class DBTestCase(testtools.TestCase):
     def setUp(self):
+        super(DBTestCase, self).setUp()
         cfg.CONF.set_override('sql_max_retries', 1, 'DATABASE')
         cfg.CONF.set_override('reconnect_interval', 0, 'DATABASE')
-
-    def tearDown(self):
-        db._ENGINE = None
-        cfg.CONF.reset()
+        self.addCleanup(cfg.CONF.reset)
+        self.useFixture(fixtures.MonkeyPatch('quantum.db.api._ENGINE', None))
 
     def test_db_reconnect(self):
         with mock.patch.object(db, 'register_models') as mock_register:
index 1667631c288cc86d0fa2ddb99e87e17c8ce71c83..c9573e064420f81b71a94dc597dc1ddab4f9a9fd 100644 (file)
 import sys
 
 import mock
-import unittest2 as unittest
+import testtools
 
 from quantum.db import migration
 from quantum.db.migration import cli
 
 
-class TestDbMigration(unittest.TestCase):
+class TestDbMigration(testtools.TestCase):
     def test_should_run_plugin_in_list(self):
         self.assertTrue(migration.should_run('foo', ['foo', 'bar']))
         self.assertFalse(migration.should_run('foo', ['bar']))
@@ -35,14 +35,13 @@ class TestDbMigration(unittest.TestCase):
         self.assertTrue(migration.should_run('foo', ['*']))
 
 
-class TestCli(unittest.TestCase):
+class TestCli(testtools.TestCase):
     def setUp(self):
+        super(TestCli, self).setUp()
         self.do_alembic_cmd_p = mock.patch.object(cli, 'do_alembic_command')
         self.do_alembic_cmd = self.do_alembic_cmd_p.start()
-
-    def tearDown(self):
-        self.do_alembic_cmd_p.stop()
-        cli.CONF.reset()
+        self.addCleanup(self.do_alembic_cmd_p.stop)
+        self.addCleanup(cli.CONF.reset)
 
     def _main_test_helper(self, argv, func_name, exp_args=(), exp_kwargs={}):
         with mock.patch.object(sys, 'argv', argv):
index b073b9a34265255495104e7604f30e99cb89834f..3ddf007ff162175c2723f9460c2bf27f47ea5784 100644 (file)
@@ -24,7 +24,8 @@ import random
 import mock
 from oslo.config import cfg
 import sqlalchemy as sa
-import unittest2
+import testtools
+from testtools import matchers
 import webob.exc
 
 import quantum
@@ -158,7 +159,6 @@ class QuantumDbPluginV2TestCase(testlib_api.WebTestCase):
             self.ext_api = test_extensions.setup_extensions_middleware(ext_mgr)
 
     def tearDown(self):
-        super(QuantumDbPluginV2TestCase, self).tearDown()
         self.api = None
         self._deserializers = None
         self._skip_native_bulk = None
@@ -173,6 +173,7 @@ class QuantumDbPluginV2TestCase(testlib_api.WebTestCase):
         cfg.CONF.reset()
         # Restore the original attribute map
         attributes.RESOURCE_ATTRIBUTE_MAP = self._attribute_map_bk
+        super(QuantumDbPluginV2TestCase, self).tearDown()
 
     def _req(self, method, resource, data=None, fmt=None, id=None, params=None,
              action=None, subresource=None, sub_id=None):
@@ -514,8 +515,8 @@ class QuantumDbPluginV2TestCase(testlib_api.WebTestCase):
                          quantum_context=quantum_context,
                          query_params=query_params)
         resource = resource.replace('-', '_')
-        self.assertItemsEqual([i['id'] for i in res['%ss' % resource]],
-                              [i[resource]['id'] for i in items])
+        self.assertEqual(sorted([i['id'] for i in res['%ss' % resource]]),
+                         sorted([i[resource]['id'] for i in items]))
 
     @contextlib.contextmanager
     def network(self, name='net1',
@@ -587,8 +588,8 @@ class QuantumDbPluginV2TestCase(testlib_api.WebTestCase):
         res = self.deserialize(self.fmt, req.get_response(api))
         collection = collection.replace('-', '_')
         expected_res = [item[collection]['id'] for item in items]
-        self.assertListEqual([n['id'] for n in res["%ss" % collection]],
-                             expected_res)
+        self.assertEqual(sorted([n['id'] for n in res["%ss" % collection]]),
+                         sorted(expected_res))
 
     def _test_list_with_pagination(self, collection, items, sort,
                                    limit, expected_page_num, query_params='',
@@ -604,7 +605,8 @@ class QuantumDbPluginV2TestCase(testlib_api.WebTestCase):
         while req:
             page_num = page_num + 1
             res = self.deserialize(self.fmt, req.get_response(api))
-            self.assertLessEqual(len(res["%ss" % collection]), limit)
+            self.assertThat(len(res["%ss" % collection]),
+                            matchers.LessThan(limit + 1))
             items_res = items_res + res["%ss" % collection]
             req = None
             if '%ss_links' % collection in res:
@@ -616,8 +618,9 @@ class QuantumDbPluginV2TestCase(testlib_api.WebTestCase):
                         self.assertEqual(len(res["%ss" % collection]),
                                          limit)
         self.assertEqual(page_num, expected_page_num)
-        self.assertListEqual([n[verify_key] for n in items_res],
-                             [item[collection][verify_key] for item in items])
+        self.assertEqual(sorted([n[verify_key] for n in items_res]),
+                         sorted([item[collection][verify_key]
+                                for item in items]))
 
     def _test_list_with_pagination_reverse(self, collection, items, sort,
                                            limit, expected_page_num,
@@ -637,7 +640,8 @@ class QuantumDbPluginV2TestCase(testlib_api.WebTestCase):
         while req:
             page_num = page_num + 1
             res = self.deserialize(self.fmt, req.get_response(api))
-            self.assertLessEqual(len(res["%ss" % collection]), limit)
+            self.assertThat(len(res["%ss" % collection]),
+                            matchers.LessThan(limit + 1))
             res["%ss" % collection].reverse()
             item_res = item_res + res["%ss" % collection]
             req = None
@@ -652,8 +656,8 @@ class QuantumDbPluginV2TestCase(testlib_api.WebTestCase):
         self.assertEqual(page_num, expected_page_num)
         expected_res = [item[collection]['id'] for item in items]
         expected_res.reverse()
-        self.assertListEqual([n['id'] for n in item_res],
-                             expected_res)
+        self.assertEqual(sorted([n['id'] for n in item_res]),
+                         sorted(expected_res))
 
 
 class TestBasicGet(QuantumDbPluginV2TestCase):
@@ -1644,9 +1648,9 @@ fixed_ips=ip_address%%3D%s&fixed_ips=ip_address%%3D%s&fixed_ips=subnet_id%%3D%s
 
                 ip_allocation = q.one()
 
-                self.assertGreater(
+                self.assertThat(
                     ip_allocation.expiration - timeutils.utcnow(),
-                    datetime.timedelta(seconds=10))
+                    matchers.GreaterThan(datetime.timedelta(seconds=10)))
 
     def test_port_delete_holds_ip(self):
         plugin = QuantumManager.get_plugin()
@@ -1765,13 +1769,14 @@ class TestNetworksV2(QuantumDbPluginV2TestCase):
         name = 'public_net'
         keys = [('subnets', []), ('name', name), ('admin_state_up', True),
                 ('status', 'ACTIVE'), ('shared', True)]
-        with self.assertRaises(webob.exc.HTTPClientError) as ctx_manager:
+        with testtools.ExpectedException(
+                webob.exc.HTTPClientError) as ctx_manager:
             with self.network(name=name,
                               shared=True,
                               tenant_id="another_tenant",
                               set_context=True):
                 pass
-        self.assertEqual(ctx_manager.exception.code, 403)
+            self.assertEqual(ctx_manager.exception.code, 403)
 
     def test_update_network(self):
         with self.network() as network:
@@ -2288,13 +2293,13 @@ class TestSubnetsV2(QuantumDbPluginV2TestCase):
             with self.subnet(network=network,
                              gateway_ip=gateway_ip_1,
                              cidr=cidr_1):
-                with self.assertRaises(
+                with testtools.ExpectedException(
                         webob.exc.HTTPClientError) as ctx_manager:
                     with self.subnet(network=network,
                                      gateway_ip=gateway_ip_2,
                                      cidr=cidr_2):
                         pass
-                self.assertEqual(ctx_manager.exception.code, 400)
+                    self.assertEqual(ctx_manager.exception.code, 400)
 
     def test_create_subnet_bad_V4_cidr(self):
         with self.network() as network:
@@ -2331,8 +2336,8 @@ class TestSubnetsV2(QuantumDbPluginV2TestCase):
         cidr_1 = '10.0.0.0/23'
         cidr_2 = '10.0.0.0/24'
         cfg.CONF.set_override('allow_overlapping_ips', False)
-        with self.assertRaises(
-            webob.exc.HTTPClientError) as ctx_manager:
+        with testtools.ExpectedException(
+                webob.exc.HTTPClientError) as ctx_manager:
             with contextlib.nested(self.subnet(cidr=cidr_1),
                                    self.subnet(cidr=cidr_2)):
                 pass
@@ -2744,21 +2749,23 @@ class TestSubnetsV2(QuantumDbPluginV2TestCase):
         cidr = '10.0.0.0/24'
         allocation_pools = [{'start': '10.0.0.1',
                              'end': '10.0.0.5'}]
-        with self.assertRaises(webob.exc.HTTPClientError) as ctx_manager:
+        with testtools.ExpectedException(
+                webob.exc.HTTPClientError) as ctx_manager:
             self._test_create_subnet(cidr=cidr,
                                      allocation_pools=allocation_pools)
-        self.assertEqual(ctx_manager.exception.code, 409)
+            self.assertEqual(ctx_manager.exception.code, 409)
 
     def test_create_subnet_gateway_in_allocation_pool_returns_409(self):
         gateway_ip = '10.0.0.50'
         cidr = '10.0.0.0/24'
         allocation_pools = [{'start': '10.0.0.1',
                              'end': '10.0.0.100'}]
-        with self.assertRaises(webob.exc.HTTPClientError) as ctx_manager:
+        with testtools.ExpectedException(
+                webob.exc.HTTPClientError) as ctx_manager:
             self._test_create_subnet(gateway_ip=gateway_ip,
                                      cidr=cidr,
                                      allocation_pools=allocation_pools)
-        self.assertEqual(ctx_manager.exception.code, 409)
+            self.assertEqual(ctx_manager.exception.code, 409)
 
     def test_create_subnet_overlapping_allocation_pools_returns_409(self):
         gateway_ip = '10.0.0.1'
@@ -2767,40 +2774,44 @@ class TestSubnetsV2(QuantumDbPluginV2TestCase):
                              'end': '10.0.0.150'},
                             {'start': '10.0.0.140',
                              'end': '10.0.0.180'}]
-        with self.assertRaises(webob.exc.HTTPClientError) as ctx_manager:
+        with testtools.ExpectedException(
+                webob.exc.HTTPClientError) as ctx_manager:
             self._test_create_subnet(gateway_ip=gateway_ip,
                                      cidr=cidr,
                                      allocation_pools=allocation_pools)
-        self.assertEqual(ctx_manager.exception.code, 409)
+            self.assertEqual(ctx_manager.exception.code, 409)
 
     def test_create_subnet_invalid_allocation_pool_returns_400(self):
         gateway_ip = '10.0.0.1'
         cidr = '10.0.0.0/24'
         allocation_pools = [{'start': '10.0.0.2',
                              'end': '10.0.0.256'}]
-        with self.assertRaises(webob.exc.HTTPClientError) as ctx_manager:
+        with testtools.ExpectedException(
+                webob.exc.HTTPClientError) as ctx_manager:
             self._test_create_subnet(gateway_ip=gateway_ip,
                                      cidr=cidr,
                                      allocation_pools=allocation_pools)
-        self.assertEqual(ctx_manager.exception.code, 400)
+            self.assertEqual(ctx_manager.exception.code, 400)
 
     def test_create_subnet_out_of_range_allocation_pool_returns_400(self):
         gateway_ip = '10.0.0.1'
         cidr = '10.0.0.0/24'
         allocation_pools = [{'start': '10.0.0.2',
                              'end': '10.0.1.6'}]
-        with self.assertRaises(webob.exc.HTTPClientError) as ctx_manager:
+        with testtools.ExpectedException(
+                webob.exc.HTTPClientError) as ctx_manager:
             self._test_create_subnet(gateway_ip=gateway_ip,
                                      cidr=cidr,
                                      allocation_pools=allocation_pools)
-        self.assertEqual(ctx_manager.exception.code, 400)
+            self.assertEqual(ctx_manager.exception.code, 400)
 
     def test_create_subnet_shared_returns_400(self):
         cidr = '10.0.0.0/24'
-        with self.assertRaises(webob.exc.HTTPClientError) as ctx_manager:
+        with testtools.ExpectedException(
+                webob.exc.HTTPClientError) as ctx_manager:
             self._test_create_subnet(cidr=cidr,
                                      shared=True)
-        self.assertEqual(ctx_manager.exception.code, 400)
+            self.assertEqual(ctx_manager.exception.code, 400)
 
     def test_create_subnet_inconsistent_ipv6_cidrv4(self):
         with self.network() as network:
@@ -3367,7 +3378,7 @@ class TestSubnetsV2(QuantumDbPluginV2TestCase):
         self.assertEqual(res.status_int, 204)
 
 
-class DbModelTestCase(unittest2.TestCase):
+class DbModelTestCase(testtools.TestCase):
     """ DB model tests """
     def test_repr(self):
         """ testing the string representation of 'model' classes """
index 426f8506048336512669b13d1fe022d0a7ff671d..994e3c82b33b4e2498582da37f97c41002711e30 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-import unittest
-
 import mock
+import testtools
 
 from quantum.db import dhcp_rpc_base
 
 
-class TestDhcpRpcCallackMixin(unittest.TestCase):
+class TestDhcpRpcCallackMixin(testtools.TestCase):
 
     def setUp(self):
+        super(TestDhcpRpcCallackMixin, self).setUp()
         self.plugin_p = mock.patch('quantum.manager.QuantumManager.get_plugin')
         get_plugin = self.plugin_p.start()
         self.plugin = mock.Mock()
@@ -34,6 +34,7 @@ class TestDhcpRpcCallackMixin(unittest.TestCase):
     def tearDown(self):
         self.log_p.stop()
         self.plugin_p.stop()
+        super(TestDhcpRpcCallackMixin, self).tearDown()
 
     def test_get_active_networks(self):
         plugin_retval = [dict(id='a'), dict(id='b')]
index 0049d4e78e37743e6cd9a3be4977ea7a6ba6294e..fb76e76fffe67ddf1062406b8cd25410851c4622 100644 (file)
@@ -19,7 +19,7 @@ import socket
 
 import mock
 from oslo.config import cfg
-import unittest2 as unittest
+import testtools
 
 from quantum.agent.common import config
 from quantum.agent.linux import interface
@@ -32,8 +32,9 @@ class MyApp(object):
         self.stdout = _stdout
 
 
-class TestDebugCommands(unittest.TestCase):
+class TestDebugCommands(testtools.TestCase):
     def setUp(self):
+        super(TestDebugCommands, self).setUp()
         cfg.CONF.register_opts(interface.OPTS)
         cfg.CONF.register_opts(QuantumDebugAgent.OPTS)
         cfg.CONF(args=[], project='quantum')
index fbc6f03fcfecd7c043fc96835c64c8e24a8609c2..da7262a6eae3efcd0d8fc469d7045f6bfe593a59 100644 (file)
@@ -22,7 +22,7 @@ import uuid
 import eventlet
 import mock
 from oslo.config import cfg
-import unittest2 as unittest
+import testtools
 
 from quantum.agent.common import config
 from quantum.agent import dhcp_agent
@@ -108,8 +108,9 @@ fake_down_network = FakeModel('12345678-dddd-dddd-1234567890ab',
                               ports=[])
 
 
-class TestDhcpAgent(unittest.TestCase):
+class TestDhcpAgent(testtools.TestCase):
     def setUp(self):
+        super(TestDhcpAgent, self).setUp()
         cfg.CONF.register_opts(dhcp_agent.DeviceManager.OPTS)
         cfg.CONF.register_opts(dhcp_agent.DhcpAgent.OPTS)
         cfg.CONF.register_opts(dhcp_agent.DhcpLeaseRelay.OPTS)
@@ -124,6 +125,7 @@ class TestDhcpAgent(unittest.TestCase):
     def tearDown(self):
         self.driver_cls_p.stop()
         cfg.CONF.reset()
+        super(TestDhcpAgent, self).tearDown()
 
     def test_dhcp_agent_manager(self):
         state_rpc_str = 'quantum.agent.rpc.PluginReportStateAPI'
@@ -314,15 +316,16 @@ class TestDhcpAgent(unittest.TestCase):
             dhcp.needs_resync = True
             with mock.patch.object(dhcp, 'sync_state') as sync_state:
                 sync_state.side_effect = RuntimeError
-                with self.assertRaises(RuntimeError):
+                with testtools.ExpectedException(RuntimeError):
                     dhcp._periodic_resync_helper()
                 sync_state.assert_called_once_with()
                 sleep.assert_called_once_with(dhcp.conf.resync_interval)
                 self.assertFalse(dhcp.needs_resync)
 
 
-class TestDhcpAgentEventHandler(unittest.TestCase):
+class TestDhcpAgentEventHandler(testtools.TestCase):
     def setUp(self):
+        super(TestDhcpAgentEventHandler, self).setUp()
         cfg.CONF.register_opts(dhcp_agent.DeviceManager.OPTS)
         cfg.CONF.register_opts(dhcp_agent.DhcpLeaseRelay.OPTS)
         cfg.CONF.set_override('interface_driver',
@@ -354,6 +357,7 @@ class TestDhcpAgentEventHandler(unittest.TestCase):
         self.call_driver_p.stop()
         self.cache_p.stop()
         self.plugin_p.stop()
+        super(TestDhcpAgentEventHandler, self).tearDown()
 
     def test_enable_dhcp_helper(self):
         self.plugin.get_network_info.return_value = fake_network
@@ -634,8 +638,9 @@ class TestDhcpAgentEventHandler(unittest.TestCase):
         self.assertEqual(self.call_driver.call_count, 0)
 
 
-class TestDhcpPluginApiProxy(unittest.TestCase):
+class TestDhcpPluginApiProxy(testtools.TestCase):
     def setUp(self):
+        super(TestDhcpPluginApiProxy, self).setUp()
         self.proxy = dhcp_agent.DhcpPluginApi('foo', {})
         self.proxy.host = 'foo'
 
@@ -647,6 +652,7 @@ class TestDhcpPluginApiProxy(unittest.TestCase):
     def tearDown(self):
         self.make_msg_p.stop()
         self.call_p.stop()
+        super(TestDhcpPluginApiProxy, self).tearDown()
 
     def test_get_active_networks(self):
         self.proxy.get_active_networks()
@@ -701,7 +707,7 @@ class TestDhcpPluginApiProxy(unittest.TestCase):
                                               host='foo')
 
 
-class TestNetworkCache(unittest.TestCase):
+class TestNetworkCache(testtools.TestCase):
     def test_put_network(self):
         nc = dhcp_agent.NetworkCache()
         nc.put(fake_network)
@@ -809,8 +815,9 @@ class TestNetworkCache(unittest.TestCase):
         self.assertEqual(nc.get_port_by_id(fake_port1.id), fake_port1)
 
 
-class TestDeviceManager(unittest.TestCase):
+class TestDeviceManager(testtools.TestCase):
     def setUp(self):
+        super(TestDeviceManager, self).setUp()
         cfg.CONF.register_opts(dhcp_agent.DeviceManager.OPTS)
         cfg.CONF.register_opts(dhcp_agent.DhcpAgent.OPTS)
         cfg.CONF.set_override('interface_driver',
@@ -840,6 +847,7 @@ class TestDeviceManager(unittest.TestCase):
         self.device_exists_p.stop()
         self.iproute_cls_p.stop()
         cfg.CONF.reset()
+        super(TestDeviceManager, self).tearDown()
 
     def _test_setup_helper(self, device_exists, reuse_existing=False,
                            metadata_access_network=False,
@@ -886,7 +894,7 @@ class TestDeviceManager(unittest.TestCase):
         self._test_setup_helper(False)
 
     def test_setup_device_exists(self):
-        with self.assertRaises(exceptions.PreexistingDeviceFailure):
+        with testtools.ExpectedException(exceptions.PreexistingDeviceFailure):
             self._test_setup_helper(True)
 
     def test_setup_device_exists_reuse(self):
@@ -1002,14 +1010,16 @@ class TestDeviceManager(unittest.TestCase):
                 self.assertEqual(dh.get_device_id(fake_network), expected)
 
 
-class TestDhcpLeaseRelay(unittest.TestCase):
+class TestDhcpLeaseRelay(testtools.TestCase):
     def setUp(self):
+        super(TestDhcpLeaseRelay, self).setUp()
         cfg.CONF.register_opts(dhcp_agent.DhcpLeaseRelay.OPTS)
         self.unlink_p = mock.patch('os.unlink')
         self.unlink = self.unlink_p.start()
 
     def tearDown(self):
         self.unlink_p.stop()
+        super(TestDhcpLeaseRelay, self).tearDown()
 
     def test_init_relay_socket_path_no_prev_socket(self):
         with mock.patch('os.path.exists') as exists:
@@ -1036,7 +1046,7 @@ class TestDhcpLeaseRelay(unittest.TestCase):
         self.unlink.side_effect = OSError
         with mock.patch('os.path.exists') as exists:
             exists.return_value = True
-            with self.assertRaises(OSError):
+            with testtools.ExpectedException(OSError):
                 relay = dhcp_agent.DhcpLeaseRelay(None)
 
                 self.unlink.assert_called_once_with(
@@ -1125,7 +1135,7 @@ class TestDhcpLeaseRelay(unittest.TestCase):
                                  relay._handler)])
 
 
-class TestDictModel(unittest.TestCase):
+class TestDictModel(testtools.TestCase):
     def test_basic_dict(self):
         d = dict(a=1, b=2)
 
index 2a63d07d98f10fedf2b6475d39dd18a2fc841613..d738326e40575a0deff58e55a2d4a28f5e367ec7 100644 (file)
@@ -20,7 +20,7 @@ Unit tests for extension extended attribute
 """
 
 from oslo.config import cfg
-import unittest2 as unittest
+import testtools
 import webob.exc as webexc
 
 import quantum
@@ -66,8 +66,9 @@ class ExtensionExtendedAttributeTestPlugin(
         return self.objh[id]
 
 
-class ExtensionExtendedAttributeTestCase(unittest.TestCase):
+class ExtensionExtendedAttributeTestCase(testtools.TestCase):
     def setUp(self):
+        super(ExtensionExtendedAttributeTestCase, self).setUp()
         plugin = (
             "quantum.tests.unit.test_extension_extended_attribute."
             "ExtensionExtendedAttributeTestPlugin"
@@ -92,11 +93,7 @@ class ExtensionExtendedAttributeTestCase(unittest.TestCase):
         self._api = extensions.ExtensionMiddleware(app, ext_mgr=ext_mgr)
 
         self._tenant_id = "8c70909f-b081-452d-872b-df48e6c355d1"
-
-    def tearDown(self):
-        # restore original resource attribute map before
-        self._api = None
-        cfg.CONF.reset()
+        self.addCleanup(cfg.CONF.reset)
 
     def _do_request(self, method, path, data=None, params=None, action=None):
         content_type = 'application/json'
index 73eb5d800c22779c0835ebcc0a792331d44765af..d83e1e2fda80b72d25ecfb32bed7944e56b3625a 100644 (file)
@@ -157,8 +157,8 @@ class ExtraRouteDBTestCase(test_l3.L3NatDBTestCase):
                                         {'router': {'routes': routes}})
 
                     body = self._show('routers', r['router']['id'])
-                    self.assertItemsEqual(body['router']['routes'],
-                                          routes)
+                    self.assertEqual(sorted(body['router']['routes']),
+                                     sorted(routes))
 
                     # clean-up
                     self._update('routers', r['router']['id'],
@@ -189,8 +189,8 @@ class ExtraRouteDBTestCase(test_l3.L3NatDBTestCase):
                                                     routes_orig}})
 
                     body = self._show('routers', r['router']['id'])
-                    self.assertItemsEqual(body['router']['routes'],
-                                          routes_orig)
+                    self.assertEqual(sorted(body['router']['routes']),
+                                     sorted(routes_orig))
 
                     routes_left = [{'destination': '135.207.0.0/16',
                                     'nexthop': '10.0.1.3'},
@@ -202,8 +202,8 @@ class ExtraRouteDBTestCase(test_l3.L3NatDBTestCase):
                                                     routes_left}})
 
                     body = self._show('routers', r['router']['id'])
-                    self.assertItemsEqual(body['router']['routes'],
-                                          routes_left)
+                    self.assertEqual(sorted(body['router']['routes']),
+                                     sorted(routes_left))
 
                     body = self._update('routers', r['router']['id'],
                                         {'router': {'routes': []}})
index c5d50e9d38d70cd321df37cb698bc4251a84ab10..9861da3e94739defb0f38a2410eb20a4d994fa31 100644 (file)
@@ -16,9 +16,9 @@
 #    under the License.
 
 import os
-import unittest
 
 import routes
+import testtools
 import webob
 import webtest
 
@@ -65,7 +65,7 @@ class FakePluginWithExtension(db_base_plugin_v2.QuantumDbPluginV2):
         self._log("method_to_support_foxnsox_extension", context)
 
 
-class ResourceExtensionTest(unittest.TestCase):
+class ResourceExtensionTest(testtools.TestCase):
 
     class ResourceExtensionController(wsgi.Controller):
 
@@ -308,7 +308,7 @@ class ResourceExtensionTest(unittest.TestCase):
         self.assertEqual(404, response.status_int)
 
 
-class ActionExtensionTest(unittest.TestCase):
+class ActionExtensionTest(testtools.TestCase):
 
     def setUp(self):
         super(ActionExtensionTest, self).setUp()
@@ -355,7 +355,7 @@ class ActionExtensionTest(unittest.TestCase):
         self.assertEqual(404, response.status_int)
 
 
-class RequestExtensionTest(unittest.TestCase):
+class RequestExtensionTest(testtools.TestCase):
 
     def test_headers_can_be_extended(self):
         def extend_headers(req, res):
@@ -422,7 +422,7 @@ class RequestExtensionTest(unittest.TestCase):
         return _setup_extensions_test_app(manager)
 
 
-class ExtensionManagerTest(unittest.TestCase):
+class ExtensionManagerTest(testtools.TestCase):
 
     def test_invalid_extensions_are_not_registered(self):
 
@@ -442,7 +442,7 @@ class ExtensionManagerTest(unittest.TestCase):
         self.assertFalse('invalid_extension' in ext_mgr.extensions)
 
 
-class PluginAwareExtensionManagerTest(unittest.TestCase):
+class PluginAwareExtensionManagerTest(testtools.TestCase):
 
     def test_unsupported_extensions_are_not_loaded(self):
         stub_plugin = ext_stubs.StubPlugin(supported_extensions=["e1", "e3"])
index e870a2420f43d2cea1daaf86927ecd33736c71ae..73ad85e3d4d6c064ca9635758bd1b6ff0af0e49c 100644 (file)
@@ -17,7 +17,7 @@
 
 import mock
 from mock import call
-import unittest2 as unittest
+import testtools
 
 from quantum.agent.linux.iptables_firewall import IptablesFirewallDriver
 from quantum.tests.unit import test_api_v2
@@ -29,14 +29,17 @@ FAKE_IP = {'IPv4': '10.0.0.1',
            'IPv6': 'fe80::1'}
 
 
-class IptablesFirewallTestCase(unittest.TestCase):
+class IptablesFirewallTestCase(testtools.TestCase):
     def setUp(self):
+        super(IptablesFirewallTestCase, self).setUp()
         self.utils_exec_p = mock.patch(
             'quantum.agent.linux.utils.execute')
         self.utils_exec = self.utils_exec_p.start()
+        self.addCleanup(self.utils_exec_p.stop)
         self.iptables_cls_p = mock.patch(
             'quantum.agent.linux.iptables_manager.IptablesManager')
         iptables_cls = self.iptables_cls_p.start()
+        self.addCleanup(self.iptables_cls_p.stop)
         self.iptables_inst = mock.Mock()
         self.v4filter_inst = mock.Mock()
         self.v6filter_inst = mock.Mock()
@@ -47,10 +50,6 @@ class IptablesFirewallTestCase(unittest.TestCase):
         self.firewall = IptablesFirewallDriver()
         self.firewall.iptables = self.iptables_inst
 
-    def tearDown(self):
-        self.iptables_cls_p.stop()
-        self.utils_exec_p.stop()
-
     def _fake_port(self):
         return {'device': 'tapfake_dev',
                 'mac_address': 'ff:ff:ff:ff',
index 95c695d465e8058693b3f18c845b81a120ab9e54..cc72cd05cb1c46eaa33f97c87ac79a10ec1c864b 100644 (file)
 
 import inspect
 import os
-import unittest
 
 import mox
+import testtools
 
 from quantum.agent.linux import iptables_manager
 
 
-class IptablesManagerStateFulTestCase(unittest.TestCase):
+class IptablesManagerStateFulTestCase(testtools.TestCase):
 
     def setUp(self):
+        super(IptablesManagerStateFulTestCase, self).setUp()
         self.mox = mox.Mox()
         self.root_helper = 'sudo'
         self.iptables = (iptables_manager.
                          IptablesManager(root_helper=self.root_helper))
         self.mox.StubOutWithMock(self.iptables, "execute")
-
-    def tearDown(self):
-        self.mox.UnsetStubs()
+        self.addCleanup(self.mox.UnsetStubs)
 
     def test_binary_name(self):
         self.assertEqual(iptables_manager.binary_name,
@@ -285,9 +284,10 @@ class IptablesManagerStateFulTestCase(unittest.TestCase):
         self.mox.VerifyAll()
 
 
-class IptablesManagerStateLessTestCase(unittest.TestCase):
+class IptablesManagerStateLessTestCase(testtools.TestCase):
 
     def setUp(self):
+        super(IptablesManagerStateLessTestCase, self).setUp()
         self.iptables = (iptables_manager.IptablesManager(state_less=True))
 
     def test_nat_not_found(self):
index 2bb024cc892d989198745fd884585f6080169b17..38bd901a0a259d278284149de0e4c661a4e70f06 100644 (file)
 #    under the License.
 
 import copy
-import unittest2
 
 import mock
 from oslo.config import cfg
+import testtools
 
 from quantum.agent.common import config as agent_config
 from quantum.agent import l3_agent
@@ -33,9 +33,10 @@ _uuid = uuidutils.generate_uuid
 HOSTNAME = 'myhost'
 
 
-class TestBasicRouterOperations(unittest2.TestCase):
+class TestBasicRouterOperations(testtools.TestCase):
 
     def setUp(self):
+        super(TestBasicRouterOperations, self).setUp()
         self.conf = cfg.ConfigOpts()
         self.conf.register_opts(base_config.core_opts)
         self.conf.register_opts(l3_agent.L3NATAgent.OPTS)
@@ -82,6 +83,7 @@ class TestBasicRouterOperations(unittest2.TestCase):
         self.dvr_cls_p.stop()
         self.utils_exec_p.stop()
         self.external_process_p.stop()
+        super(TestBasicRouterOperations, self).tearDown()
 
     def testRouterInfoCreate(self):
         id = _uuid()
index 48c97f4cbc542de9afebcdf888419dfb4d2cc77e..c4920f15d7afd495ec262756dca00133ed8d3efc 100644 (file)
@@ -24,6 +24,7 @@ import itertools
 
 import mock
 from oslo.config import cfg
+import testtools
 from webob import exc
 import webtest
 
@@ -72,6 +73,7 @@ class L3NatExtensionTestCase(testlib_api.WebTestCase):
     fmt = 'json'
 
     def setUp(self):
+        super(L3NatExtensionTestCase, self).setUp()
 
         plugin = 'quantum.extensions.l3.RouterPluginBase'
         # Ensure 'stale' patched copies of the plugin are never returned
@@ -115,6 +117,7 @@ class L3NatExtensionTestCase(testlib_api.WebTestCase):
 
         # Restore the global RESOURCE_ATTRIBUTE_MAP
         attributes.RESOURCE_ATTRIBUTE_MAP = self.saved_attr_map
+        super(L3NatExtensionTestCase, self).tearDown()
 
     def test_router_create(self):
         router_id = _uuid()
@@ -1427,7 +1430,8 @@ class L3NatDBTestCase(L3NatTestCaseBase):
     def test_create_port_external_network_non_admin_fails(self):
         with self.network(router__external=True) as ext_net:
             with self.subnet(network=ext_net) as ext_subnet:
-                with self.assertRaises(exc.HTTPClientError) as ctx_manager:
+                with testtools.ExpectedException(
+                        exc.HTTPClientError) as ctx_manager:
                     with self.port(subnet=ext_subnet,
                                    set_context='True',
                                    tenant_id='noadmin'):
@@ -1442,7 +1446,7 @@ class L3NatDBTestCase(L3NatTestCaseBase):
                                          ext_net['network']['id'])
 
     def test_create_external_network_non_admin_fails(self):
-        with self.assertRaises(exc.HTTPClientError) as ctx_manager:
+        with testtools.ExpectedException(exc.HTTPClientError) as ctx_manager:
             with self.network(router__external=True,
                               set_context='True',
                               tenant_id='noadmin'):
index 0cc6fff5444d9471cc2327e0350bb39a7d134c3d..46afea1f7de1067e5f31a722316dcacc69f2ffb8 100644 (file)
 import os
 
 import mock
-import unittest2 as unittest
+import testtools
 
 from quantum.agent.linux import daemon
 
 FAKE_FD = 8
 
 
-class TestPidfile(unittest.TestCase):
+class TestPidfile(testtools.TestCase):
     def setUp(self):
+        super(TestPidfile, self).setUp()
         self.os_p = mock.patch.object(daemon, 'os')
         self.os = self.os_p.start()
+        self.addCleanup(self.os_p.stop)
         self.os.open.return_value = FAKE_FD
 
         self.fcntl_p = mock.patch.object(daemon, 'fcntl')
         self.fcntl = self.fcntl_p.start()
+        self.addCleanup(self.fcntl_p.stop)
         self.fcntl.flock.return_value = 0
 
-    def tearDown(self):
-        self.fcntl_p.stop()
-        self.os_p.stop()
-
     def test_init(self):
         self.os.O_CREAT = os.O_CREAT
         self.os.O_RDWR = os.O_RDWR
@@ -52,7 +51,7 @@ class TestPidfile(unittest.TestCase):
         self.os.open.side_effect = IOError
 
         with mock.patch.object(daemon.sys, 'stderr') as stderr:
-            with self.assertRaises(SystemExit):
+            with testtools.ExpectedException(SystemExit):
                 p = daemon.Pidfile('thefile', 'python')
                 sys.assert_has_calls([
                     mock.call.stderr.write(mock.ANY),
@@ -95,8 +94,9 @@ class TestPidfile(unittest.TestCase):
                 ['cat', '/proc/34/cmdline'], 'sudo')
 
 
-class TestDaemon(unittest.TestCase):
+class TestDaemon(testtools.TestCase):
     def setUp(self):
+        super(TestDaemon, self).setUp()
         self.os_p = mock.patch.object(daemon, 'os')
         self.os = self.os_p.start()
 
@@ -106,6 +106,7 @@ class TestDaemon(unittest.TestCase):
     def tearDown(self):
         self.pidfile_p.stop()
         self.os_p.stop()
+        super(TestDaemon, self).tearDown()
 
     def test_init(self):
         d = daemon.Daemon('pidfile')
@@ -113,7 +114,7 @@ class TestDaemon(unittest.TestCase):
 
     def test_fork_parent(self):
         self.os.fork.return_value = 1
-        with self.assertRaises(SystemExit):
+        with testtools.ExpectedException(SystemExit):
             d = daemon.Daemon('pidfile')
             d._fork()
 
@@ -125,7 +126,7 @@ class TestDaemon(unittest.TestCase):
     def test_fork_error(self):
         self.os.fork.side_effect = lambda: OSError(1)
         with mock.patch.object(daemon.sys, 'stderr') as stderr:
-            with self.assertRaises(SystemExit):
+            with testtools.ExpectedException(SystemExit):
                 d = daemon.Daemon('pidfile', 'stdin')
                 d._fork()
 
@@ -174,6 +175,6 @@ class TestDaemon(unittest.TestCase):
 
         with mock.patch.object(daemon.sys, 'stderr') as stderr:
             with mock.patch.object(d, 'daemonize') as daemonize:
-                with self.assertRaises(SystemExit):
+                with testtools.ExpectedException(SystemExit):
                     d.start()
                 self.assertFalse(daemonize.called)
index 00950b2db876babab0e120e9b98e01d182708533..c37139a93a437c1bb2ac8f9951e54e0b8fc0aad7 100644 (file)
 
 import os
 import socket
-import unittest2 as unittest
 
 import mock
 from oslo.config import cfg
+import testtools
 
 from quantum.agent.common import config
 from quantum.agent.linux import dhcp
@@ -134,7 +134,7 @@ class FakeV4NoGatewayNetwork:
     ports = [FakePort1()]
 
 
-class TestDhcpBase(unittest.TestCase):
+class TestDhcpBase(testtools.TestCase):
     def test_base_abc_error(self):
         self.assertRaises(TypeError, dhcp.DhcpBase, None)
 
@@ -195,8 +195,9 @@ class LocalChild(dhcp.DhcpLocalProcess):
         self.called.append('spawn')
 
 
-class TestBase(unittest.TestCase):
+class TestBase(testtools.TestCase):
     def setUp(self):
+        super(TestBase, self).setUp()
         root = os.path.dirname(os.path.dirname(__file__))
         args = ['--config-file',
                 os.path.join(root, 'etc', 'quantum.conf.test')]
@@ -213,13 +214,11 @@ class TestBase(unittest.TestCase):
 
         self.replace_p = mock.patch('quantum.agent.linux.dhcp.replace_file')
         self.execute_p = mock.patch('quantum.agent.linux.utils.execute')
+        self.addCleanup(self.execute_p.stop)
         self.safe = self.replace_p.start()
+        self.addCleanup(self.replace_p.stop)
         self.execute = self.execute_p.start()
 
-    def tearDown(self):
-        self.execute_p.stop()
-        self.replace_p.stop()
-
 
 class TestDhcpLocalProcess(TestBase):
     def test_active(self):
index 01c740acb0ad6aca88acc82a9716958c554ab116..03dab45d27f8e671f1aa5d9dc531300e10376f8f 100644 (file)
 # @author: Mark McClain, DreamHost
 
 import mock
-import unittest2 as unittest
+import testtools
 
 from quantum.agent.linux import external_process as ep
 
 
-class TestProcessManager(unittest.TestCase):
+class TestProcessManager(testtools.TestCase):
     def setUp(self):
+        super(TestProcessManager, self).setUp()
         self.execute_p = mock.patch('quantum.agent.linux.utils.execute')
         self.execute = self.execute_p.start()
+        self.addCleanup(self.execute_p.stop)
         self.conf = mock.Mock()
         self.conf.external_pids = '/var/path'
 
-    def tearDown(self):
-        self.execute_p.stop()
-
     def test_enable_no_namespace(self):
         callback = mock.Mock()
         callback.return_value = ['the', 'cmd']
index 97d03936cbbeb9eda01db6c0cc646e915aa20c09..9e3ed5262bfc2a97278e2476f8fd7c3a06589e23 100644 (file)
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import unittest
-
 import mock
 from oslo.config import cfg
+import testtools
 
 from quantum.agent.common import config
 from quantum.agent.dhcp_agent import DeviceManager
@@ -58,8 +57,9 @@ class FakePort:
     network_id = network.id
 
 
-class TestBase(unittest.TestCase):
+class TestBase(testtools.TestCase):
     def setUp(self):
+        super(TestBase, self).setUp()
         root_helper_opt = [
             cfg.StrOpt('root_helper', default='sudo'),
         ]
@@ -68,19 +68,13 @@ class TestBase(unittest.TestCase):
         config.register_root_helper(self.conf)
         self.ip_dev_p = mock.patch.object(ip_lib, 'IPDevice')
         self.ip_dev = self.ip_dev_p.start()
+        self.addCleanup(self.ip_dev_p.stop)
         self.ip_p = mock.patch.object(ip_lib, 'IPWrapper')
         self.ip = self.ip_p.start()
+        self.addCleanup(self.ip_p.stop)
         self.device_exists_p = mock.patch.object(ip_lib, 'device_exists')
         self.device_exists = self.device_exists_p.start()
-
-    def tearDown(self):
-        # sometimes a test may turn this off
-        try:
-            self.device_exists_p.stop()
-        except RuntimeError, e:
-            pass
-        self.ip_dev_p.stop()
-        self.ip_p.stop()
+        self.addCleanup(self.device_exists_p.stop)
 
 
 class TestABCDriver(TestBase):
@@ -357,6 +351,7 @@ class TestMetaInterfaceDriver(TestBase):
         self.conf.register_opts(DeviceManager.OPTS)
         self.client_cls_p = mock.patch('quantumclient.v2_0.client.Client')
         client_cls = self.client_cls_p.start()
+        self.addCleanup(self.client_cls_p.stop)
         self.client_inst = mock.Mock()
         client_cls.return_value = self.client_inst
 
@@ -378,10 +373,6 @@ class TestMetaInterfaceDriver(TestBase):
             'fake1:quantum.agent.linux.interface.OVSInterfaceDriver,'
             'fake2:quantum.agent.linux.interface.BridgeInterfaceDriver')
 
-    def tearDown(self):
-        self.client_cls_p.stop()
-        super(TestMetaInterfaceDriver, self).tearDown()
-
     def test_get_driver_by_network_id(self):
         meta_interface = interface.MetaInterfaceDriver(self.conf)
         driver = meta_interface._get_driver_by_network_id('test')
index d622e808699550e5e0d3cbc3cdcbfb4204f73f1e..f4a67dec13238ca136c796a3bc5ecff5a41c553e 100644 (file)
@@ -16,7 +16,7 @@
 #    under the License.
 
 import mock
-import unittest2 as unittest
+import testtools
 
 from quantum.agent.linux import ip_lib
 from quantum.common import exceptions
@@ -97,13 +97,12 @@ SUBNET_SAMPLE2 = ("10.0.0.0/24 dev tap1d7888a7-10  scope link  src 10.0.0.2\n"
                   "10.0.0.0/24 dev qr-23380d11-d2  scope link  src 10.0.0.1")
 
 
-class TestSubProcessBase(unittest.TestCase):
+class TestSubProcessBase(testtools.TestCase):
     def setUp(self):
+        super(TestSubProcessBase, self).setUp()
         self.execute_p = mock.patch('quantum.agent.linux.utils.execute')
         self.execute = self.execute_p.start()
-
-    def tearDown(self):
-        self.execute_p.stop()
+        self.addCleanup(self.execute_p.stop)
 
     def test_execute_wrapper(self):
         ip_lib.SubProcessBase._execute('o', 'link', ('list',), 'sudo')
@@ -150,13 +149,12 @@ class TestSubProcessBase(unittest.TestCase):
                           [], 'link', ('list',))
 
 
-class TestIpWrapper(unittest.TestCase):
+class TestIpWrapper(testtools.TestCase):
     def setUp(self):
+        super(TestIpWrapper, self).setUp()
         self.execute_p = mock.patch.object(ip_lib.IPWrapper, '_execute')
         self.execute = self.execute_p.start()
-
-    def tearDown(self):
-        self.execute_p.stop()
+        self.addCleanup(self.execute_p.stop)
 
     def test_get_devices(self):
         self.execute.return_value = '\n'.join(LINK_SAMPLE)
@@ -307,7 +305,7 @@ class TestIpWrapper(unittest.TestCase):
         self.assertEqual(dev.mock_calls, [])
 
 
-class TestIPDevice(unittest.TestCase):
+class TestIPDevice(testtools.TestCase):
     def test_eq_same_name(self):
         dev1 = ip_lib.IPDevice('tap0')
         dev2 = ip_lib.IPDevice('tap0')
@@ -336,8 +334,9 @@ class TestIPDevice(unittest.TestCase):
         self.assertEqual(str(ip_lib.IPDevice('tap0')), 'tap0')
 
 
-class TestIPCommandBase(unittest.TestCase):
+class TestIPCommandBase(testtools.TestCase):
     def setUp(self):
+        super(TestIPCommandBase, self).setUp()
         self.ip = mock.Mock()
         self.ip.root_helper = 'sudo'
         self.ip.namespace = 'namespace'
@@ -363,8 +362,9 @@ class TestIPCommandBase(unittest.TestCase):
             [mock.call._as_root('o', 'foo', ('link', ), False)])
 
 
-class TestIPDeviceCommandBase(unittest.TestCase):
+class TestIPDeviceCommandBase(testtools.TestCase):
     def setUp(self):
+        super(TestIPDeviceCommandBase, self).setUp()
         self.ip_dev = mock.Mock()
         self.ip_dev.name = 'eth0'
         self.ip_dev.root_helper = 'sudo'
@@ -376,8 +376,9 @@ class TestIPDeviceCommandBase(unittest.TestCase):
         self.assertEqual(self.ip_cmd.name, 'eth0')
 
 
-class TestIPCmdBase(unittest.TestCase):
+class TestIPCmdBase(testtools.TestCase):
     def setUp(self):
+        super(TestIPCmdBase, self).setUp()
         self.parent = mock.Mock()
         self.parent.name = 'eth0'
         self.parent.root_helper = 'sudo'
@@ -653,7 +654,7 @@ class TestIpNetnsCommand(TestIPCmdBase):
                 root_helper='sudo', check_exit_code=True)
 
 
-class TestDeviceExists(unittest.TestCase):
+class TestDeviceExists(testtools.TestCase):
     def test_device_exists(self):
         with mock.patch.object(ip_lib.IPDevice, '_execute') as _execute:
             _execute.return_value = LINK_SAMPLE[1]
index e5fb94fe926d7d0f8123d6312ad90cd1a2906817..ca81fa83755abb5b492fa3830f3eb41ed6880fad 100644 (file)
@@ -18,7 +18,7 @@ import copy
 
 import mock
 from oslo.config import cfg
-import unittest2
+import testtools
 from webob import exc
 import webtest
 
@@ -54,7 +54,7 @@ class LoadBalancerExtensionTestCase(testlib_api.WebTestCase):
     fmt = 'json'
 
     def setUp(self):
-
+        super(LoadBalancerExtensionTestCase, self).setUp()
         plugin = 'quantum.extensions.loadbalancer.LoadBalancerPluginBase'
         # Ensure 'stale' patched copies of the plugin are never returned
         manager.QuantumManager._instance = None
@@ -85,6 +85,7 @@ class LoadBalancerExtensionTestCase(testlib_api.WebTestCase):
         self.api = None
         self.plugin = None
         cfg.CONF.reset()
+        super(LoadBalancerExtensionTestCase, self).tearDown()
 
     def test_vip_create(self):
         vip_id = _uuid()
index 90d0bcbd76a97b2130b3db0b39c14c82ab9e5233..e41cd3d0222c7f96a94a0efb0091c95c467484ef 100644 (file)
@@ -19,7 +19,7 @@
 import socket
 
 import mock
-import unittest2 as unittest
+import testtools
 import webob
 
 from quantum.agent.metadata import agent
@@ -37,20 +37,19 @@ class FakeConf(object):
     metadata_proxy_shared_secret = 'secret'
 
 
-class TestMetadataProxyHandler(unittest.TestCase):
+class TestMetadataProxyHandler(testtools.TestCase):
     def setUp(self):
+        super(TestMetadataProxyHandler, self).setUp()
         self.qclient_p = mock.patch('quantumclient.v2_0.client.Client')
         self.qclient = self.qclient_p.start()
+        self.addCleanup(self.qclient_p.stop)
 
         self.log_p = mock.patch.object(agent, 'LOG')
         self.log = self.log_p.start()
+        self.addCleanup(self.log_p.stop)
 
         self.handler = agent.MetadataProxyHandler(FakeConf)
 
-    def tearDown(self):
-        self.log_p.stop()
-        self.qclient_p.stop()
-
     def test_call(self):
         req = mock.Mock()
         with mock.patch.object(self.handler, '_get_instance_id') as get_id:
@@ -216,7 +215,7 @@ class TestMetadataProxyHandler(unittest.TestCase):
                               webob.exc.HTTPInternalServerError)
 
     def test_proxy_request_other_code(self):
-        with self.assertRaises(Exception) as e:
+        with testtools.ExpectedException(Exception) as e:
             self._proxy_request_test_helper(302)
 
     def test_sign_instance_id(self):
@@ -226,7 +225,7 @@ class TestMetadataProxyHandler(unittest.TestCase):
         )
 
 
-class TestUnixDomainHttpProtocol(unittest.TestCase):
+class TestUnixDomainHttpProtocol(testtools.TestCase):
     def test_init_empty_client(self):
         u = agent.UnixDomainHttpProtocol(mock.Mock(), '', mock.Mock())
         self.assertEqual(u.client_address, ('<local>', 0))
@@ -236,15 +235,14 @@ class TestUnixDomainHttpProtocol(unittest.TestCase):
         self.assertEqual(u.client_address, 'foo')
 
 
-class TestUnixDomainWSGIServer(unittest.TestCase):
+class TestUnixDomainWSGIServer(testtools.TestCase):
     def setUp(self):
+        super(TestUnixDomainWSGIServer, self).setUp()
         self.eventlet_p = mock.patch.object(agent, 'eventlet')
         self.eventlet = self.eventlet_p.start()
+        self.addCleanup(self.eventlet_p.stop)
         self.server = agent.UnixDomainWSGIServer('test')
 
-    def tearDown(self):
-        self.eventlet_p.stop()
-
     def test_start(self):
         mock_app = mock.Mock()
         with mock.patch.object(self.server, 'pool') as pool:
@@ -276,15 +274,14 @@ class TestUnixDomainWSGIServer(unittest.TestCase):
             self.assertTrue(len(logging.mock_calls))
 
 
-class TestUnixDomainMetadataProxy(unittest.TestCase):
+class TestUnixDomainMetadataProxy(testtools.TestCase):
     def setUp(self):
+        super(TestUnixDomainMetadataProxy, self).setUp()
         self.cfg_p = mock.patch.object(agent, 'cfg')
         self.cfg = self.cfg_p.start()
+        self.addCleanup(self.cfg_p.stop)
         self.cfg.CONF.metadata_proxy_socket = '/the/path'
 
-    def tearDown(self):
-        self.cfg_p.stop()
-
     def test_init_doesnot_exists(self):
         with mock.patch('os.path.isdir') as isdir:
             with mock.patch('os.makedirs') as makedirs:
@@ -325,7 +322,7 @@ class TestUnixDomainMetadataProxy(unittest.TestCase):
                     exists.return_value = True
                     unlink.side_effect = OSError
 
-                    with self.assertRaises(OSError):
+                    with testtools.ExpectedException(OSError):
                         p = agent.UnixDomainMetadataProxy(mock.Mock())
 
                     isdir.assert_called_once_with('/the')
index 09979f7ad21715bacc2cd31a036d604325f83288..e30dd306bbb0201c37633c17b516e603441b4909 100644 (file)
@@ -19,7 +19,7 @@
 import socket
 
 import mock
-import unittest2 as unittest
+import testtools
 import webob
 
 from quantum.agent.metadata import namespace_proxy as ns_proxy
@@ -37,7 +37,7 @@ class FakeConf(object):
     metadata_proxy_shared_secret = 'secret'
 
 
-class TestUnixDomainHttpConnection(unittest.TestCase):
+class TestUnixDomainHttpConnection(testtools.TestCase):
     def test_connect(self):
         with mock.patch.object(ns_proxy, 'cfg') as cfg:
             cfg.CONF.metadata_proxy_socket = '/the/path'
@@ -55,16 +55,15 @@ class TestUnixDomainHttpConnection(unittest.TestCase):
                 self.assertEqual(conn.timeout, 3)
 
 
-class TestNetworkMetadataProxyHandler(unittest.TestCase):
+class TestNetworkMetadataProxyHandler(testtools.TestCase):
     def setUp(self):
+        super(TestNetworkMetadataProxyHandler, self).setUp()
         self.log_p = mock.patch.object(ns_proxy, 'LOG')
         self.log = self.log_p.start()
+        self.addCleanup(self.log_p.stop)
 
         self.handler = ns_proxy.NetworkMetadataProxyHandler('router_id')
 
-    def tearDown(self):
-        self.log_p.stop()
-
     def test_call(self):
         req = mock.Mock(headers={})
         with mock.patch.object(self.handler, '_proxy_request') as proxy_req:
@@ -77,7 +76,7 @@ class TestNetworkMetadataProxyHandler(unittest.TestCase):
                                               req.query_string)
 
     def test_no_argument_passed_to_init(self):
-        with self.assertRaises(ValueError):
+        with testtools.ExpectedException(ValueError):
             ns_proxy.NetworkMetadataProxyHandler()
 
     def test_call_internal_server_error(self):
@@ -192,7 +191,7 @@ class TestNetworkMetadataProxyHandler(unittest.TestCase):
         with mock.patch('httplib2.Http') as mock_http:
             mock_http.return_value.request.return_value = (resp, '')
 
-            with self.assertRaises(Exception):
+            with testtools.ExpectedException(Exception):
                 self.handler._proxy_request('192.168.1.1',
                                             '/latest/meta-data',
                                             '')
@@ -215,7 +214,7 @@ class TestNetworkMetadataProxyHandler(unittest.TestCase):
         with mock.patch('httplib2.Http') as mock_http:
             mock_http.return_value.request.side_effect = Exception
 
-            with self.assertRaises(Exception):
+            with testtools.ExpectedException(Exception):
                 self.handler._proxy_request('192.168.1.1',
                                             '/latest/meta-data',
                                             '')
@@ -232,7 +231,7 @@ class TestNetworkMetadataProxyHandler(unittest.TestCase):
             )
 
 
-class TestProxyDaemon(unittest.TestCase):
+class TestProxyDaemon(testtools.TestCase):
     def test_init(self):
         with mock.patch('quantum.agent.linux.daemon.Pidfile') as pf:
             pd = ns_proxy.ProxyDaemon('pidfile', 9697, 'net_id', 'router_id')
index b11459af49860ca5bab5ac3e7ba7d6730688b79b..cc652a959c22fad3ead9b03510bd44d8cc39a897 100644 (file)
@@ -20,10 +20,10 @@ import os.path
 import shutil
 import StringIO
 import tempfile
-import unittest2 as unittest
 import urllib2
 
 import mock
+import testtools
 
 import quantum
 from quantum.common import exceptions
@@ -33,17 +33,14 @@ from quantum.openstack.common import policy as common_policy
 from quantum import policy
 
 
-class PolicyFileTestCase(unittest.TestCase):
+class PolicyFileTestCase(testtools.TestCase):
     def setUp(self):
         super(PolicyFileTestCase, self).setUp()
         policy.reset()
+        self.addCleanup(policy.reset)
         self.context = context.Context('fake', 'fake')
         self.target = {}
 
-    def tearDown(self):
-        super(PolicyFileTestCase, self).tearDown()
-        policy.reset()
-
     @contextlib.contextmanager
     def _tempdir(self, **kwargs):
         tmpdir = tempfile.mkdtemp(**kwargs)
@@ -81,10 +78,11 @@ class PolicyFileTestCase(unittest.TestCase):
                                   self.target)
 
 
-class PolicyTestCase(unittest.TestCase):
+class PolicyTestCase(testtools.TestCase):
     def setUp(self):
         super(PolicyTestCase, self).setUp()
         policy.reset()
+        self.addCleanup(policy.reset)
         # NOTE(vish): preload rules to circumvent reloading from file
         policy.init()
         rules = {
@@ -105,10 +103,6 @@ class PolicyTestCase(unittest.TestCase):
         self.context = context.Context('fake', 'fake', roles=['member'])
         self.target = {}
 
-    def tearDown(self):
-        policy.reset()
-        super(PolicyTestCase, self).tearDown()
-
     def test_enforce_nonexistent_action_throws(self):
         action = "example:noexist"
         self.assertRaises(exceptions.PolicyNotAuthorized, policy.enforce,
@@ -178,12 +172,13 @@ class PolicyTestCase(unittest.TestCase):
         policy.enforce(admin_context, uppercase_action, self.target)
 
 
-class DefaultPolicyTestCase(unittest.TestCase):
+class DefaultPolicyTestCase(testtools.TestCase):
 
     def setUp(self):
         super(DefaultPolicyTestCase, self).setUp()
         policy.reset()
         policy.init()
+        self.addCleanup(policy.reset)
 
         self.rules = {
             "default": '',
@@ -200,10 +195,6 @@ class DefaultPolicyTestCase(unittest.TestCase):
                  for k, v in self.rules.items()), default_rule)
         common_policy.set_rules(rules)
 
-    def tearDown(self):
-        super(DefaultPolicyTestCase, self).tearDown()
-        policy.reset()
-
     def test_policy_called(self):
         self.assertRaises(exceptions.PolicyNotAuthorized, policy.enforce,
                           self.context, "example:exist", {})
@@ -217,12 +208,13 @@ class DefaultPolicyTestCase(unittest.TestCase):
                           self.context, "example:noexist", {})
 
 
-class QuantumPolicyTestCase(unittest.TestCase):
+class QuantumPolicyTestCase(testtools.TestCase):
 
     def setUp(self):
         super(QuantumPolicyTestCase, self).setUp()
         policy.reset()
         policy.init()
+        self.addCleanup(policy.reset)
         self.rules = dict((k, common_policy.parse_rule(v)) for k, v in {
             "admin_or_network_owner": "role:admin or "
                                       "tenant_id:%(network_tenant_id)s",
@@ -251,15 +243,12 @@ class QuantumPolicyTestCase(unittest.TestCase):
                                          'init',
                                          new=fakepolicyinit)
         self.patcher.start()
+        self.addCleanup(self.patcher.stop)
         self.context = context.Context('fake', 'fake', roles=['user'])
         plugin_klass = importutils.import_class(
             "quantum.db.db_base_plugin_v2.QuantumDbPluginV2")
         self.plugin = plugin_klass()
 
-    def tearDown(self):
-        self.patcher.stop()
-        policy.reset()
-
     def _test_action_on_attr(self, context, action, attr, value,
                              exception=None):
         action = "%s_network" % action
index da3b7bec846a44a4d4f5ab010f8778cc799e528c..169ca3633dcfe0d85aca82ccd461c83601324fcb 100644 (file)
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import unittest2 as unittest
-
 import mock
+import testtools
 
 from quantum import context
 
 
-class TestQuantumContext(unittest.TestCase):
+class TestQuantumContext(testtools.TestCase):
 
     def setUp(self):
+        super(TestQuantumContext, self).setUp()
         db_api = 'quantum.db.api.get_session'
         self._db_api_session_patcher = mock.patch(db_api)
         self.db_api_session = self._db_api_session_patcher.start()
-
-    def tearDown(self):
-        self._db_api_session_patcher.stop()
+        self.addCleanup(self._db_api_session_patcher.stop)
 
     def testQuantumContextCreate(self):
         cxt = context.Context('user_id', 'tenant_id')
index 990e06e5ef408a03fca9504552db24c5014f4b92..0e987f3fdbbebab1bd42a9c1638cefbc9a9e4ac2 100644 (file)
@@ -17,7 +17,9 @@
 
 import os
 import types
-import unittest2
+
+import fixtures
+import testtools
 
 from oslo.config import cfg
 
@@ -39,18 +41,16 @@ def etcdir(*p):
     return os.path.join(ETCDIR, *p)
 
 
-class QuantumManagerTestCase(unittest2.TestCase):
+class QuantumManagerTestCase(testtools.TestCase):
 
     def setUp(self):
         super(QuantumManagerTestCase, self).setUp()
         args = ['--config-file', etcdir('quantum.conf.test')]
         # If test_config specifies some config-file, use it, as well
         config.parse(args=args)
-
-    def tearDown(self):
-        unittest2.TestCase.tearDown(self)
-        cfg.CONF.reset()
-        QuantumManager._instance = None
+        self.addCleanup(cfg.CONF.reset)
+        self.useFixture(
+            fixtures.MonkeyPatch('quantum.manager.QuantumManager._instance'))
 
     def test_service_plugin_is_loaded(self):
         cfg.CONF.set_override("core_plugin",
@@ -59,7 +59,6 @@ class QuantumManagerTestCase(unittest2.TestCase):
         cfg.CONF.set_override("service_plugins",
                               ["quantum.tests.unit.dummy_plugin."
                                "DummyServicePlugin"])
-        QuantumManager._instance = None
         mgr = QuantumManager.get_instance()
         plugin = mgr.get_service_plugins()[constants.DUMMY]
 
@@ -74,7 +73,6 @@ class QuantumManagerTestCase(unittest2.TestCase):
                                "QuantumDummyPlugin",
                                "quantum.tests.unit.dummy_plugin."
                                "QuantumDummyPlugin"])
-        QuantumManager._instance = None
 
         try:
             QuantumManager.get_instance().get_service_plugins()
index 321c1843261ff599b20411cc26c55e6148501c86..838a1fd930c56b0967718c353f778e4795470726 100644 (file)
@@ -1,8 +1,7 @@
-import unittest2 as unittest
-import webtest
-
 import mock
 from oslo.config import cfg
+import testtools
+import webtest
 
 from quantum.api import extensions
 from quantum.api.v2 import attributes
@@ -27,6 +26,7 @@ class QuotaExtensionTestCase(testlib_api.WebTestCase):
     fmt = 'json'
 
     def setUp(self):
+        super(QuotaExtensionTestCase, self).setUp()
         db._ENGINE = None
         db._MAKER = None
         # Ensure 'stale' patched copies of the plugin are never returned
@@ -79,6 +79,7 @@ class QuotaExtensionTestCase(testlib_api.WebTestCase):
 
         # Restore the global RESOURCE_ATTRIBUTE_MAP
         attributes.RESOURCE_ATTRIBUTE_MAP = self.saved_attr_map
+        super(QuotaExtensionTestCase, self).tearDown()
 
     def test_quotas_loaded_right(self):
         res = self.api.get(_get_path('quotas', fmt=self.fmt))
@@ -182,14 +183,14 @@ class QuotaExtensionTestCase(testlib_api.WebTestCase):
                                      fmt=self.fmt),
                            self.serialize(quotas), extra_environ=env)
         self.assertEqual(200, res.status_int)
-        with self.assertRaises(exceptions.OverQuota):
+        with testtools.ExpectedException(exceptions.OverQuota):
             quota.QUOTAS.limit_check(context.Context('', tenant_id),
                                      tenant_id,
                                      network=6)
 
     def test_quotas_limit_check_with_invalid_quota_value(self):
         tenant_id = 'tenant_id1'
-        with self.assertRaises(exceptions.InvalidQuotaValue):
+        with testtools.ExpectedException(exceptions.InvalidQuotaValue):
             quota.QUOTAS.limit_check(context.Context('', tenant_id),
                                      tenant_id,
                                      network=-1)
index d6be69c0bf86c0bb0f6faec057ff4fb844ed5378..ec667bfb148c2fbb853088c4db91fd35a1dace3e 100644 (file)
 import os
 
 import mock
-import unittest2 as unittest
+import testtools
 
 from quantum.common import utils
 from quantum.rootwrap import filters
 from quantum.rootwrap import wrapper
 
 
-class RootwrapTestCase(unittest.TestCase):
+class RootwrapTestCase(testtools.TestCase):
 
     def setUp(self):
         super(RootwrapTestCase, self).setUp()
index a764026b153195c80d7491ea451967698761b33b..a5e51623177ae5361423048132fabcef04ef58bf 100644 (file)
@@ -14,7 +14,7 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import unittest2 as unittest
+import testtools
 import webob.exc as webexc
 
 import quantum
@@ -151,8 +151,9 @@ class RouterServiceInsertionTestPlugin(
         pass
 
 
-class RouterServiceInsertionTestCase(unittest.TestCase):
+class RouterServiceInsertionTestCase(testtools.TestCase):
     def setUp(self):
+        super(RouterServiceInsertionTestCase, self).setUp()
         plugin = (
             "quantum.tests.unit.test_routerserviceinsertion."
             "RouterServiceInsertionTestPlugin"
@@ -166,6 +167,7 @@ class RouterServiceInsertionTestCase(unittest.TestCase):
         cfg.CONF.set_override('core_plugin', plugin)
         cfg.CONF.set_override('service_plugins', [plugin])
         cfg.CONF.set_override('quota_router', -1, group='QUOTAS')
+        self.addCleanup(cfg.CONF.reset)
 
         # Ensure 'stale' patched copies of the plugin are never returned
         quantum.manager.QuantumManager._instance = None
@@ -186,10 +188,6 @@ class RouterServiceInsertionTestCase(unittest.TestCase):
         res = self._do_request('GET', _get_path('service-types'))
         self._service_type_id = res['service_types'][0]['id']
 
-    def tearDown(self):
-        self._api = None
-        cfg.CONF.reset()
-
     def _do_request(self, method, path, data=None, params=None, action=None):
         content_type = 'application/json'
         body = None
@@ -245,10 +243,11 @@ class RouterServiceInsertionTestCase(unittest.TestCase):
         }
         if update_service_type_id:
             data["router"]["service_type_id"] = _uuid()
-            with self.assertRaises(webexc.HTTPClientError) as ctx_manager:
+            with testtools.ExpectedException(
+                    webexc.HTTPClientError) as ctx_manager:
                 res = self._do_request(
                     'PUT', _get_path('routers/{0}'.format(router_id)), data)
-            self.assertEqual(ctx_manager.exception.code, 400)
+                self.assertEqual(ctx_manager.exception.code, 400)
         else:
             res = self._do_request(
                 'PUT', _get_path('routers/{0}'.format(router_id)), data)
@@ -375,11 +374,12 @@ class RouterServiceInsertionTestCase(unittest.TestCase):
         data = {res: uattrs}
         if update_router_id:
             uattrs['router_id'] = self._router_id
-            with self.assertRaises(webexc.HTTPClientError) as ctx_manager:
+            with testtools.ExpectedException(
+                    webexc.HTTPClientError) as ctx_manager:
                 newobj = self._do_request(
                     'PUT',
                     _get_path('lb/{0}s/{1}'.format(res, obj['id'])), data)
-            self.assertEqual(ctx_manager.exception.code, 400)
+                self.assertEqual(ctx_manager.exception.code, 400)
         else:
             newobj = self._do_request(
                 'PUT',
index f955ca9c61fe42013d21148fdb88ca80727dab86..b118764854b3b57547e73a9a43182641db9a0df4 100644 (file)
 #    under the License.
 
 from contextlib import nested
+
 import mock
 from mock import call
-import unittest2 as unittest
-
 import mox
 from oslo.config import cfg
+import testtools
 
 from quantum.agent import firewall as firewall_base
 from quantum.agent.linux import iptables_manager
@@ -370,8 +370,9 @@ class SGServerRpcCallBackMixinTestCaseXML(SGServerRpcCallBackMixinTestCase):
     fmt = 'xml'
 
 
-class SGAgentRpcCallBackMixinTestCase(unittest.TestCase):
+class SGAgentRpcCallBackMixinTestCase(testtools.TestCase):
     def setUp(self):
+        super(SGAgentRpcCallBackMixinTestCase, self).setUp()
         self.rpc = sg_rpc.SecurityGroupAgentRpcCallbackMixin()
         self.rpc.sg_agent = mock.Mock()
 
@@ -393,8 +394,9 @@ class SGAgentRpcCallBackMixinTestCase(unittest.TestCase):
             [call.security_groups_provider_updated()])
 
 
-class SecurityGroupAgentRpcTestCase(unittest.TestCase):
+class SecurityGroupAgentRpcTestCase(testtools.TestCase):
     def setUp(self):
+        super(SecurityGroupAgentRpcTestCase, self).setUp()
         self.agent = sg_rpc.SecurityGroupAgentRpcMixin()
         self.agent.context = None
         self.addCleanup(mock.patch.stopall)
@@ -477,8 +479,9 @@ class FakeSGRpcApi(agent_rpc.PluginApi,
     pass
 
 
-class SecurityGroupServerRpcApiTestCase(unittest.TestCase):
+class SecurityGroupServerRpcApiTestCase(testtools.TestCase):
     def setUp(self):
+        super(SecurityGroupServerRpcApiTestCase, self).setUp()
         self.rpc = FakeSGRpcApi('fake_topic')
         self.rpc.call = mock.Mock()
 
@@ -499,8 +502,9 @@ class FakeSGNotifierAPI(proxy.RpcProxy,
     pass
 
 
-class SecurityGroupAgentRpcApiTestCase(unittest.TestCase):
+class SecurityGroupAgentRpcApiTestCase(testtools.TestCase):
     def setUp(self):
+        super(SecurityGroupAgentRpcApiTestCase, self).setUp()
         self.notifier = FakeSGNotifierAPI(topic='fake',
                                           default_version='1.0')
         self.notifier.fanout_cast = mock.Mock()
@@ -941,12 +945,13 @@ IPTABLES_FILTER_V6_EMPTY = """:%(bn)s-(%(chains)s) - [0:0]
 FIREWALL_BASE_PACKAGE = 'quantum.agent.linux.iptables_firewall.'
 
 
-class TestSecurityGroupAgentWithIptables(unittest.TestCase):
+class TestSecurityGroupAgentWithIptables(testtools.TestCase):
     FIREWALL_DRIVER = FIREWALL_BASE_PACKAGE + 'IptablesFirewallDriver'
     PHYSDEV_INGRESS = 'physdev-out'
     PHYSDEV_EGRESS = 'physdev-in'
 
     def setUp(self):
+        super(TestSecurityGroupAgentWithIptables, self).setUp()
         self.mox = mox.Mox()
         agent_opts = [
             cfg.StrOpt('root_helper', default='sudo'),
index 5319ffcc36645ffb10979fa4402b9f8a6415068e..127feca3640d6f080985de8640c5dce65b8587fb 100644 (file)
 
 import contextlib
 import logging
-import unittest2 as unittest
 
 import mock
 from oslo.config import cfg
+import testtools
 import webob.exc as webexc
 import webtest
 
@@ -73,6 +73,7 @@ class ServiceTypeTestCaseBase(testlib_api.WebTestCase):
         cfg.CONF.set_override('service_plugins',
                               ["%s.%s" % (dp.__name__,
                                           dp.DummyServicePlugin.__name__)])
+        self.addCleanup(cfg.CONF.reset)
         # Make sure at each test a new instance of the plugin is returned
         manager.QuantumManager._instance = None
         # Ensure existing ExtensionManager is not used
@@ -83,10 +84,6 @@ class ServiceTypeTestCaseBase(testlib_api.WebTestCase):
         self.resource_name = servicetype.RESOURCE_NAME.replace('-', '_')
         super(ServiceTypeTestCaseBase, self).setUp()
 
-    def tearDown(self):
-        self.api = None
-        cfg.CONF.reset()
-
 
 class ServiceTypeExtensionTestCase(ServiceTypeTestCaseBase):
 
@@ -95,14 +92,11 @@ class ServiceTypeExtensionTestCase(ServiceTypeTestCaseBase):
             "%s.%s" % (servicetype_db.__name__,
                        servicetype_db.ServiceTypeManager.__name__),
             autospec=True)
+        self.addCleanup(self._patcher.stop)
         self.mock_mgr = self._patcher.start()
         self.mock_mgr.get_instance.return_value = self.mock_mgr.return_value
         super(ServiceTypeExtensionTestCase, self).setUp()
 
-    def tearDown(self):
-        self._patcher.stop()
-        super(ServiceTypeExtensionTestCase, self).tearDown()
-
     def _test_service_type_create(self, env=None,
                                   expected_status=webexc.HTTPCreated.code):
         tenant_id = 'fake'
@@ -256,12 +250,9 @@ class ServiceTypeManagerTestCase(ServiceTypeTestCaseBase):
         plugin_name = "%s.%s" % (dp.__name__, dp.DummyServicePlugin.__name__)
         cfg.CONF.set_override('service_definition', ['dummy:%s' % plugin_name],
                               group='DEFAULT_SERVICETYPE')
+        self.addCleanup(db_api.clear_db)
         super(ServiceTypeManagerTestCase, self).setUp()
 
-    def tearDown(self):
-        super(ServiceTypeManagerTestCase, self).tearDown()
-        db_api.clear_db()
-
     @contextlib.contextmanager
     def service_type(self, name='svc_type',
                      default=True,
diff --git a/quantum/tests/unit/test_setup.py b/quantum/tests/unit/test_setup.py
deleted file mode 100644 (file)
index e8a50ae..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-# vim: tabstop=4 shiftwidth=4 softtabstop=4
-
-# Copyright 2011 OpenStack LLC.
-# All Rights Reserved.
-#
-#    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 os
-from tempfile import mkstemp
-import unittest
-
-from quantum.openstack.common.setup import canonicalize_emails
-from quantum.openstack.common.setup import parse_mailmap
-
-
-class SetupTest(unittest.TestCase):
-
-    def setUp(self):
-        (fd, self.mailmap) = mkstemp(prefix='openstack', suffix='.mailmap')
-
-    def test_str_dict_replace(self):
-        string = 'Johnnie T. Hozer'
-        mapping = {'T.': 'The'}
-        self.assertEqual('Johnnie The Hozer',
-                         canonicalize_emails(string, mapping))
-
-    def test_mailmap_with_fullname(self):
-        with open(self.mailmap, 'w') as mm_fh:
-            mm_fh.write("Foo Bar <email@foo.com> Foo Bar <email@bar.com>\n")
-        self.assertEqual({'<email@bar.com>': '<email@foo.com>'},
-                         parse_mailmap(self.mailmap))
-
-    def test_mailmap_with_firstname(self):
-        with open(self.mailmap, 'w') as mm_fh:
-            mm_fh.write("Foo <email@foo.com> Foo <email@bar.com>\n")
-        self.assertEqual({'<email@bar.com>': '<email@foo.com>'},
-                         parse_mailmap(self.mailmap))
-
-    def test_mailmap_with_noname(self):
-        with open(self.mailmap, 'w') as mm_fh:
-            mm_fh.write("<email@foo.com> <email@bar.com>\n")
-        self.assertEqual({'<email@bar.com>': '<email@foo.com>'},
-                         parse_mailmap(self.mailmap))
-
-    def tearDown(self):
-        if os.path.exists(self.mailmap):
-            os.remove(self.mailmap)
index 6cc80cd41015d4e4eccb650f5ae1ecfda8be883c..0c09c1cd4df2b9c791de7a0e0b289c0d78dfaffd 100644 (file)
@@ -18,7 +18,7 @@
 import socket
 
 import mock
-import unittest2 as unittest
+import testtools
 
 from quantum.api.v2 import attributes
 from quantum.common import constants
@@ -26,7 +26,7 @@ from quantum.common import exceptions as exception
 from quantum import wsgi
 
 
-class TestWSGIServer(unittest.TestCase):
+class TestWSGIServer(testtools.TestCase):
     """WSGI server tests."""
 
     def test_start_random_port(self):
@@ -82,7 +82,7 @@ class TestWSGIServer(unittest.TestCase):
                     ])
 
 
-class SerializerTest(unittest.TestCase):
+class SerializerTest(testtools.TestCase):
     def test_serialize_unknown_content_type(self):
         """
         Test serialize verifies that exception InvalidContentType is raised
@@ -108,7 +108,7 @@ class SerializerTest(unittest.TestCase):
             serializer.get_deserialize_handler, content_type)
 
 
-class RequestDeserializerTest(unittest.TestCase):
+class RequestDeserializerTest(testtools.TestCase):
     def test_get_body_deserializer_unknown_content_type(self):
         """
         Test get body deserializer verifies
@@ -121,8 +121,10 @@ class RequestDeserializerTest(unittest.TestCase):
             deserializer.get_body_deserializer, content_type)
 
 
-class ResponseSerializerTest(unittest.TestCase):
+class ResponseSerializerTest(testtools.TestCase):
     def setUp(self):
+        super(ResponseSerializerTest, self).setUp()
+
         class JSONSerializer(object):
             def serialize(self, data, action='default'):
                 return 'pew_json'
@@ -162,7 +164,7 @@ class ResponseSerializerTest(unittest.TestCase):
             self.serializer.get_body_serializer, 'application/unknown')
 
 
-class XMLDeserializerTest(unittest.TestCase):
+class XMLDeserializerTest(testtools.TestCase):
     def test_default_raise_Maiformed_Exception(self):
         """
         Test verifies that exception MalformedRequestBody is raised
@@ -174,7 +176,7 @@ class XMLDeserializerTest(unittest.TestCase):
             exception.MalformedRequestBody, deserializer.default, data_string)
 
 
-class JSONDeserializerTest(unittest.TestCase):
+class JSONDeserializerTest(testtools.TestCase):
     def test_default_raise_Maiformed_Exception(self):
         """
         Test verifies JsonDeserializer.default
@@ -187,7 +189,7 @@ class JSONDeserializerTest(unittest.TestCase):
             exception.MalformedRequestBody, deserializer.default, data_string)
 
 
-class ResourceTest(unittest.TestCase):
+class ResourceTest(testtools.TestCase):
     def test_dispatch_unknown_controller_action(self):
         class Controller(object):
             def index(self, request, pants=None):
@@ -260,7 +262,7 @@ class ResourceTest(unittest.TestCase):
         self.assertEqual(400, result.status_int)
 
 
-class XMLDictSerializerTest(unittest.TestCase):
+class XMLDictSerializerTest(testtools.TestCase):
     def test_xml(self):
         NETWORK = {'network': {'test': None,
                                'tenant_id': 'test-tenant',
index 0e27d17af894e00f0eeb308a04cae0e0c274a4df..67e428c432613729ff97356b1cab70023d613c65 100644 (file)
@@ -13,7 +13,7 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import unittest2 as unittest
+import testtools
 
 from quantum.api.v2 import attributes
 from quantum import wsgi
@@ -35,10 +35,11 @@ def create_request(path, body, content_type, method='GET',
     return req
 
 
-class WebTestCase(unittest.TestCase):
+class WebTestCase(testtools.TestCase):
     fmt = 'json'
 
     def setUp(self):
+        super(WebTestCase, self).setUp()
         json_deserializer = wsgi.JSONDeserializer()
         xml_deserializer = wsgi.XMLDeserializer(
             attributes.get_attr_metadata())
@@ -46,7 +47,6 @@ class WebTestCase(unittest.TestCase):
             'application/json': json_deserializer,
             'application/xml': xml_deserializer,
         }
-        super(WebTestCase, self).setUp()
 
     def deserialize(self, response):
         ctype = 'application/%s' % self.fmt
index 7043196035704f803b4923012d423d76af80abad..175764ad7c2b9998724d2ae801701e9560bab772 100755 (executable)
@@ -43,7 +43,6 @@ To run a single functional test module::
 
 import gettext
 import os
-import unittest
 import sys
 
 from quantum.common.test_lib import run_tests
index 565cba388c896d82ae85d342405b82511379a4e3..55e13ead0ff09875c3381df22f6479883184fdf5 100644 (file)
--- a/setup.cfg
+++ b/setup.cfg
@@ -9,7 +9,6 @@ source-dir = doc/source
 #                tissue http://pypi.python.org/pypi/tissue (pep8 checker)
 #                openstack-nose https://github.com/jkoelker/openstack-nose
 verbosity=2
-detailed-errors=1
 cover-package = quantum
 cover-html = true
 cover-erase = true
index 0f7f2acd6eb88a6087f16351a363fb3d19e42737..d86688ea4a334d299bfaae93393246c9489d08fa 100644 (file)
@@ -2,6 +2,7 @@ Babel>=0.9.6
 cliff
 coverage
 distribute>=0.6.24
+fixtures>=0.3.12
 mock>=1.0b1
 mox==0.5.3
 nose
@@ -10,7 +11,7 @@ nosexcover
 openstack.nose_plugin
 pep8
 sphinx>=1.1.2
-unittest2
+testtools>=0.9.27
 webtest==1.3.3
 # Packages for the Cisco Plugin
 ###############################