@@ -53,21 +53,17 @@ def test_get_name(self):
5353 bmc = BMCBase ('169.254.0.1' )
5454 assert bmc .get_name () == BMCBase .BMC_NAME
5555
56- @mock .patch ('sonic_py_common.device_info.get_bmc_data' )
57- def test_get_presence_true (self , mock_get_bmc_data ):
56+ def test_get_presence_true (self ):
5857 """Test get_presence returns True when BMC data is present"""
59- mock_get_bmc_data .return_value = {'bmc_addr' : '169.254.0.1' }
60-
61- bmc = BMCBase ('169.254.0.1' )
62- assert bmc .get_presence () == True
58+ with mock .patch ('sonic_py_common.device_info.get_bmc_data' , create = True , return_value = {'bmc_addr' : '169.254.0.1' }):
59+ bmc = BMCBase ('169.254.0.1' )
60+ assert bmc .get_presence () == True
6361
64- @mock .patch ('sonic_py_common.device_info.get_bmc_data' )
65- def test_get_presence_false (self , mock_get_bmc_data ):
62+ def test_get_presence_false (self ):
6663 """Test get_presence returns False when BMC data is not present"""
67- mock_get_bmc_data .return_value = None
68-
69- bmc = BMCBase ('169.254.0.1' )
70- assert bmc .get_presence () == False
64+ with mock .patch ('sonic_py_common.device_info.get_bmc_data' , create = True , return_value = None ):
65+ bmc = BMCBase ('169.254.0.1' )
66+ assert bmc .get_presence () == False
7167
7268 def test_is_replaceable (self ):
7369 """Test is_replaceable returns False"""
@@ -233,6 +229,22 @@ def test_get_version_failure(self, mock_has_login, mock_logout, mock_login, mock
233229
234230 assert version == 'N/A'
235231
232+ @mock .patch .object (RedfishClient , 'redfish_api_get_firmware_version' )
233+ @mock .patch .object (RedfishClient , 'login' )
234+ @mock .patch .object (RedfishClient , 'logout' )
235+ @mock .patch .object (RedfishClient , 'has_login' )
236+ def test_get_version_exception (self , mock_has_login , mock_logout , mock_login , mock_get_fw_version ):
237+ """Test get_version with exception"""
238+ mock_has_login .return_value = False
239+ mock_login .return_value = RedfishClient .ERR_CODE_OK
240+ mock_logout .return_value = RedfishClient .ERR_CODE_OK
241+ mock_get_fw_version .side_effect = Exception ("Test exception" )
242+
243+ bmc = ConcreteBMC ('169.254.0.1' )
244+ version = bmc .get_version ()
245+
246+ assert version == 'N/A'
247+
236248 @mock .patch .object (RedfishClient , 'redfish_api_get_eeprom_info' )
237249 @mock .patch .object (RedfishClient , 'login' )
238250 @mock .patch .object (RedfishClient , 'logout' )
@@ -267,6 +279,41 @@ def test_get_eeprom_failure(self, mock_has_login, mock_logout, mock_login, mock_
267279
268280 assert result == {}
269281
282+ @mock .patch .object (RedfishClient , 'redfish_api_get_eeprom_info' )
283+ @mock .patch .object (RedfishClient , 'login' )
284+ @mock .patch .object (RedfishClient , 'logout' )
285+ @mock .patch .object (RedfishClient , 'has_login' )
286+ def test_get_eeprom_exception (self , mock_has_login , mock_logout , mock_login , mock_get_eeprom ):
287+ """Test get_eeprom with exception"""
288+ mock_has_login .return_value = False
289+ mock_login .return_value = RedfishClient .ERR_CODE_OK
290+ mock_logout .return_value = RedfishClient .ERR_CODE_OK
291+ mock_get_eeprom .side_effect = Exception ("Test exception" )
292+
293+ bmc = ConcreteBMC ('169.254.0.1' )
294+ result = bmc .get_eeprom ()
295+
296+ assert result == {}
297+
298+ def test_wrapper_rf_client_none_exception (self ):
299+ """Test wrapper raises exception when RedfishClient instance is None"""
300+ bmc = ConcreteBMC ('169.254.0.1' )
301+
302+ with mock .patch .object (bmc , '_login' ) as mock_login :
303+ with mock .patch .object (bmc , '_logout' , return_value = RedfishClient .ERR_CODE_OK ):
304+ def login_side_effect ():
305+ if bmc .rf_client is None :
306+ raise Exception ('RedfishClient instance is None' )
307+ return RedfishClient .ERR_CODE_OK
308+
309+ mock_login .side_effect = login_side_effect
310+ bmc .rf_client = None
311+
312+ ret , data = bmc .trigger_bmc_debug_log_dump ()
313+
314+ assert ret == RedfishClient .ERR_CODE_GENERIC_ERROR
315+ assert 'RedfishClient instance is None' in str (data )
316+
270317 @mock .patch .object (RedfishClient , 'redfish_api_get_eeprom_info' )
271318 @mock .patch .object (RedfishClient , 'login' )
272319 @mock .patch .object (RedfishClient , 'logout' )
@@ -284,6 +331,22 @@ def test_get_model(self, mock_has_login, mock_logout, mock_login, mock_get_eepro
284331
285332 assert model == 'P3809'
286333
334+ @mock .patch .object (RedfishClient , 'redfish_api_get_eeprom_info' )
335+ @mock .patch .object (RedfishClient , 'login' )
336+ @mock .patch .object (RedfishClient , 'logout' )
337+ @mock .patch .object (RedfishClient , 'has_login' )
338+ def test_get_model_returns_none (self , mock_has_login , mock_logout , mock_login , mock_get_eeprom ):
339+ """Test get_model returns None when EEPROM is invalid"""
340+ mock_has_login .return_value = False
341+ mock_login .return_value = RedfishClient .ERR_CODE_OK
342+ mock_logout .return_value = RedfishClient .ERR_CODE_OK
343+ mock_get_eeprom .return_value = (RedfishClient .ERR_CODE_GENERIC_ERROR , {})
344+
345+ bmc = ConcreteBMC ('169.254.0.1' )
346+ model = bmc .get_model ()
347+
348+ assert model is None
349+
287350 @mock .patch .object (RedfishClient , 'redfish_api_get_eeprom_info' )
288351 @mock .patch .object (RedfishClient , 'login' )
289352 @mock .patch .object (RedfishClient , 'logout' )
@@ -301,6 +364,22 @@ def test_get_serial(self, mock_has_login, mock_logout, mock_login, mock_get_eepr
301364
302365 assert serial == '123456'
303366
367+ @mock .patch .object (RedfishClient , 'redfish_api_get_eeprom_info' )
368+ @mock .patch .object (RedfishClient , 'login' )
369+ @mock .patch .object (RedfishClient , 'logout' )
370+ @mock .patch .object (RedfishClient , 'has_login' )
371+ def test_get_serial_returns_none (self , mock_has_login , mock_logout , mock_login , mock_get_eeprom ):
372+ """Test get_serial returns None when EEPROM is invalid"""
373+ mock_has_login .return_value = False
374+ mock_login .return_value = RedfishClient .ERR_CODE_OK
375+ mock_logout .return_value = RedfishClient .ERR_CODE_OK
376+ mock_get_eeprom .return_value = (RedfishClient .ERR_CODE_OK , {})
377+
378+ bmc = ConcreteBMC ('169.254.0.1' )
379+ serial = bmc .get_serial ()
380+
381+ assert serial is None
382+
304383 @mock .patch .object (RedfishClient , 'redfish_api_update_firmware' )
305384 @mock .patch .object (RedfishClient , 'login' )
306385 @mock .patch .object (RedfishClient , 'logout' )
0 commit comments