From 62bf220e570996f1589ce92d2b62ee03dd10571b Mon Sep 17 00:00:00 2001 From: ankit Date: Fri, 12 Apr 2019 10:10:21 +0000 Subject: [PATCH] Adding fix for nic_capacity calculation This commits resolve calculation of nic_capacity bug which gave CalledProcessError. Change-Id: If64ad3a05a7cea9dd1c00e7f94a6ca0480a65d6c Closes-bug: 1824510 --- proliantutils/ilo/ipmi.py | 11 ++++++++++- proliantutils/tests/ilo/ipmi_sample_outputs.py | 14 ++++++++++++++ proliantutils/tests/ilo/test_ipmi.py | 14 ++++++++------ 3 files changed, 32 insertions(+), 7 deletions(-) diff --git a/proliantutils/ilo/ipmi.py b/proliantutils/ilo/ipmi.py index 42c26387..ce2a6450 100644 --- a/proliantutils/ilo/ipmi.py +++ b/proliantutils/ilo/ipmi.py @@ -25,6 +25,10 @@ DRIVER. import subprocess +from proliantutils import log + +LOG = log.get_logger(__name__) + MIN_SUGGESTED_FW_REV = 2.3 DEFAULT_FW_REV = 2.1 @@ -47,7 +51,12 @@ def _exec_ipmitool(driver_info, command): out = None try: - out = subprocess.check_output(ipmi_cmd, shell=True) + process = subprocess.Popen(ipmi_cmd, stdout=subprocess.PIPE, + stderr=subprocess.PIPE, shell=True) + out, err = process.communicate() + LOG.debug(("IPMI Command output: %(out)s and " + "IPMI Command error: %(err)s and returncode: (code)s"), + {'out': out, 'err': err, 'code': process.returncode}) except Exception: pass return out diff --git a/proliantutils/tests/ilo/ipmi_sample_outputs.py b/proliantutils/tests/ilo/ipmi_sample_outputs.py index 7728131d..b939f43a 100644 --- a/proliantutils/tests/ilo/ipmi_sample_outputs.py +++ b/proliantutils/tests/ilo/ipmi_sample_outputs.py @@ -16,6 +16,20 @@ """Test Utils for iLO test modules.""" +NIC_FRU_OUT_TUPLE = (( + "Board Mfg Date : Mon Apr 28 23:16:00 2014\n" + "Board Mfg : HP\n" + "Board Product : HP Ethernet 1Gb 4-port 331FLR Adapter\n" + "Board Serial : CN84170RX5\n" + "Board Part Number : 634025-001\n" + "Board Extra : d23041\n" + "Board Extra : d5629133b001\n" + "Product Manufacturer : HP\n" + "Product Name : HP Ethernet 1Gb 4-port 331FLR Adapter\n" + "Product Part Number : 629135-B21\n" + "Product Version : 00\n" + "Product Serial : CN84170RX5"), None) + NIC_FRU_OUT = ( "Board Mfg Date : Mon Apr 28 23:16:00 2014\n" "Board Mfg : HP\n" diff --git a/proliantutils/tests/ilo/test_ipmi.py b/proliantutils/tests/ilo/test_ipmi.py index 88d2e453..bfbf9a49 100644 --- a/proliantutils/tests/ilo/test_ipmi.py +++ b/proliantutils/tests/ilo/test_ipmi.py @@ -157,17 +157,19 @@ class IloIpmiTestCase(unittest.TestCase): self.assertEqual(ipmi_mock.call_count, 9) self.assertEqual(expected_out, actual_out) - @mock.patch.object(subprocess, 'check_output') - def test__exec_ipmitool(self, check_mock): - check_mock.return_value = constants.NIC_FRU_OUT + @mock.patch.object(subprocess, 'Popen') + def test__exec_ipmitool(self, popen_mock): + pro_obj = mock.MagicMock() + popen_mock.return_value = pro_obj + pro_obj.communicate.return_value = constants.NIC_FRU_OUT_TUPLE expected_output = constants.NIC_FRU_OUT cmd = "fru print 0x64" actual_out = ipmi._exec_ipmitool(self.info, cmd) self.assertEqual(expected_output, actual_out) - @mock.patch.object(subprocess, 'check_output') - def test__exec_ipmitool_none(self, check_mock): - check_mock.side_effect = Exception + @mock.patch.object(subprocess, 'Popen') + def test__exec_ipmitool_none(self, popen_mock): + popen_mock.side_effect = Exception cmd = "fru print 0x2" actual_out = ipmi._exec_ipmitool(self.info, cmd) self.assertIsNone(actual_out)