Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Independent Module - platform-daemon code to support port SI configuration per speed #3

Open
wants to merge 41 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 22 commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
ba78303
xcvrd changes to configure modules with logs
tshalvi Sep 11, 2023
f0f0489
sonic-platform-daemons changes before moving to combined codebase
tshalvi Sep 18, 2023
30bd3e4
pre-arrangement commit with temporary logs
tshalvi Sep 21, 2023
abddbca
platform-daemon code to support port SI configuration for the Indepen…
tshalvi Sep 22, 2023
f088df6
refactoring and removing redundant spaces
tshalvi Sep 22, 2023
d3f9653
removed redundant spaces
tshalvi Sep 22, 2023
62fea72
Removing redundant comments and spaces
tshalvi Sep 26, 2023
f43df10
removed redundant spaces and removed optics_si_settings.json from commit
tshalvi Sep 26, 2023
5d3b5c0
Replacing wrong print with the relevant log
tshalvi Sep 26, 2023
d186d88
removing redundant spaces and comments
tshalvi Sep 26, 2023
6f8b658
Removed redundant spaces and comments
tshalvi Sep 26, 2023
6525e33
Removed redundant spaces
tshalvi Sep 26, 2023
ad4a4e0
Removed TODOs and redudant spaces
tshalvi Sep 26, 2023
88b40b9
Fixes for existing unit tests
tshalvi Oct 1, 2023
2b4fe20
Fixes after CR with comments
tshalvi Oct 4, 2023
a247905
Removing redundant comments
tshalvi Oct 4, 2023
3ac3f1f
Removing redundant spaces
tshalvi Oct 4, 2023
ffc026f
Fixing existing tests after merging duplicated function get_cmis_appl…
tshalvi Oct 4, 2023
6b88870
Fixes after PR #2
tshalvi Oct 8, 2023
9d86e59
Fixed tuple-instead-of-list test issue
tshalvi Oct 11, 2023
c2ac376
Refactoring for the function get_cmis_application_desired()
tshalvi Oct 11, 2023
404e6ff
Removing log
tshalvi Oct 12, 2023
1a7bd24
Moving media_settings.json functionality to a separate file and updat…
tshalvi Oct 16, 2023
a78b4aa
Updating xcvrd test to work with media_settings_parser and moved the …
tshalvi Oct 17, 2023
de99228
Changed some logs in media_settings_parser from log_error to log_debug
tshalvi Oct 17, 2023
50ad9b2
Adding a docstring to describe media_settings_parser's functionality
tshalvi Oct 22, 2023
08a80ee
Added new unit test - test_get_speed_and_lane_count
tshalvi Oct 26, 2023
0690bf5
Added new unit test to meet coverage reqirement (test_is_si_per_speed…
tshalvi Oct 29, 2023
f6ec4f3
Updated CMIS module verification with the new method is_cmis_api()
tshalvi Nov 6, 2023
1ff6b55
Updated the test for get_media_settings_key() after the latest change…
tshalvi Nov 7, 2023
2b64b84
Refined Logs per CR Recommendations
tshalvi Nov 12, 2023
be29382
Tomer: modified log level of the log printed when no data is found in…
tshalvi Nov 19, 2023
dde725b
Added new unit tests for media_settings_parser.get_media_settings_val…
tshalvi Nov 20, 2023
721b29c
Added a new json for used in some unit test
tshalvi Nov 20, 2023
fac5bb2
Revert redundant changes in port_mapping (pushed by mistake)
tshalvi Nov 20, 2023
0c386aa
Fixed the indexes used for lookup in media_settings.json
tshalvi Nov 26, 2023
b5c8c0a
Added a unit test: test_get_media_settings_value()
tshalvi Nov 26, 2023
6d0142b
Added new unit test - test_load_media_settings
tshalvi Nov 26, 2023
cc91f93
Fix for load_media_settings tests
tshalvi Nov 26, 2023
03fbb09
Merge branch 'master' into code_for_CR3
tshalvi Nov 27, 2023
cef8ffc
Merge branch 'master' into code_for_CR3
tshalvi Nov 30, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 42 additions & 7 deletions sonic-xcvrd/tests/test_xcvrd.py
Original file line number Diff line number Diff line change
Expand Up @@ -428,7 +428,27 @@ 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)

