diff --git a/nova/tests/functional/libvirt/test_power_manage.py b/nova/tests/functional/libvirt/test_power_manage.py index 54463d0949..fb44f50c1e 100644 --- a/nova/tests/functional/libvirt/test_power_manage.py +++ b/nova/tests/functional/libvirt/test_power_manage.py @@ -10,15 +10,16 @@ # License for the specific language governing permissions and limitations # under the License. -from unittest import mock - import fixtures +from unittest import mock + from nova import context as nova_context from nova import exception from nova import objects from nova.tests import fixtures as nova_fixtures from nova.tests.fixtures import libvirt as fakelibvirt +from nova.tests.functional.api import client from nova.tests.functional.libvirt import base from nova.virt import hardware from nova.virt.libvirt.cpu import api as cpu_api @@ -240,7 +241,6 @@ class PowerManagementTests(PowerManagementTestsBase): cpu_cores=5, cpu_threads=2) self.compute1 = self.start_compute(host_info=self.host_info, hostname='compute1') - # All cores are shutdown at startup, let's check. cpu_dedicated_set = hardware.get_cpu_dedicated_set() self._assert_cpu_set_state(cpu_dedicated_set, expected='offline') @@ -266,6 +266,33 @@ class PowerManagementTests(PowerManagementTestsBase): cpu_dedicated_set = hardware.get_cpu_dedicated_set() unused_cpus = cpu_dedicated_set - instance_pcpus self._assert_cpu_set_state(unused_cpus, expected='offline') + return server + + def test_delete_server(self): + server = self.test_create_server() + self._delete_server(server) + # Let's verify that the pinned CPUs are now offline + cpu_dedicated_set = hardware.get_cpu_dedicated_set() + self._assert_cpu_set_state(cpu_dedicated_set, expected='offline') + + def test_delete_server_device_busy(self): + server = self.test_create_server() + + inst = objects.Instance.get_by_uuid(self.ctxt, server['id']) + instance_pcpus = inst.numa_topology.cpu_pinning + self._assert_cpu_set_state(instance_pcpus, expected='online') + with mock.patch( + 'nova.filesystem.write_sys', + side_effect=exception.FileNotFound(file_path='fake')): + # This is bug 2065927 + self.assertRaises( + client.OpenStackApiException, self._delete_server, server) + cpu_dedicated_set = hardware.get_cpu_dedicated_set() + # Verify that the unused CPUs are still offline + unused_cpus = cpu_dedicated_set - instance_pcpus + self._assert_cpu_set_state(unused_cpus, expected='offline') + # but the instance cpus are still online + self._assert_cpu_set_state(instance_pcpus, expected='online') def test_create_server_with_emulator_threads_isolate(self): server = self._create_server(