Skip to content

Commit 9efdd0b

Browse files
committed
Reproducer unit test for bug 1860312
Consider the following situation: - Using the Ironic virt driver - Replacing (so removing and re-adding) all baremetal nodes associated with a single nova-compute service The update resources periodic will have destroyed the compute node records because they're no longer being reported by the virt driver. If we then attempt to manually delete the compute service record, the datbase layer will raise an exception, as there are no longer any compute node records for the host. This exception gets bubbled up as an error 500 in the API. This patch adds a unit test to demonstrate this. Related bug: 1860312 Change-Id: I03eec634b25582ec9643cacf3e5868c101176983 (cherry picked from commit 32257a2) (cherry picked from commit e6cd23c)
1 parent b2fd01f commit 9efdd0b

File tree

1 file changed

+19
-0
lines changed

1 file changed

+19
-0
lines changed

nova/tests/unit/api/openstack/compute/test_services.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -701,6 +701,25 @@ def test_services_delete(self, mock_get_compute_nodes):
701701
mock_get_compute_nodes.assert_called_once_with(
702702
self.req.environ['nova.context'], compute.host)
703703

704+
@mock.patch(
705+
'nova.objects.ComputeNodeList.get_all_by_host',
706+
side_effect=exception.ComputeHostNotFound(host='fake-compute-host'))
707+
def test_services_delete_compute_host_not_found(
708+
self, mock_get_all_by_host):
709+
compute = objects.Service(self.ctxt,
710+
**{'host': 'fake-compute-host',
711+
'binary': 'nova-compute',
712+
'topic': 'compute',
713+
'report_count': 0})
714+
compute.create()
715+
# FIXME(artom) Until bug 1860312 is fixed, the ComputeHostNotFound
716+
# error will get bubbled up to the API as an error 500.
717+
self.assertRaises(
718+
webob.exc.HTTPInternalServerError,
719+
self.controller.delete, self.req, compute.id)
720+
mock_get_all_by_host.assert_called_with(
721+
self.req.environ['nova.context'], 'fake-compute-host')
722+
704723
def test_services_delete_not_found(self):
705724

706725
self.assertRaises(webob.exc.HTTPNotFound,

0 commit comments

Comments
 (0)