Skip to content

Commit 701994f

Browse files
authored
Handle NotImplementedError exception while changing optoe write max (#2985)
* Handle NotImplementedError exception while changing optoe write max Signed-off-by: Mihir Patel <[email protected]> * Added unit test for more coverage * Removed unused import --------- Signed-off-by: Mihir Patel <[email protected]>
1 parent 5729028 commit 701994f

2 files changed

Lines changed: 25 additions & 2 deletions

File tree

sfputil/main.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1325,7 +1325,10 @@ def download_firmware(port_name, filepath):
13251325
sys.exit(EXIT_FAIL)
13261326

13271327
# Increase the optoe driver's write max to speed up firmware download
1328-
sfp.set_optoe_write_max(SMBUS_BLOCK_WRITE_SIZE)
1328+
try:
1329+
sfp.set_optoe_write_max(SMBUS_BLOCK_WRITE_SIZE)
1330+
except NotImplementedError:
1331+
click.echo("Platform doesn't implement optoe write max change. Skipping value increase.")
13291332

13301333
with click.progressbar(length=file_size, label="Downloading ...") as bar:
13311334
address = 0
@@ -1351,7 +1354,10 @@ def download_firmware(port_name, filepath):
13511354
remaining -= count
13521355

13531356
# Restore the optoe driver's write max to '1' (default value)
1354-
sfp.set_optoe_write_max(1)
1357+
try:
1358+
sfp.set_optoe_write_max(1)
1359+
except NotImplementedError:
1360+
click.echo("Platform doesn't implement optoe write max change. Skipping value restore!")
13551361

13561362
status = api.cdb_firmware_download_complete()
13571363
update_firmware_info_to_state_db(port_name)

tests/sfputil_test.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -825,6 +825,23 @@ def test_show_fwversion_Rj45(self, mock_chassis):
825825
assert result.output == 'Show firmware version is not applicable for RJ45 port Ethernet0.\n'
826826
assert result.exit_code == EXIT_FAIL
827827

828+
@patch('builtins.open')
829+
@patch('sfputil.main.platform_chassis')
830+
@patch('sfputil.main.logical_port_to_physical_port_index', MagicMock(return_value=1))
831+
@patch('sfputil.main.update_firmware_info_to_state_db', MagicMock())
832+
def test_download_firmware(self, mock_chassis, mock_file):
833+
mock_file.return_value.tell.return_value = 0
834+
mock_sfp = MagicMock()
835+
mock_api = MagicMock()
836+
mock_sfp.get_xcvr_api = MagicMock(return_value=mock_api)
837+
mock_chassis.get_sfp = MagicMock(return_value=mock_sfp)
838+
mock_api.get_module_fw_mgmt_feature.return_value = {'status': True, 'feature': (0, 0, False, False, 0)}
839+
mock_api.cdb_start_firmware_download.return_value = 1
840+
mock_api.cdb_firmware_download_complete.return_value = 1
841+
mock_sfp.set_optoe_write_max = MagicMock(side_effect=NotImplementedError)
842+
status = sfputil.download_firmware("Ethernet0", "test.bin")
843+
assert status == 1
844+
828845
@patch('sfputil.main.platform_chassis')
829846
@patch('sfputil.main.logical_port_to_physical_port_index', MagicMock(return_value=1))
830847
def test_run_firmwre(self, mock_chassis):

0 commit comments

Comments
 (0)