Merge "[placement] Fix foreign key constraint error" into stable/pike

This commit is contained in:
Zuul 2017-12-12 21:39:36 +00:00 committed by Gerrit Code Review
commit 4d4930c59a
2 changed files with 33 additions and 0 deletions

View File

@ -505,6 +505,10 @@ class ResourceProvider(base.NovaObject):
RPA_model = models.ResourceProviderAggregate
context.session.query(RPA_model).\
filter(RPA_model.resource_provider_id == _id).delete()
# delete any trait associations for the resource provider
RPT_model = models.ResourceProviderTrait
context.session.query(RPT_model).\
filter(RPT_model.resource_provider_id == _id).delete()
# Now delete the RP records
result = context.session.query(models.ResourceProvider).\
filter(models.ResourceProvider.id == _id).delete()

View File

@ -140,6 +140,35 @@ class TestResourceProvider(test_objects._LocalTest):
objects.ResourceProvider.get_by_uuid,
self.context, uuids.missing)
def test_destroy_with_traits(self):
"""Test deleting a resource provider that has a trait successfully.
"""
rp = resource_provider.ResourceProvider(self.context,
uuid=uuids.rp,
name='fake_rp1')
rp.create()
custom_trait = resource_provider.Trait(self.context,
uuid=uuids.trait,
name='CUSTOM_TRAIT_1')
custom_trait.create()
rp.set_traits([custom_trait])
trl = rp.get_traits()
self.assertEqual(1, len(trl))
# Delete a resource provider that has a trait assosiation.
rp.destroy()
# Assert the record has been deleted
# in 'resource_provider_traits' table
# after Resource Provider object has been destroyed.
trl = rp.get_traits()
self.assertEqual(0, len(trl))
# Assert that NotFound exception is raised.
self.assertRaises(exception.NotFound,
resource_provider.ResourceProvider.get_by_uuid,
self.context, uuids.rp)
class TestInventoryNoDB(test_objects._LocalTest):
USES_DB = False