From 18c14d04469d631057ba30b24d70cd5e71576a22 Mon Sep 17 00:00:00 2001 From: Kebo Liu Date: Tue, 26 Mar 2024 12:54:36 +0200 Subject: [PATCH 1/3] support to get MEDIA_SETTING and OPTICS_SI from both platform folder and HWSKU folder --- .../xcvrd/xcvrd_utilities/media_settings_parser.py | 13 ++++++++++--- .../xcvrd/xcvrd_utilities/optics_si_parser.py | 13 ++++++++++--- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/sonic-xcvrd/xcvrd/xcvrd_utilities/media_settings_parser.py b/sonic-xcvrd/xcvrd/xcvrd_utilities/media_settings_parser.py index 078b8afef..9e79e6c7b 100644 --- a/sonic-xcvrd/xcvrd/xcvrd_utilities/media_settings_parser.py +++ b/sonic-xcvrd/xcvrd/xcvrd_utilities/media_settings_parser.py @@ -22,10 +22,17 @@ def load_media_settings(): global g_dict - (platform_path, _) = device_info.get_paths_to_platform_and_hwsku_dirs() + (platform_path, hwsku_path) = device_info.get_paths_to_platform_and_hwsku_dirs() - media_settings_file_path = os.path.join(platform_path, "media_settings.json") - if not os.path.isfile(media_settings_file_path): + # Support to fetch media_settings.json both from platform folder and HWSKU folder + media_settings_file_path_platform = os.path.join(platform_path, "media_settings.json") + media_settings_file_path_hwsku = os.path.join(hwsku_path, "media_settings.json") + + if os.path.isfile(media_settings_file_path_hwsku): + media_settings_file_path = media_settings_file_path_hwsku + elif os.path.isfile(media_settings_file_path_platform): + media_settings_file_path = media_settings_file_path_platform + else: helper_logger.log_info("xcvrd: No media file exists") return {} diff --git a/sonic-xcvrd/xcvrd/xcvrd_utilities/optics_si_parser.py b/sonic-xcvrd/xcvrd/xcvrd_utilities/optics_si_parser.py index fff418563..5960bb27b 100644 --- a/sonic-xcvrd/xcvrd/xcvrd_utilities/optics_si_parser.py +++ b/sonic-xcvrd/xcvrd/xcvrd_utilities/optics_si_parser.py @@ -120,10 +120,17 @@ def fetch_optics_si_setting(physical_port, lane_speed, sfp): def load_optics_si_settings(): global g_optics_si_dict - (platform_path, _) = device_info.get_paths_to_platform_and_hwsku_dirs() + (platform_path, hwsku_path) = device_info.get_paths_to_platform_and_hwsku_dirs() - optics_si_settings_file_path = os.path.join(platform_path, "optics_si_settings.json") - if not os.path.isfile(optics_si_settings_file_path): + # Support to fetch optics_si_settings.json both from platform folder and HWSKU folder + optics_si_settings_file_path_platform = os.path.join(platform_path, "optics_si_settings.json") + optics_si_settings_file_path_hwsku = os.path.join(hwsku_path, "optics_si_settings.json") + + if os.path.isfile(optics_si_settings_file_path_hwsku): + optics_si_settings_file_path = optics_si_settings_file_path_hwsku + elif os.path.isfile(optics_si_settings_file_path_platform): + optics_si_settings_file_path = optics_si_settings_file_path_platform + else: helper_logger.log_info("No optics SI file exists") return {} From 90a1af635114c04b443a3fe05e3f82edea15a9dd Mon Sep 17 00:00:00 2001 From: Kebo Liu Date: Mon, 1 Apr 2024 16:10:38 +0300 Subject: [PATCH 2/3] Add unit test cases Signed-off-by: Kebo Liu --- sonic-xcvrd/tests/test_xcvrd.py | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/sonic-xcvrd/tests/test_xcvrd.py b/sonic-xcvrd/tests/test_xcvrd.py index 568b19dd2..b9e8270d1 100644 --- a/sonic-xcvrd/tests/test_xcvrd.py +++ b/sonic-xcvrd/tests/test_xcvrd.py @@ -579,10 +579,14 @@ def test_init_port_sfp_status_tbl(self): task = SfpStateUpdateTask(DEFAULT_NAMESPACE, port_mapping, stop_event, sfp_error_event) task._init_port_sfp_status_tbl(port_mapping, xcvr_table_helper, stop_event) - @patch('sonic_py_common.device_info.get_paths_to_platform_and_hwsku_dirs', MagicMock(return_value=('/invalid/path', None))) + @patch('sonic_py_common.device_info.get_paths_to_platform_and_hwsku_dirs', MagicMock(return_value=('/invalid/path', '/invalid/path'))) def test_load_media_settings_missing_file(self): assert media_settings_parser.load_media_settings() == {} + @patch('sonic_py_common.device_info.get_paths_to_platform_and_hwsku_dirs', MagicMock(return_value=('/invalid/path', '/invalid/path'))) + def test_load_optical_si_settings_missing_file(self): + assert optics_si_parser.load_optics_si_settings() == {} + @patch('xcvrd.xcvrd.platform_chassis') @patch('xcvrd.xcvrd.is_cmis_api') def test_get_media_settings_key(self, mock_is_cmis_api, mock_chassis): @@ -2446,6 +2450,22 @@ def test_DaemonXcvrd_init_deinit_fastboot_enabled(self): xcvrd.init() xcvrd.deinit() + @patch('sonic_py_common.device_info.get_paths_to_platform_and_hwsku_dirs', MagicMock(return_value=(test_path, '/invalid/path'))) + def test_load_optical_si_file_from_platform_folder(self): + assert optics_si_parser.load_optics_si_settings() != {} + + @patch('sonic_py_common.device_info.get_paths_to_platform_and_hwsku_dirs', MagicMock(return_value=('/invalid/path', test_path))) + def test_load_optical_si_file_from_hwsku_folder(self): + assert optics_si_parser.load_optics_si_settings() != {} + + @patch('sonic_py_common.device_info.get_paths_to_platform_and_hwsku_dirs', MagicMock(return_value=(test_path, '/invalid/path'))) + def test_load_media_settings_file_from_platform_folder(self): + assert media_settings_parser.load_media_settings() != {} + + @patch('sonic_py_common.device_info.get_paths_to_platform_and_hwsku_dirs', MagicMock(return_value=('/invalid/path', test_path))) + def test_load_media_settings_file_from_hwsku_folder(self): + assert media_settings_parser.load_media_settings() != {} + def wait_until(total_wait_time, interval, call_back, *args, **kwargs): wait_time = 0 while wait_time <= total_wait_time: From 2d407ec308c302dcd5227686d448a69fd2438fe8 Mon Sep 17 00:00:00 2001 From: Kebo Liu Date: Tue, 9 Apr 2024 07:07:51 +0300 Subject: [PATCH 3/3] fix unit test failure Signed-off-by: Kebo Liu --- sonic-xcvrd/tests/test_xcvrd.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sonic-xcvrd/tests/test_xcvrd.py b/sonic-xcvrd/tests/test_xcvrd.py index cf82f07ea..5c7e9a0a8 100644 --- a/sonic-xcvrd/tests/test_xcvrd.py +++ b/sonic-xcvrd/tests/test_xcvrd.py @@ -2445,7 +2445,7 @@ class MockPortMapping: @patch('xcvrd.xcvrd.DaemonXcvrd.load_platform_util', MagicMock()) @patch('xcvrd.xcvrd_utilities.port_event_helper.get_port_mapping', MagicMock(return_value=MockPortMapping)) - @patch('sonic_py_common.device_info.get_paths_to_platform_and_hwsku_dirs', MagicMock(return_value=('/tmp', None))) + @patch('sonic_py_common.device_info.get_paths_to_platform_and_hwsku_dirs', MagicMock(return_value=('/tmp', '/tmp'))) @patch('swsscommon.swsscommon.WarmStart', MagicMock()) @patch('xcvrd.xcvrd.DaemonXcvrd.wait_for_port_config_done', MagicMock()) def test_DaemonXcvrd_init_deinit_fastboot_enabled(self): @@ -2468,7 +2468,7 @@ def test_DaemonXcvrd_init_deinit_fastboot_enabled(self): @patch('xcvrd.xcvrd.DaemonXcvrd.load_platform_util', MagicMock()) @patch('xcvrd.xcvrd_utilities.port_event_helper.get_port_mapping', MagicMock(return_value=MockPortMapping)) - @patch('sonic_py_common.device_info.get_paths_to_platform_and_hwsku_dirs', MagicMock(return_value=('/tmp', None))) + @patch('sonic_py_common.device_info.get_paths_to_platform_and_hwsku_dirs', MagicMock(return_value=('/tmp', '/tmp'))) @patch('xcvrd.xcvrd.is_warm_reboot_enabled', MagicMock(return_value=False)) @patch('xcvrd.xcvrd.DaemonXcvrd.wait_for_port_config_done', MagicMock()) @patch('subprocess.check_output', MagicMock(return_value='false'))