Skip to content

Commit 4cbd904

Browse files
committed
fix UT
1 parent 32f30af commit 4cbd904

File tree

7 files changed

+1199
-12
lines changed

7 files changed

+1199
-12
lines changed

tests/bmc_base_test.py

Lines changed: 91 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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')

tests/chassis_base_test.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,3 +58,10 @@ def test_sensors(self):
5858
chassis._current_sensor_list = ["s1"]
5959
assert(chassis.get_all_current_sensors() == ["s1"])
6060
assert(chassis.get_current_sensor(0) == "s1")
61+
62+
def test_get_bmc(self):
63+
chassis = ChassisBase()
64+
assert(chassis.get_bmc() == None)
65+
mock_bmc = "mock_bmc_instance"
66+
chassis._bmc = mock_bmc
67+
assert(chassis.get_bmc() == mock_bmc)
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"Id": "1234",
3+
"TaskStatus": "OK",
4+
"PercentComplete": 0
5+
}
6+
HTTP Status Code: 200
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"PercentComplete": 100,
3+
"TaskStatus": "OK",
4+
"Messages": [
5+
{
6+
"MessageId": "ResourceEvent.1.0.UpdateSuccessful",
7+
"MessageArgs": ["BMC_FW_0", "Update successful"]
8+
}
9+
]
10+
}
11+
HTTP Status Code: 200
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"Members": [
3+
{
4+
"@odata.id": "/redfish/v1/Chassis/BMC_eeprom"
5+
},
6+
{
7+
"@odata.id": "/redfish/v1/Chassis/system_eeprom"
8+
}
9+
],
10+
11+
}
12+
HTTP Status Code: 200
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"Members": [
3+
{
4+
"@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/BMC_FW_0"
5+
},
6+
{
7+
"@odata.id": "/redfish/v1/UpdateService/FirmwareInventory/BIOS_FW_0"
8+
}
9+
],
10+
11+
}
12+
HTTP Status Code: 200

0 commit comments

Comments
 (0)