summaryrefslogtreecommitdiff
path: root/nova/tests/unit/virt
diff options
context:
space:
mode:
authorBrett Milford <brett.milford@canonical.com>2022-08-04 16:52:33 +1000
committermelanie witt <melwittt@gmail.com>2022-10-07 18:42:11 +0000
commit00396fa9396324780c09161ed57a86b7e458c26f (patch)
tree1580e0f3ca960aef8ec90826dc4620427cfb92e7 /nova/tests/unit/virt
parent2db7cbf7d0a6692a885968bec67f48e7262ceec3 (diff)
downloadnova-00396fa9396324780c09161ed57a86b7e458c26f.tar.gz
Handle "no RAM info was set" migration case
This handles the case where the live migration monitoring thread may race and call jobStats() after the migration has completed resulting in the following error: libvirt.libvirtError: internal error: migration was active, but no RAM info was set Closes-Bug: #1982284 Change-Id: I77fdfa9cffbd44b2889f49f266b2582bcc6a4267 (cherry picked from commit 9fea934c71d3c2fa7fdd80c67d94e18466c5cf9a)
Diffstat (limited to 'nova/tests/unit/virt')
-rw-r--r--nova/tests/unit/virt/libvirt/test_guest.py22
1 files changed, 22 insertions, 0 deletions
diff --git a/nova/tests/unit/virt/libvirt/test_guest.py b/nova/tests/unit/virt/libvirt/test_guest.py
index 47ee228943..5b181b8f06 100644
--- a/nova/tests/unit/virt/libvirt/test_guest.py
+++ b/nova/tests/unit/virt/libvirt/test_guest.py
@@ -1053,3 +1053,25 @@ class JobInfoTestCase(test.NoDBTestCase):
mock_stats.assert_called_once_with()
mock_info.assert_called_once_with()
+
+ @mock.patch.object(fakelibvirt.virDomain, "jobInfo")
+ @mock.patch.object(fakelibvirt.virDomain, "jobStats")
+ def test_job_stats_no_ram(self, mock_stats, mock_info):
+ mock_stats.side_effect = fakelibvirt.make_libvirtError(
+ fakelibvirt.libvirtError,
+ "internal error: migration was active, but no RAM info was set",
+ error_code=fakelibvirt.VIR_ERR_INTERNAL_ERROR,
+ error_message="migration was active, but no RAM info was set")
+
+ info = self.guest.get_job_info()
+
+ self.assertIsInstance(info, libvirt_guest.JobInfo)
+ self.assertEqual(fakelibvirt.VIR_DOMAIN_JOB_NONE, info.type)
+ self.assertEqual(0, info.time_elapsed)
+ self.assertEqual(0, info.time_remaining)
+ self.assertEqual(0, info.memory_total)
+ self.assertEqual(0, info.memory_processed)
+ self.assertEqual(0, info.memory_remaining)
+
+ mock_stats.assert_called_once_with()
+ self.assertFalse(mock_info.called)