From 53877a95bc9f4d40315f876c076a7a32817ea904 Mon Sep 17 00:00:00 2001 From: Sam Wan Date: Tue, 30 Jan 2018 06:08:57 -0500 Subject: [PATCH] Handle None value 'inititator_target_map' Should check not only if 'initiator_target_map' is in conn_props but also its value is not None. Change-Id: I7ca0bf5fac20a370097f1c39ce005a1b23814459 Closes-Bug: #1746218 --- .../initiator/connectors/fibre_channel.py | 2 +- os_brick/initiator/linuxfc.py | 2 +- .../connectors/test_fibre_channel.py | 3 +- os_brick/tests/initiator/test_linuxfc.py | 35 +++++++++++++++++++ 4 files changed, 38 insertions(+), 4 deletions(-) diff --git a/os_brick/initiator/connectors/fibre_channel.py b/os_brick/initiator/connectors/fibre_channel.py index d34d9e615..9df46b114 100644 --- a/os_brick/initiator/connectors/fibre_channel.py +++ b/os_brick/initiator/connectors/fibre_channel.py @@ -116,7 +116,7 @@ class FibreChannelConnector(base.BaseLinuxConnector): wwpn_lun_map[wwpn] = lun # If there is an initiator_target_map we can update it too - if 'initiator_target_map' in connection_properties: + if connection_properties.get('initiator_target_map') is not None: itmap = connection_properties['initiator_target_map'] new_itmap = dict() for init_wwpn in itmap: diff --git a/os_brick/initiator/linuxfc.py b/os_brick/initiator/linuxfc.py index 4921e9d99..3d6c4c941 100644 --- a/os_brick/initiator/linuxfc.py +++ b/os_brick/initiator/linuxfc.py @@ -50,7 +50,7 @@ class LinuxFibreChannel(linuxscsi.LinuxSCSI): # We want the target's WWPNs, so we use the initiator_target_map if # present for this hba or default to target_wwns if not present. targets = conn_props['targets'] - if 'initiator_target_map' in conn_props: + if conn_props.get('initiator_target_map') is not None: targets = conn_props['initiator_target_lun_map'].get( hba['port_name'], targets) diff --git a/os_brick/tests/initiator/connectors/test_fibre_channel.py b/os_brick/tests/initiator/connectors/test_fibre_channel.py index 2521d9459..4101a6f59 100644 --- a/os_brick/tests/initiator/connectors/test_fibre_channel.py +++ b/os_brick/tests/initiator/connectors/test_fibre_channel.py @@ -603,8 +603,7 @@ class FibreChannelConnectorTestCase(test_connector.ConnectorTestCase): conn = self.fibrechan_connection(volume, "10.0.2.15:3260", wwn) conn['data'].update(target_info) - if itmap: - conn['data']['initiator_target_map'] = itmap + conn['data']['initiator_target_map'] = itmap connection_info = self.connector._add_targets_to_connection_properties( conn['data']) diff --git a/os_brick/tests/initiator/test_linuxfc.py b/os_brick/tests/initiator/test_linuxfc.py index 3107594c0..70dcf3381 100644 --- a/os_brick/tests/initiator/test_linuxfc.py +++ b/os_brick/tests/initiator/test_linuxfc.py @@ -96,6 +96,41 @@ class LinuxFCTestCase(base.TestCase): expected = [['0', '1', 1]] self.assertListEqual(expected, res) + def test__get_hba_channel_scsi_target_with_initiator_target_map(self): + execute_results = ('/sys/class/fc_transport/target6:0:1/port_name\n', + '') + hbas, con_props = self.__get_rescan_info(zone_manager=True) + con_props['target_wwn'] = con_props['target_wwn'][0] + con_props['targets'] = con_props['targets'][0:1] + hbas[0]['port_name'] = '50014380186af83e' + with mock.patch.object(self.lfc, '_execute', + return_value=execute_results) as execute_mock: + res = self.lfc._get_hba_channel_scsi_target(hbas[0], con_props) + execute_mock.assert_called_once_with( + 'grep -Gil "514f0c50023f6c01" ' + '/sys/class/fc_transport/target6:*/port_name', + shell=True) + expected = [['0', '1', 1]] + self.assertListEqual(expected, res) + + def test__get_hba_channel_scsi_target_with_initiator_target_map_none(self): + execute_results = ('/sys/class/fc_transport/target6:0:1/port_name\n', + '') + hbas, con_props = self.__get_rescan_info() + con_props['target_wwn'] = con_props['target_wwn'][0] + con_props['targets'] = con_props['targets'][0:1] + con_props['initiator_target_map'] = None + hbas[0]['port_name'] = '50014380186af83e' + with mock.patch.object(self.lfc, '_execute', + return_value=execute_results) as execute_mock: + res = self.lfc._get_hba_channel_scsi_target(hbas[0], con_props) + execute_mock.assert_called_once_with( + 'grep -Gil "514f0c50023f6c00" ' + '/sys/class/fc_transport/target6:*/port_name', + shell=True) + expected = [['0', '1', 1]] + self.assertListEqual(expected, res) + def test__get_hba_channel_scsi_target_multiple_wwpn(self): execute_results = [ ['/sys/class/fc_transport/target6:0:1/port_name\n', ''],