From c3240b96e84adda494ce08ce05f8ea81d1f158e4 Mon Sep 17 00:00:00 2001 From: Zhiteng Huang Date: Fri, 20 Jun 2014 11:48:28 +0800 Subject: [PATCH] Fix order dependency of admin metadata Some test cases in VolumeTestCase depends on the order of admin metadata returned from db.volume_get() call, which causes jenkins test failure in recent reviews. This change extracts the key/value we are intertested in and compare them with AssertDictMatch() to remove the order dependency. Change-Id: I2719c025436304cabab54f19a6ce314842d8785b Closes-bug: # 1332388 --- cinder/tests/test_volume.py | 55 +++++++++++++++++++++---------------- 1 file changed, 31 insertions(+), 24 deletions(-) diff --git a/cinder/tests/test_volume.py b/cinder/tests/test_volume.py index e1e082f92..bc9218feb 100644 --- a/cinder/tests/test_volume.py +++ b/cinder/tests/test_volume.py @@ -1250,10 +1250,11 @@ class VolumeTestCase(BaseVolumeTestCase): self.assertIsNone(vol['attached_host']) admin_metadata = vol['volume_admin_metadata'] self.assertEqual(len(admin_metadata), 2) - self.assertEqual(admin_metadata[0]['key'], 'readonly') - self.assertEqual(admin_metadata[0]['value'], 'True') - self.assertEqual(admin_metadata[1]['key'], 'attached_mode') - self.assertEqual(admin_metadata[1]['value'], 'ro') + expected = dict(readonly='True', attached_mode='ro') + ret = {} + for item in admin_metadata: + ret.update({item['key']: item['value']}) + self.assertDictMatch(ret, expected) connector = {'initiator': 'iqn.2012-07.org.fake:01'} conn_info = self.volume.initialize_connection(self.context, volume_id, connector) @@ -1293,10 +1294,12 @@ class VolumeTestCase(BaseVolumeTestCase): self.assertEqual(vol['attached_host'], 'fake-host') admin_metadata = vol['volume_admin_metadata'] self.assertEqual(len(admin_metadata), 2) - self.assertEqual(admin_metadata[0]['key'], 'readonly') - self.assertEqual(admin_metadata[0]['value'], 'False') - self.assertEqual(admin_metadata[1]['key'], 'attached_mode') - self.assertEqual(admin_metadata[1]['value'], 'rw') + expected = dict(readonly='False', attached_mode='rw') + ret = {} + for item in admin_metadata: + ret.update({item['key']: item['value']}) + self.assertDictMatch(ret, expected) + connector = {'initiator': 'iqn.2012-07.org.fake:01'} conn_info = self.volume.initialize_connection(self.context, volume_id, connector) @@ -1338,10 +1341,11 @@ class VolumeTestCase(BaseVolumeTestCase): self.assertIsNone(vol['attached_host']) admin_metadata = vol['volume_admin_metadata'] self.assertEqual(len(admin_metadata), 2) - self.assertEqual(admin_metadata[0]['key'], 'readonly') - self.assertEqual(admin_metadata[0]['value'], 'True') - self.assertEqual(admin_metadata[1]['key'], 'attached_mode') - self.assertEqual(admin_metadata[1]['value'], 'ro') + expected = dict(readonly='True', attached_mode='ro') + ret = {} + for item in admin_metadata: + ret.update({item['key']: item['value']}) + self.assertDictMatch(ret, expected) connector = {'initiator': 'iqn.2012-07.org.fake:01'} conn_info = self.volume.initialize_connection(self.context, volume_id, connector) @@ -1369,10 +1373,11 @@ class VolumeTestCase(BaseVolumeTestCase): self.assertEqual(vol['attached_host'], 'fake-host') admin_metadata = vol['volume_admin_metadata'] self.assertEqual(len(admin_metadata), 2) - self.assertEqual(admin_metadata[0]['key'], 'readonly') - self.assertEqual(admin_metadata[0]['value'], 'True') - self.assertEqual(admin_metadata[1]['key'], 'attached_mode') - self.assertEqual(admin_metadata[1]['value'], 'ro') + expected = dict(readonly='True', attached_mode='ro') + ret = {} + for item in admin_metadata: + ret.update({item['key']: item['value']}) + self.assertDictMatch(ret, expected) connector = {'initiator': 'iqn.2012-07.org.fake:01'} conn_info = self.volume.initialize_connection(self.context, volume_id, connector) @@ -1418,10 +1423,11 @@ class VolumeTestCase(BaseVolumeTestCase): self.assertEqual(vol['attach_status'], "detached") admin_metadata = vol['volume_admin_metadata'] self.assertEqual(len(admin_metadata), 2) - self.assertEqual(admin_metadata[0]['key'], 'readonly') - self.assertEqual(admin_metadata[0]['value'], 'True') - self.assertEqual(admin_metadata[1]['key'], 'attached_mode') - self.assertEqual(admin_metadata[1]['value'], 'rw') + expected = dict(readonly='True', attached_mode='rw') + ret = {} + for item in admin_metadata: + ret.update({item['key']: item['value']}) + self.assertDictMatch(ret, expected) db.volume_update(self.context, volume_id, {'status': 'available'}) self.assertRaises(exception.InvalidVolumeAttachMode, @@ -1437,10 +1443,11 @@ class VolumeTestCase(BaseVolumeTestCase): self.assertEqual(vol['attach_status'], "detached") admin_metadata = vol['volume_admin_metadata'] self.assertEqual(len(admin_metadata), 2) - self.assertEqual(admin_metadata[0]['key'], 'readonly') - self.assertEqual(admin_metadata[0]['value'], 'True') - self.assertEqual(admin_metadata[1]['key'], 'attached_mode') - self.assertEqual(admin_metadata[1]['value'], 'rw') + expected = dict(readonly='True', attached_mode='rw') + ret = {} + for item in admin_metadata: + ret.update({item['key']: item['value']}) + self.assertDictMatch(ret, expected) def test_run_api_attach_detach_volume_with_wrong_attach_mode(self): # Not allow using 'read-write' mode attach readonly volume -- 2.45.2