]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
lp834694 fix integrity error when deleting network with unattached ports. Add unit...
authorDan Wendlandt <dan@nicira.com>
Tue, 30 Aug 2011 01:16:39 +0000 (18:16 -0700)
committerDan Wendlandt <dan@nicira.com>
Tue, 30 Aug 2011 01:16:39 +0000 (18:16 -0700)
quantum/db/api.py
tests/unit/test_api.py

index ae93204d4d48e8e8cf3807f44aa7aea85b0b4de5..89fd05891437d193acf0356a56047e4cc0bd76c8 100644 (file)
@@ -142,6 +142,13 @@ def network_destroy(net_id):
         net = session.query(models.Network).\
           filter_by(uuid=net_id).\
           one()
+
+        ports = session.query(models.Port).\
+            filter_by(network_id=net_id).\
+            all()
+        for p in ports:
+            session.delete(p)
+
         session.delete(net)
         session.flush()
         return net
index a374dffcebccf44d85244c01a52a1dba5d945fae..2fe27974a10147bcc639686df56b5fdd584b21bb 100644 (file)
@@ -261,6 +261,26 @@ class APITest(unittest.TestCase):
         self.assertEqual(delete_network_res.status_int, 421)
         LOG.debug("_test_delete_network_in_use - format:%s - END", format)
 
+    def _test_delete_network_with_unattached_port(self, format):
+        LOG.debug("_test_delete_network_with_unattached_port "\
+                    "- format:%s - START", format)
+        content_type = "application/%s" % format
+        port_state = "ACTIVE"
+        network_id = self._create_network(format)
+        LOG.debug("Deleting network %(network_id)s"\
+                  " of tenant %(tenant_id)s", locals())
+        port_id = self._create_port(network_id, port_state, format)
+
+        LOG.debug("Deleting network %(network_id)s"\
+                  " of tenant %(tenant_id)s", locals())
+        delete_network_req = testlib.network_delete_request(self.tenant_id,
+                                                            network_id,
+                                                            format)
+        delete_network_res = delete_network_req.get_response(self.api)
+        self.assertEqual(delete_network_res.status_int, 204)
+        LOG.debug("_test_delete_network_with_unattached_port "\
+                    "- format:%s - END", format)
+
     def _test_list_ports(self, format):
         LOG.debug("_test_list_ports - format:%s - START", format)
         content_type = "application/%s" % format
@@ -848,6 +868,12 @@ class APITest(unittest.TestCase):
     def test_delete_network_in_use_xml(self):
         self._test_delete_network_in_use('xml')
 
+    def test_delete_network_with_unattached_port_xml(self):
+        self._test_delete_network_with_unattached_port('xml')
+
+    def test_delete_network_with_unattached_port_json(self):
+        self._test_delete_network_with_unattached_port('json')
+
     def test_list_ports_json(self):
         self._test_list_ports('json')