Skip to content

Commit cb5564c

Browse files
authored
Create is_transceiver_vdm_supported API for CMIS transceivers (#527)
* Create is_transceiver_vdm_supported API for CMIS transceivers Signed-off-by: Mihir Patel <[email protected]> * Increased code coverage * Enhanced unit test in test_sfp_optoe_base.py --------- Signed-off-by: Mihir Patel <[email protected]>
1 parent bead25d commit cb5564c

File tree

5 files changed

+40
-0
lines changed

5 files changed

+40
-0
lines changed

sonic_platform_base/sonic_xcvr/api/public/cmis.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1511,6 +1511,12 @@ def set_loopback_mode(self, loopback_mode, lane_mask = 0xff, enable = False):
15111511
logger.error('Invalid loopback mode:%s, lane_mask:%#x', loopback_mode, lane_mask)
15121512
return False
15131513

1514+
def is_transceiver_vdm_supported(self):
1515+
'''
1516+
This function returns whether VDM is supported
1517+
'''
1518+
return self.vdm is not None and self.xcvr_eeprom.read(consts.VDM_SUPPORTED)
1519+
15141520
def get_vdm(self, field_option=None):
15151521
'''
15161522
This function returns all the VDM items, including real time monitor value, threholds and flags

sonic_platform_base/sonic_xcvr/api/xcvr_api.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,12 @@ def get_transceiver_status_flags(self):
257257
"""
258258
raise NotImplementedError
259259

260+
def is_transceiver_vdm_supported(self):
261+
"""
262+
Retrieves VDM support status for this xcvr (applicable for CMIS and C-CMIS)
263+
"""
264+
raise NotImplementedError
265+
260266
def get_transceiver_vdm_real_value(self):
261267
"""
262268
Retrieves VDM real (sample) values for this xcvr (applicable for CMIS and C-CMIS)

sonic_platform_base/sonic_xcvr/sfp_optoe_base.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,10 @@ def is_coherent_module(self):
5555
api = self.get_xcvr_api()
5656
return api.is_coherent_module() if api is not None else None
5757

58+
def is_transceiver_vdm_supported(self):
59+
api = self.get_xcvr_api()
60+
return api.is_transceiver_vdm_supported() if api is not None else None
61+
5862
def get_transceiver_vdm_real_value(self):
5963
"""
6064
Retrieves VDM real (sample) values for this xcvr (applicable for CMIS and C-CMIS)

tests/sonic_xcvr/test_cmis.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1244,6 +1244,20 @@ def test_set_loopback_mode(self, input_param, mock_response, expected):
12441244
result = self.api.set_loopback_mode(input_param[0], input_param[1])
12451245
assert result == expected
12461246

1247+
def test_is_transceiver_vdm_supported_no_vdm(self):
1248+
self.api.vdm = None
1249+
assert self.api.is_transceiver_vdm_supported() == False
1250+
1251+
def test_is_transceiver_vdm_supported_true(self):
1252+
self.api.vdm = MagicMock()
1253+
self.api.xcvr_eeprom.read = MagicMock(return_value=1)
1254+
assert self.api.is_transceiver_vdm_supported() == True
1255+
1256+
def test_is_transceiver_vdm_supported_false(self):
1257+
self.api.vdm = MagicMock()
1258+
self.api.xcvr_eeprom.read = MagicMock(return_value=0)
1259+
assert self.api.is_transceiver_vdm_supported() == False
1260+
12471261
@pytest.mark.parametrize("mock_response, expected",[
12481262
(
12491263
[

tests/sonic_xcvr/test_sfp_optoe_base.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from sonic_platform_base.sonic_xcvr.mem_maps.public.c_cmis import CCmisMemMap
99
from sonic_platform_base.sonic_xcvr.xcvr_eeprom import XcvrEeprom
1010
from sonic_platform_base.sonic_xcvr.codes.public.cmis import CmisCodes
11+
from sonic_platform_base.sonic_xcvr.api.public.sff8472 import Sff8472Api
1112

1213
class TestSfpOptoeBase(object):
1314

@@ -19,7 +20,16 @@ class TestSfpOptoeBase(object):
1920
sfp_optoe_api = SfpOptoeBase()
2021
ccmis_api = CCmisApi(eeprom)
2122
cmis_api = CmisApi(eeprom)
23+
sff8472_api = Sff8472Api(eeprom)
2224

25+
def test_is_transceiver_vdm_supported_non_cmis(self):
26+
self.sfp_optoe_api.get_xcvr_api = MagicMock(return_value=self.sff8472_api)
27+
try:
28+
self.sfp_optoe_api.is_transceiver_vdm_supported()
29+
except NotImplementedError:
30+
exception_raised = True
31+
assert exception_raised
32+
2333
@pytest.mark.parametrize("mock_response1, mock_response2, expected", [
2434
(0, cmis_api, 0),
2535
(1, cmis_api, 1),

0 commit comments

Comments
 (0)