]> review.fuel-infra Code Review - openstack-build/cinder-build.git/commitdiff
Port infortrend driver to Python 3
authorVictor Stinner <vstinner@redhat.com>
Tue, 9 Feb 2016 17:56:06 +0000 (18:56 +0100)
committerVictor Stinner <vstinner@redhat.com>
Mon, 15 Feb 2016 20:35:44 +0000 (21:35 +0100)
* InfortrendCommon: sort dictionary items to get a reliable
  behaviour. On Python 3, the hash function is randomized by default.

  - _get_minimun_mapping_channel_id(): sort LUN mapping by keys
  - _do_fc_connection(): sort initiator_target_map keys

* InfortrendCommon._create_partition_with_pool(): cast gi_to_mi()
  result to int. On Python 3, gi_to_mi() returns a float (a/b always
  return a float, even for int/int).
* test_retype_with_migrate(): build create_params using a dictionary
  to create parameter in the same order than the driver.
* tests-py3.txt: cinder.tests.unit.test_infortrend_common

Change-Id: Idd849a9cd5dc0ad17c5d8d54da489346c018e778

cinder/tests/unit/test_infortrend_common.py
cinder/volume/drivers/infortrend/eonstor_ds_cli/common_cli.py
tests-py3.txt

index 4045a433b5df12edbc8c75bf845c774db9eee38f..1b0d15273b568fa86de22e1a19fd1a537d4901d6 100644 (file)
@@ -1997,6 +1997,10 @@ class InfortrendiSCSICommonTestCase(InfortrendTestCass):
         rc, model_update = self.driver.retype(
             None, test_volume, test_new_type, test_diff, test_host)
 
+        min_size = int(test_volume['size'] * 1024 * 0.2)
+        create_params = {'init': 'disable', 'min': '%sMB' % min_size}
+        create_params = ' '.join('%s=%s' % (key, value)
+                                 for key, value in create_params.items())
         expect_cli_cmd = [
             mock.call('ShowSnapshot', 'part=%s' % test_src_part_id),
             mock.call(
@@ -2004,8 +2008,7 @@ class InfortrendiSCSICommonTestCase(InfortrendTestCass):
                 fake_pool['pool_id'],
                 test_volume['id'].replace('-', ''),
                 'size=%s' % (test_volume['size'] * 1024),
-                'init=disable min=%sMB' % (
-                    int(test_volume['size'] * 1024 * 0.2))
+                create_params,
             ),
             mock.call('ShowPartition'),
             mock.call(
index a38f863de3abeca9af59cb9f6a3def58c855ef67..c3c6cb42bae5a044896189147fb573c5a7c7f1cb 100644 (file)
@@ -522,7 +522,7 @@ class InfortrendCommon(object):
         if extraspecs_dict:
             cmd = self._create_part_parameters_str(extraspecs_dict)
 
-        commands = (pool_id, volume_id, 'size=%s' % volume_size, cmd)
+        commands = (pool_id, volume_id, 'size=%s' % int(volume_size), cmd)
         self._execute('CreatePartition', *commands)
 
     def _create_part_parameters_str(self, extraspecs_dict):
@@ -776,7 +776,9 @@ class InfortrendCommon(object):
         empty_lun_num = 0
         min_map_chl = -1
 
-        for key, value in self.map_dict[controller].items():
+        # Sort items to get a reliable behaviour. Dictionary items
+        # are iterated in a random order because of hash randomization.
+        for key, value in sorted(self.map_dict[controller].items()):
             if empty_lun_num < len(value):
                 min_map_chl = key
                 empty_lun_num = len(value)
@@ -1303,7 +1305,9 @@ class InfortrendCommon(object):
 
         map_lun = self._get_common_lun_map_id(wwpn_channel_info)
 
-        for initiator_wwpn in initiator_target_map:
+        # Sort items to get a reliable behaviour. Dictionary items
+        # are iterated in a random order because of hash randomization.
+        for initiator_wwpn in sorted(initiator_target_map):
             for target_wwpn in initiator_target_map[initiator_wwpn]:
                 channel_id = wwpn_channel_info[target_wwpn.upper()]['channel']
                 controller = wwpn_channel_info[target_wwpn.upper()]['slot']
index e47dd0f828f03a9c6f1b9a8e30e6b26a734ce0b7..86f536220f349e6579c368af506cc19c7cee852b 100644 (file)
@@ -116,6 +116,7 @@ cinder.tests.unit.test_ibm_xiv_ds8k
 cinder.tests.unit.test_ibmnas
 cinder.tests.unit.test_image_utils
 cinder.tests.unit.test_infortrend_cli
+cinder.tests.unit.test_infortrend_common
 cinder.tests.unit.test_migrations
 cinder.tests.unit.test_misc
 cinder.tests.unit.test_netapp