From ac9acce283a28326c6f9af4a158e6f3c1e09db45 Mon Sep 17 00:00:00 2001 From: Matt Riedemann Date: Mon, 2 Jul 2018 11:50:18 -0400 Subject: [PATCH] Handle nested serialized json entries in assertJsonEqual test_pre_live_migration_volume_backed* tests are comparing primitive versions of LibvirtLiveMigrateData objects which nest primitive LibvirtLiveMigrateBDMInfo which have serialized connection_info_json fields in them, which can have a random key order when comparing which makes the tests fail. This changes assertJsonEqual to try and deserialize nested json strings like it does for the top level expected and observed variables, and updates the test to use assertJsonEqual. Change-Id: Ief1634f7e31c473b226e9f19240ecd21840ebdb3 Closes-Bug: #1779711 --- nova/test.py | 11 +++++++++++ nova/tests/unit/virt/libvirt/test_driver.py | 4 ++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/nova/test.py b/nova/test.py index 63889d9b4692..f87917cd6ab7 100644 --- a/nova/test.py +++ b/nova/test.py @@ -489,7 +489,18 @@ class TestCase(testtools.TestCase): return sorted(items) return x + def try_deserialize(entry): + """Try to deserialize string entry; if not json, return entry""" + if isinstance(entry, six.string_types): + try: + return jsonutils.loads(entry) + except ValueError: + pass + return entry + def inner(expected, observed, path='root'): + expected = try_deserialize(expected) + observed = try_deserialize(observed) if isinstance(expected, dict) and isinstance(observed, dict): self.assertEqual( len(expected), len(observed), diff --git a/nova/tests/unit/virt/libvirt/test_driver.py b/nova/tests/unit/virt/libvirt/test_driver.py index b708f3d92e99..3eaa836e6374 100644 --- a/nova/tests/unit/virt/libvirt/test_driver.py +++ b/nova/tests/unit/virt/libvirt/test_driver.py @@ -11965,8 +11965,8 @@ class LibvirtConnTestCase(test.NoDBTestCase, # mix-in is ever used for these objects. expected_migrate_data.obj_reset_changes(recursive=True) returned_migrate_data.obj_reset_changes(recursive=True) - self.assertEqual(expected_migrate_data.obj_to_primitive(), - returned_migrate_data.obj_to_primitive()) + self.assertJsonEqual(expected_migrate_data.obj_to_primitive(), + returned_migrate_data.obj_to_primitive()) def test_pre_live_migration_volume_backed(self): self._test_pre_live_migration_volume_backed()