diff --git a/sonic_platform_base/sonic_ssd/ssd_generic.py b/sonic_platform_base/sonic_ssd/ssd_generic.py index 7c387816d..f280e91c3 100644 --- a/sonic_platform_base/sonic_ssd/ssd_generic.py +++ b/sonic_platform_base/sonic_ssd/ssd_generic.py @@ -124,12 +124,18 @@ def parse_innodisk_info(self): if self.vendor_ssd_info: self.health = self._parse_re('Health:\s*(.+?)%', self.vendor_ssd_info) self.temperature = self._parse_re('Temperature\s*\[\s*(.+?)\]', self.vendor_ssd_info) - else: - if self.health == NOT_AVAILABLE: - health_raw = self.parse_id_number(INNODISK_HEALTH_ID) + + if self.health == NOT_AVAILABLE: + health_raw = self.parse_id_number(INNODISK_HEALTH_ID) + if health_raw == NOT_AVAILABLE: + self.health = NOT_AVAILABLE + else: self.health = health_raw.split()[-1] - if self.temperature == NOT_AVAILABLE: - temp_raw = self.parse_id_number(INNODISK_TEMPERATURE_ID) + if self.temperature == NOT_AVAILABLE: + temp_raw = self.parse_id_number(INNODISK_TEMPERATURE_ID) + if temp_raw == NOT_AVAILABLE: + self.temperature = NOT_AVAILABLE + else: self.temperature = temp_raw.split()[-6] def parse_virtium_info(self): diff --git a/tests/ssd_generic_test.py b/tests/ssd_generic_test.py index 73e89281c..0cdf58406 100644 --- a/tests/ssd_generic_test.py +++ b/tests/ssd_generic_test.py @@ -389,7 +389,7 @@ def test_ssd_with_na_path(self): def test_Innodisk_ssd(self): # Test parsing Innodisk ssd info Innodisk_ssd = SsdUtil('/dev/sda') - assert(Innodisk_ssd.get_health() == 'N/A') + assert(Innodisk_ssd.get_health() == '0x000000000000') assert(Innodisk_ssd.get_model() == 'InnoDisk Corp. - mSATA 3ME') assert(Innodisk_ssd.get_firmware() == "S140714") assert(Innodisk_ssd.get_temperature() == 'N/A') @@ -411,4 +411,14 @@ def test_Innodisk_missing_names_ssd(self): Innodisk_ssd.parse_vendor_ssd_info('InnoDisk') assert(Innodisk_ssd.get_health() == '94') assert(Innodisk_ssd.get_temperature() == '39') + + @mock.patch('sonic_platform_base.sonic_ssd.ssd_generic.SsdUtil._execute_shell', mock.MagicMock(return_value=output_Innodisk_missing_names_ssd)) + def test_Innodisk_missing_names_ssd_2(self): + # Test parsing Innodisk ssd info + Innodisk_ssd = SsdUtil('/dev/sda') + Innodisk_ssd.vendor_ssd_info = 'ERROR message from cmd' + Innodisk_ssd.parse_vendor_ssd_info('InnoDisk') + assert(Innodisk_ssd.get_health() == '94') + assert(Innodisk_ssd.get_temperature() == '39') +