def test_get_media_settings_key(self):
@patch('xcvrd.xcvrd.platform_chassis')
@patch('xcvrd.xcvrd.is_cmis_api', MagicMock(return_value=True))
def test_get_media_settings_key(self, mock_chassis):
mock_sfp = MagicMock()
mock_chassis.get_sfp = MagicMock(return_value=mock_sfp)
mock_api = MagicMock()
mock_sfp.get_xcvr_api = MagicMock(return_value=mock_api)

mock_app_adv_value ={
1: {'host_electrical_interface_id': '400G CR8', 'module_media_interface_id': 'Copper cable', 'media_lane_count': 8, 'host_lane_count': 8, 'host_lane_assignment_options': 1},
2: {'host_electrical_interface_id': '200GBASE-CR4 (Clause 136)', 'module_media_interface_id': 'Copper cable', 'media_lane_count': 4, 'host_lane_count': 4, 'host_lane_assignment_options': 17},
3: {'host_electrical_interface_id': '100GBASE-CR2 (Clause 136)', 'module_media_interface_id': 'Copper cable', 'media_lane_count': 2, 'host_lane_count': 2, 'host_lane_assignment_options': 85},
4: {'host_electrical_interface_id': '100GBASE-CR4 (Clause 92)', 'module_media_interface_id': 'Copper cable', 'media_lane_count': 4, 'host_lane_count': 4, 'host_lane_assignment_options': 17},
5: {'host_electrical_interface_id': '50GBASE-CR (Clause 126)', 'module_media_interface_id': 'Copper cable', 'media_lane_count': 1, 'host_lane_count': 1, 'host_lane_assignment_options': 255},
6: {'host_electrical_interface_id': '40GBASE-CR4 (Clause 85)', 'module_media_interface_id': 'Copper cable', 'media_lane_count': 4, 'host_lane_count': 4, 'host_lane_assignment_options': 17},
7: {'host_electrical_interface_id': '25GBASE-CR CA-N (Clause 110)', 'module_media_interface_id': 'Copper cable', 'media_lane_count': 1, 'host_lane_count': 1, 'host_lane_assignment_options': 255},
8: {'host_electrical_interface_id': '1000BASE -CX(Clause 39)', 'module_media_interface_id': 'Copper cable', 'media_lane_count': 1, 'host_lane_count': 1, 'host_lane_assignment_options': 255}
}

mock_api.get_application_advertisement = MagicMock(return_value=mock_app_adv_value)

