Skip to content

Commit b87b7ba

Browse files
authored
Merge pull request #42 from mssonicbld/sonicbld/202506-merge
```<br>* f706844 - (HEAD -> 202506) Merge branch '202505' of https://github.com/sonic-net/sonic-platform-daemons into 202506 (2025-09-01) [Sonic Automation] * 9a2931d - (origin/202505) Check low power mode before vdm handling (#670) (2025-09-01) [mssonicbld]<br>```
2 parents d82a36d + f706844 commit b87b7ba

3 files changed

Lines changed: 37 additions & 1 deletion

File tree

sonic-xcvrd/tests/test_xcvrd.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3453,6 +3453,7 @@ def test_DomInfoUpdateTask_task_worker(self, mock_post_pm_info,
34533453
task.status_db_utils.post_port_transceiver_hw_status_to_db = MagicMock()
34543454
task.status_db_utils.post_port_transceiver_hw_status_flags_to_db = MagicMock()
34553455
task.vdm_utils.is_transceiver_vdm_supported = MagicMock(return_value=True)
3456+
task.xcvrd_utils.is_transceiver_lpmode_on = MagicMock(return_value=False)
34563457
task.vdm_db_utils = MagicMock()
34573458
task.vdm_db_utils.post_port_vdm_real_values_to_db = MagicMock()
34583459
task.task_worker()
@@ -3517,6 +3518,7 @@ def test_DomInfoUpdateTask_task_worker_vdm_failure(self, mock_post_pm_info):
35173518
task.vdm_utils._unfreeze_vdm_stats_and_confirm = MagicMock(return_value=True)
35183519
task.vdm_db_utils.post_port_vdm_real_values_to_db = MagicMock()
35193520
task.vdm_db_utils.post_port_vdm_flags_to_db = MagicMock()
3521+
task.xcvrd_utils.is_transceiver_lpmode_on = MagicMock(return_value=False)
35203522
task.task_worker()
35213523
assert task.vdm_utils._unfreeze_vdm_stats_and_confirm.call_count == 1
35223524
assert task.vdm_db_utils.post_port_vdm_real_values_to_db.call_count == 0
@@ -4478,6 +4480,33 @@ def test_is_transceiver_flat_memory(self):
44784480
mock_api.is_flat_memory = MagicMock(side_effect=NotImplementedError)
44794481
assert xcvrd_util.is_transceiver_flat_memory(1)
44804482

4483+
def test_is_transceiver_lpmode_on(self):
4484+
from xcvrd.xcvrd_utilities.utils import XCVRDUtils
4485+
mock_sfp = MagicMock()
4486+
xcvrd_util = XCVRDUtils({1: mock_sfp}, MagicMock())
4487+
4488+
# Test case where get_xcvr_api returns None
4489+
mock_sfp.get_lpmode = MagicMock(return_value=None)
4490+
assert not xcvrd_util.is_transceiver_lpmode_on(1)
4491+
4492+
# Test case where get_lpmode returns True
4493+
mock_sfp.get_lpmode = MagicMock(return_value=True)
4494+
assert xcvrd_util.is_transceiver_lpmode_on(1)
4495+
4496+
# Test case where get_lpmode returns False
4497+
4498+
mock_sfp.get_lpmode = MagicMock(return_value=False)
4499+
assert not xcvrd_util.is_transceiver_lpmode_on(1)
4500+
4501+
# Test case where get_xcvr_api raises KeyError
4502+
xcvrd_util.sfp_obj_dict = {}
4503+
assert not xcvrd_util.is_transceiver_lpmode_on(1)
4504+
4505+
# Test case where is_flat_memory raises NotImplementedError
4506+
xcvrd_util.sfp_obj_dict = {1: mock_sfp}
4507+
mock_sfp.get_lpmode = MagicMock(side_effect=NotImplementedError)
4508+
assert not xcvrd_util.is_transceiver_lpmode_on(1)
4509+
44814510
@patch('time.sleep', MagicMock())
44824511
@patch('xcvrd.xcvrd.XcvrTableHelper', MagicMock())
44834512
@patch('xcvrd.xcvrd._wrapper_soak_sfp_insert_event', MagicMock())

sonic-xcvrd/xcvrd/dom/dom_mgr.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,7 @@ def task_worker(self):
303303
self.log_warning("Got exception {} while processing transceiver status hw flags for "
304304
"port {}, ignored".format(repr(e), logical_port_name))
305305
continue
306-
if self.vdm_utils.is_transceiver_vdm_supported(physical_port):
306+
if self.vdm_utils.is_transceiver_vdm_supported(physical_port) and (not self.xcvrd_utils.is_transceiver_lpmode_on(physical_port)):
307307
# Freeze VDM stats before reading VDM values
308308
with self.vdm_utils.vdm_freeze_context(physical_port) as vdm_frozen:
309309
if not vdm_frozen:

sonic-xcvrd/xcvrd/xcvrd_utilities/utils.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,10 @@ def is_transceiver_flat_memory(self, physical_port):
2323
except (KeyError, NotImplementedError):
2424
self.logger.log_error(f"Failed to check flat memory for port {physical_port}")
2525
return True
26+
27+
def is_transceiver_lpmode_on(self, physical_port):
28+
try:
29+
return self.sfp_obj_dict[physical_port].get_lpmode()
30+
except Exception as e:
31+
self.logger.log_error(f"Failed to get low power mode for port {physical_port}. Exception: {e}")
32+
return False

0 commit comments

Comments
 (0)