Skip to content

Commit 25e22cd

Browse files
authored
Support to get MEDIA_SETTING and OPTICS_SI from both platform folder and HWSKU folder (#456)
* support to get MEDIA_SETTING and OPTICS_SI from both platform folder and HWSKU folder * Add unit test cases Signed-off-by: Kebo Liu <[email protected]> * fix unit test failure Signed-off-by: Kebo Liu <[email protected]> --------- Signed-off-by: Kebo Liu <[email protected]>
1 parent 805c76a commit 25e22cd

File tree

3 files changed

+42
-9
lines changed

3 files changed

+42
-9
lines changed

sonic-xcvrd/tests/test_xcvrd.py

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -579,10 +579,14 @@ def test_init_port_sfp_status_tbl(self):
579579
task = SfpStateUpdateTask(DEFAULT_NAMESPACE, port_mapping, stop_event, sfp_error_event)
580580
task._init_port_sfp_status_tbl(port_mapping, xcvr_table_helper, stop_event)
581581

582-
@patch('sonic_py_common.device_info.get_paths_to_platform_and_hwsku_dirs', MagicMock(return_value=('/invalid/path', None)))
582+
@patch('sonic_py_common.device_info.get_paths_to_platform_and_hwsku_dirs', MagicMock(return_value=('/invalid/path', '/invalid/path')))
583583
def test_load_media_settings_missing_file(self):
584584
assert media_settings_parser.load_media_settings() == {}
585585

586+
@patch('sonic_py_common.device_info.get_paths_to_platform_and_hwsku_dirs', MagicMock(return_value=('/invalid/path', '/invalid/path')))
587+
def test_load_optical_si_settings_missing_file(self):
588+
assert optics_si_parser.load_optics_si_settings() == {}
589+
586590
@patch('xcvrd.xcvrd.platform_chassis')
587591
@patch('xcvrd.xcvrd.is_cmis_api')
588592
def test_get_media_settings_key(self, mock_is_cmis_api, mock_chassis):
@@ -2508,7 +2512,7 @@ class MockPortMapping:
25082512

25092513
@patch('xcvrd.xcvrd.DaemonXcvrd.load_platform_util', MagicMock())
25102514
@patch('xcvrd.xcvrd_utilities.port_event_helper.get_port_mapping', MagicMock(return_value=MockPortMapping))
2511-
@patch('sonic_py_common.device_info.get_paths_to_platform_and_hwsku_dirs', MagicMock(return_value=('/tmp', None)))
2515+
@patch('sonic_py_common.device_info.get_paths_to_platform_and_hwsku_dirs', MagicMock(return_value=('/tmp', '/tmp')))
25122516
@patch('swsscommon.swsscommon.WarmStart', MagicMock())
25132517
@patch('xcvrd.xcvrd.DaemonXcvrd.wait_for_port_config_done', MagicMock())
25142518
def test_DaemonXcvrd_init_deinit_fastboot_enabled(self):
@@ -2531,7 +2535,7 @@ def test_DaemonXcvrd_init_deinit_fastboot_enabled(self):
25312535

25322536
@patch('xcvrd.xcvrd.DaemonXcvrd.load_platform_util', MagicMock())
25332537
@patch('xcvrd.xcvrd_utilities.port_event_helper.get_port_mapping', MagicMock(return_value=MockPortMapping))
2534-
@patch('sonic_py_common.device_info.get_paths_to_platform_and_hwsku_dirs', MagicMock(return_value=('/tmp', None)))
2538+
@patch('sonic_py_common.device_info.get_paths_to_platform_and_hwsku_dirs', MagicMock(return_value=('/tmp', '/tmp')))
25352539
@patch('xcvrd.xcvrd.is_warm_reboot_enabled', MagicMock(return_value=False))
25362540
@patch('xcvrd.xcvrd.DaemonXcvrd.wait_for_port_config_done', MagicMock())
25372541
@patch('subprocess.check_output', MagicMock(return_value='false'))
@@ -2556,6 +2560,21 @@ def test_DaemonXcvrd_init_deinit_cold(self):
25562560

25572561
status_tbl.hdel.assert_called()
25582562

2563+
@patch('sonic_py_common.device_info.get_paths_to_platform_and_hwsku_dirs', MagicMock(return_value=(test_path, '/invalid/path')))
2564+
def test_load_optical_si_file_from_platform_folder(self):
2565+
assert optics_si_parser.load_optics_si_settings() != {}
2566+
2567+
@patch('sonic_py_common.device_info.get_paths_to_platform_and_hwsku_dirs', MagicMock(return_value=('/invalid/path', test_path)))
2568+
def test_load_optical_si_file_from_hwsku_folder(self):
2569+
assert optics_si_parser.load_optics_si_settings() != {}
2570+
2571+
@patch('sonic_py_common.device_info.get_paths_to_platform_and_hwsku_dirs', MagicMock(return_value=(test_path, '/invalid/path')))
2572+
def test_load_media_settings_file_from_platform_folder(self):
2573+
assert media_settings_parser.load_media_settings() != {}
2574+
2575+
@patch('sonic_py_common.device_info.get_paths_to_platform_and_hwsku_dirs', MagicMock(return_value=('/invalid/path', test_path)))
2576+
def test_load_media_settings_file_from_hwsku_folder(self):
2577+
assert media_settings_parser.load_media_settings() != {}
25592578

25602579
def wait_until(total_wait_time, interval, call_back, *args, **kwargs):
25612580
wait_time = 0

sonic-xcvrd/xcvrd/xcvrd_utilities/media_settings_parser.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,17 @@
2222

2323
def load_media_settings():
2424
global g_dict
25-
(platform_path, _) = device_info.get_paths_to_platform_and_hwsku_dirs()
25+
(platform_path, hwsku_path) = device_info.get_paths_to_platform_and_hwsku_dirs()
2626

27-
media_settings_file_path = os.path.join(platform_path, "media_settings.json")
28-
if not os.path.isfile(media_settings_file_path):
27+
# Support to fetch media_settings.json both from platform folder and HWSKU folder
28+
media_settings_file_path_platform = os.path.join(platform_path, "media_settings.json")
29+
media_settings_file_path_hwsku = os.path.join(hwsku_path, "media_settings.json")
30+
31+
if os.path.isfile(media_settings_file_path_hwsku):
32+
media_settings_file_path = media_settings_file_path_hwsku
33+
elif os.path.isfile(media_settings_file_path_platform):
34+
media_settings_file_path = media_settings_file_path_platform
35+
else:
2936
helper_logger.log_info("xcvrd: No media file exists")
3037
return {}
3138

sonic-xcvrd/xcvrd/xcvrd_utilities/optics_si_parser.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -120,10 +120,17 @@ def fetch_optics_si_setting(physical_port, lane_speed, sfp):
120120

121121
def load_optics_si_settings():
122122
global g_optics_si_dict
123-
(platform_path, _) = device_info.get_paths_to_platform_and_hwsku_dirs()
123+
(platform_path, hwsku_path) = device_info.get_paths_to_platform_and_hwsku_dirs()
124124

125-
optics_si_settings_file_path = os.path.join(platform_path, "optics_si_settings.json")
126-
if not os.path.isfile(optics_si_settings_file_path):
125+
# Support to fetch optics_si_settings.json both from platform folder and HWSKU folder
126+
optics_si_settings_file_path_platform = os.path.join(platform_path, "optics_si_settings.json")
127+
optics_si_settings_file_path_hwsku = os.path.join(hwsku_path, "optics_si_settings.json")
128+
129+
if os.path.isfile(optics_si_settings_file_path_hwsku):
130+
optics_si_settings_file_path = optics_si_settings_file_path_hwsku
131+
elif os.path.isfile(optics_si_settings_file_path_platform):
132+
optics_si_settings_file_path = optics_si_settings_file_path_platform
133+
else:
127134
helper_logger.log_info("No optics SI file exists")
128135
return {}
129136

0 commit comments

Comments
 (0)