xcvr_info_dict = {
0: {
'manufacturer': 'Molex',
Expand All @@ -441,27 +461,39 @@ def test_get_media_settings_key(self):
}

# Test a good 'specification_compliance' value
result = get_media_settings_key(0, xcvr_info_dict)
assert result == ['MOLEX-1064141421', 'QSFP+-10GBase-SR-255M']
result = get_media_settings_key(0, xcvr_info_dict, 100000, 2)
assert result == ('MOLEX-1064141421', 'QSFP+-10GBase-SR-255M', 'speed:100GBASE-CR2')

# Test a bad 'specification_compliance' value
xcvr_info_dict[0]['specification_compliance'] = 'N/A'
result = get_media_settings_key(0, xcvr_info_dict)
assert result == ['MOLEX-1064141421', 'QSFP+-*']
result = get_media_settings_key(0, xcvr_info_dict, 100000, 2)
assert result == ('MOLEX-1064141421', 'QSFP+-*', 'speed:100GBASE-CR2')
# TODO: Ensure that error message was logged

@patch('xcvrd.xcvrd.g_dict', media_settings_dict)
@patch('xcvrd.xcvrd._wrapper_get_presence', MagicMock(return_value=True))
@patch('xcvrd.xcvrd.XcvrTableHelper', MagicMock())
@patch('xcvrd.xcvrd.XcvrTableHelper.get_cfg_port_tbl', MagicMock())
@patch('xcvrd.xcvrd.get_media_settings_key', MagicMock(return_value=('MOLEX-1064141421', 'QSFP+-10GBase-SR-255M', 'speed:100GBASE-CR2')))
@patch('xcvrd.xcvrd.get_speed_and_lane_count', MagicMock(return_value=(100000, 2)))
def test_notify_media_setting(self):
self._check_notify_media_setting(1)

@patch('xcvrd.xcvrd.g_dict', media_settings_with_comma_dict)
@patch('xcvrd.xcvrd._wrapper_get_presence', MagicMock(return_value=True))
@patch('xcvrd.xcvrd.XcvrTableHelper', MagicMock())
@patch('xcvrd.xcvrd.XcvrTableHelper.get_cfg_port_tbl', MagicMock())
@patch('xcvrd.xcvrd.get_media_settings_key', MagicMock(return_value=('MOLEX-1064141421', 'QSFP+-10GBase-SR-255M', 'speed:100GBASE-CR2')))
@patch('xcvrd.xcvrd.get_speed_and_lane_count', MagicMock(return_value=(100000, 2)))
def test_notify_media_setting_with_comma(self):
self._check_notify_media_setting(1)
self._check_notify_media_setting(6)

def _check_notify_media_setting(self, index):
xcvr_table_helper = XcvrTableHelper(DEFAULT_NAMESPACE)
cfg_port_tbl = MagicMock()
mock_cfg_table = xcvr_table_helper.get_cfg_port_tbl = MagicMock(return_value=cfg_port_tbl)

logical_port_name = 'Ethernet0'
xcvr_info_dict = {
index: {
Expand All @@ -477,7 +509,7 @@ def _check_notify_media_setting(self, index):
port_mapping = PortMapping()
port_change_event = PortChangeEvent('Ethernet0', index, 0, PortChangeEvent.PORT_ADD)
port_mapping.handle_port_change_event(port_change_event)
notify_media_setting(logical_port_name, xcvr_info_dict, app_port_tbl, port_mapping)
notify_media_setting(logical_port_name, xcvr_info_dict, app_port_tbl, mock_cfg_table, port_mapping)

@patch('xcvrd.xcvrd_utilities.optics_si_parser.g_optics_si_dict', optics_si_settings_dict)
@patch('xcvrd.xcvrd._wrapper_get_presence', MagicMock(return_value=True))
Expand Down Expand Up @@ -760,6 +792,7 @@ def get_application(lane):

assert task.is_cmis_application_update_required(mock_xcvr_api, app_new, host_lanes_mask) == expected

@patch('xcvrd.xcvrd.is_cmis_api', MagicMock(return_value=True))
@pytest.mark.parametrize("host_lane_count, speed, subport, expected", [
(8, 400000, 0, 0xFF),
(4, 100000, 1, 0xF),
Expand Down Expand Up @@ -803,7 +836,7 @@ def get_host_lane_assignment_option_side_effect(app):
stop_event = threading.Event()
task = CmisManagerTask(DEFAULT_NAMESPACE, port_mapping, stop_event)

appl = task.get_cmis_application_desired(mock_xcvr_api, host_lane_count, speed)
appl = get_cmis_application_desired(mock_xcvr_api, host_lane_count, speed)
assert task.get_cmis_host_lanes_mask(mock_xcvr_api, appl, host_lane_count, subport) == expected

def test_CmisManagerTask_post_port_active_apsel_to_db(self):
Expand Down Expand Up @@ -894,6 +927,7 @@ def test_CmisManagerTask_post_port_active_apsel_to_db(self):
@patch('xcvrd.xcvrd_utilities.port_mapping.handle_port_update_event', MagicMock())
@patch('xcvrd.xcvrd._wrapper_get_sfp_type', MagicMock(return_value='QSFP_DD'))
@patch('xcvrd.xcvrd.CmisManagerTask.wait_for_port_config_done', MagicMock())
@patch('xcvrd.xcvrd.is_cmis_api', MagicMock(return_value=True))
def test_CmisManagerTask_task_worker(self, mock_chassis):
mock_xcvr_api = MagicMock()
mock_xcvr_api.set_datapath_deinit = MagicMock(return_value=True)
Expand Down Expand Up @@ -1168,6 +1202,7 @@ def test_SfpStateUpdateTask_task_run_stop(self):

@patch('xcvrd.xcvrd.XcvrTableHelper', MagicMock())
@patch('xcvrd.xcvrd.post_port_sfp_info_to_db')
@patch('xcvrd.xcvrd.XcvrTableHelper.get_cfg_port_tbl', MagicMock())
def test_SfpStateUpdateTask_retry_eeprom_reading(self, mock_post_sfp_info):
mock_table = MagicMock()
mock_table.get = MagicMock(return_value=(False, None))
Expand Down
Loading