]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
test_db_base_plugin_v2: Improve DBReferenceError generation
authorYAMAMOTO Takashi <yamamoto@midokura.com>
Fri, 3 Jul 2015 14:59:46 +0000 (23:59 +0900)
committerYAMAMOTO Takashi <yamamoto@midokura.com>
Tue, 28 Jul 2015 07:58:57 +0000 (16:58 +0900)
The current coding, raising DBReferenceError directly, seems to
confuse sqlalchemy a bit.  Instead, actually causes the error by
tweaking the row being inserted.

Change-Id: I17ec6dab19b0e573675559042b7529f7bdd2671b

neutron/tests/unit/db/test_db_base_plugin_v2.py

index 1a2a9bdcade670b71c9b14f1e02cb75ccee01ef1..a87810d50cfd12ccb3b53231badbfa09b0a792f1 100644 (file)
@@ -20,7 +20,6 @@ import itertools
 import mock
 import netaddr
 from oslo_config import cfg
-from oslo_db import exception as db_exc
 from oslo_utils import importutils
 import six
 from sqlalchemy import orm
@@ -3809,16 +3808,18 @@ class TestSubnetsV2(NeutronDbPluginV2TestCase):
             self.subnet(network=network) as v4_subnet,\
             self.port(subnet=v4_subnet, device_owner=device_owner) as port:
             if insert_db_reference_error:
-                orig = orm.Session.add
+                orig_fn = orm.Session.add
 
                 def db_ref_err_for_ipalloc(s, instance):
                     if instance.__class__.__name__ == 'IPAllocation':
-                        raise db_exc.DBReferenceError(
-                            'dummy_table', 'dummy_constraint',
-                            'dummy_key', 'dummy_key_table')
-                    return orig(s, instance)
+                        # tweak port_id to cause a FK violation,
+                        # thus DBReferenceError
+                        instance.port_id = 'nonexistent'
+                    return orig_fn(s, instance)
+
                 mock.patch.object(orm.Session, 'add',
-                                  new=db_ref_err_for_ipalloc).start()
+                                  side_effect=db_ref_err_for_ipalloc,
+                                  autospec=True).start()
                 mock.patch.object(db_base_plugin_common.DbBasePluginCommon,
                                   '_get_subnet',
                                   return_value=mock.Mock()).start()