Skip to content

Commit 8460721

Browse files
stephenxsyxieca
authored andcommitted
Fix issues in cmis.get_transceiver_bulk_status (#351)
* Fix issue in cmis.get_transceiver_bulk_status 1. In case it fails to read EEPROM, either self.get_rx_power() or self.get_tx_power() can be a list of 'N/A'. Need to test it before calling self.mw_to_dbm 2. It should be a valid case for either self.get_rx_power() or self.get_tx_power() to return None. Handle other fields instead of returning None in this case Signed-off-by: Stephen Sun <[email protected]> * Address comments: distinguish scenarios between not supporting and reading failure Signed-off-by: Stephen Sun <[email protected]> * Adjust unit test case Signed-off-by: Stephen Sun <[email protected]> * Remove redundant code Signed-off-by: Stephen Sun <[email protected]> --------- Signed-off-by: Stephen Sun <[email protected]>
1 parent c441bd7 commit 8460721

2 files changed

Lines changed: 29 additions & 13 deletions

File tree

sonic_platform_base/sonic_xcvr/api/public/cmis.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -207,8 +207,8 @@ def get_transceiver_bulk_status(self):
207207
for i in range(1, self.NUM_CHANNELS + 1):
208208
bulk_status["tx%ddisable" % i] = tx_disable[i-1] if self.get_tx_disable_support() else 'N/A'
209209
bulk_status["tx%dbias" % i] = tx_bias[i - 1]
210-
bulk_status["rx%dpower" % i] = float("{:.3f}".format(self.mw_to_dbm(rx_power[i - 1]))) if self.get_rx_power_support() else 'N/A'
211-
bulk_status["tx%dpower" % i] = float("{:.3f}".format(self.mw_to_dbm(tx_power[i - 1]))) if self.get_tx_power_support() else 'N/A'
210+
bulk_status["rx%dpower" % i] = float("{:.3f}".format(self.mw_to_dbm(rx_power[i - 1]))) if rx_power[i - 1] != 'N/A' else 'N/A'
211+
bulk_status["tx%dpower" % i] = float("{:.3f}".format(self.mw_to_dbm(tx_power[i - 1]))) if tx_power[i - 1] != 'N/A' else 'N/A'
212212

213213
laser_temp_dict = self.get_laser_temperature()
214214
self.vdm_dict = self.get_vdm()
@@ -500,12 +500,12 @@ def get_tx_power(self):
500500
'''
501501
This function returns TX output power in mW on each media lane
502502
'''
503-
tx_power_support = self.get_tx_power_support()
504-
if tx_power_support is None:
505-
return None
506-
507503
tx_power = ["N/A" for _ in range(self.NUM_CHANNELS)]
508504

505+
tx_power_support = self.get_tx_power_support()
506+
if not tx_power_support:
507+
return tx_power
508+
509509
if tx_power_support:
510510
tx_power = self.xcvr_eeprom.read(consts.TX_POWER_FIELD)
511511
if tx_power is not None:
@@ -520,12 +520,12 @@ def get_rx_power(self):
520520
'''
521521
This function returns RX input power in mW on each media lane
522522
'''
523-
rx_power_support = self.get_rx_power_support()
524-
if rx_power_support is None:
525-
return None
526-
527523
rx_power = ["N/A" for _ in range(self.NUM_CHANNELS)]
528524

525+
rx_power_support = self.get_rx_power_support()
526+
if not rx_power_support:
527+
return rx_power
528+
529529
if rx_power_support:
530530
rx_power = self.xcvr_eeprom.read(consts.RX_POWER_FIELD)
531531
if rx_power is not None:

tests/sonic_xcvr/test_cmis.py

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -398,7 +398,7 @@ def test_get_tx_power_support(self, mock_response, expected):
398398
[0, 0, 0, 0, 0, 0, 0, 0]
399399
),
400400
([False, {'OpticalPowerTx1Field': 0}], ['N/A','N/A','N/A','N/A','N/A','N/A','N/A','N/A']),
401-
([None, None], None)
401+
([True, None], None)
402402
])
403403
def test_get_tx_power(self, mock_response, expected):
404404
self.api.get_tx_power_support = MagicMock()
@@ -433,7 +433,7 @@ def test_get_rx_power_support(self, mock_response, expected):
433433
[0, 0, 0, 0, 0, 0, 0, 0]
434434
),
435435
([False, {'OpticalPowerRx1Field': 0}], ['N/A','N/A','N/A','N/A','N/A','N/A','N/A','N/A']),
436-
([None, None], None)
436+
([True, None], None)
437437
])
438438
def test_get_rx_power(self, mock_response, expected):
439439
self.api.get_rx_power_support = MagicMock()
@@ -1266,9 +1266,25 @@ def test_get_transceiver_info(self, mock_response, expected):
12661266
'N/A',
12671267
50, 3.3,
12681268
['N/A', 'N/A', 'N/A', 'N/A', 'N/A', 'N/A', 'N/A', 'N/A'],
1269+
None,
1270+
None,
1271+
False, False, False, False, False, False,
1272+
{'monitor value': 40},
1273+
None,
1274+
],
1275+
None
1276+
),
1277+
(
1278+
[
12691279
['N/A', 'N/A', 'N/A', 'N/A', 'N/A', 'N/A', 'N/A', 'N/A'],
12701280
['N/A', 'N/A', 'N/A', 'N/A', 'N/A', 'N/A', 'N/A', 'N/A'],
1271-
False, False, False, False, False, False,
1281+
['N/A', 'N/A', 'N/A', 'N/A', 'N/A', 'N/A', 'N/A', 'N/A'],
1282+
'N/A',
1283+
50, 3.3,
1284+
['N/A', 'N/A', 'N/A', 'N/A', 'N/A', 'N/A', 'N/A', 'N/A'],
1285+
['N/A', 'N/A', 'N/A', 'N/A', 'N/A', 'N/A', 'N/A', 'N/A'],
1286+
['N/A', 'N/A', 'N/A', 'N/A', 'N/A', 'N/A', 'N/A', 'N/A'],
1287+
False, False, False, False, True, True,
12721288
{'monitor value': 40},
12731289
None,
12741290
],

0 commit comments

Comments
 (0)