Skip to content

Commit 7a046d6

Browse files
authored
[trim]: Fix GCU trimming eligibility modification (sonic-net#4087)
* [trim]: Fix GCU trimming eligibility modification Signed-off-by: Nazarii Hnydyn <[email protected]> * [trim]: Handle review comments Signed-off-by: Nazarii Hnydyn <[email protected]> --------- Signed-off-by: Nazarii Hnydyn <[email protected]>
1 parent f4e5de3 commit 7a046d6

File tree

3 files changed

+72
-8
lines changed

3 files changed

+72
-8
lines changed

generic_config_updater/field_operation_validators.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,10 @@ def rdma_config_update_validator(scope, patch_element):
170170
return rdma_config_update_validator_common(scope, patch_element, exact_field_match=True, remove_port=True)
171171

172172

173+
def buffer_profile_config_update_validator(scope, patch_element):
174+
return rdma_config_update_validator_common(scope, patch_element)
175+
176+
173177
def wred_profile_config_update_validator(scope, patch_element):
174178
return rdma_config_update_validator_common(scope, patch_element)
175179

generic_config_updater/gcu_field_operation_validators.conf.json

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -112,14 +112,18 @@
112112
}
113113
},
114114
"BUFFER_PROFILE": {
115-
"field_operation_validators": [ "generic_config_updater.field_operation_validators.rdma_config_update_validator" ],
115+
"field_operation_validators": [
116+
"generic_config_updater.field_operation_validators.buffer_profile_config_update_validator"
117+
],
116118
"validator_data": {
117119
"rdma_config_update_validator": {
118120
"Dynamic threshold tuning": {
119121
"fields": [
120122
"dynamic_th"
121123
],
122-
"operations": ["replace"],
124+
"operations": [
125+
"replace"
126+
],
123127
"platforms": {
124128
"spc1": "20181100",
125129
"spc2": "20191100",
@@ -144,7 +148,9 @@
144148
"fields": [
145149
"xoff"
146150
],
147-
"operations": ["replace"],
151+
"operations": [
152+
"replace"
153+
],
148154
"platforms": {
149155
"spc1": "20191100",
150156
"spc2": "20191100",
@@ -163,6 +169,20 @@
163169
"j2c+": "20220500",
164170
"cisco-8000": "20201200"
165171
}
172+
},
173+
"Packet trimming eligibility modification": {
174+
"fields": [
175+
"packet_discard_action"
176+
],
177+
"operations": [
178+
"add",
179+
"replace"
180+
],
181+
"platforms": {
182+
"spc4": "20241200",
183+
"spc5": "20241200",
184+
"th5": "20241200"
185+
}
166186
}
167187
}
168188
}

tests/generic_config_updater/field_operation_validator_test.py

Lines changed: 45 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
1+
import pytest
12
import mock
23
import unittest
34
import generic_config_updater
45
import generic_config_updater.field_operation_validators as fov
56
import generic_config_updater.gu_common as gu_common
67

7-
from unittest.mock import MagicMock, Mock, mock_open
8+
from unittest.mock import mock_open
89
from mock import patch
9-
from sonic_py_common.device_info import get_hwsku, get_sonic_version_info
1010

1111

12-
class TestValidateFieldOperation(unittest.TestCase):
12+
class TestValidateFieldOperation:
1313

1414
@patch("generic_config_updater.field_operation_validators.read_statedb_entry", mock.Mock(return_value=""))
1515
def test_port_config_update_validator_valid_speed_no_state_db(self):
@@ -233,6 +233,46 @@ def test_rdma_config_update_validator_td3_asic_invalid_version(self):
233233
assert generic_config_updater.field_operation_validators.\
234234
rdma_config_update_validator(scope, patch_element) is False
235235

236+
@pytest.mark.parametrize(
237+
"field,value,op", [
238+
pytest.param("xoff", "1000", "replace"),
239+
pytest.param("dynamic_th", "0", "replace"),
240+
pytest.param("packet_discard_action", "trim", "add"),
241+
pytest.param("packet_discard_action", "drop", "replace")
242+
]
243+
)
244+
@pytest.mark.parametrize(
245+
"asic", [
246+
"spc4",
247+
"spc5",
248+
"th5"
249+
]
250+
)
251+
@pytest.mark.parametrize(
252+
"scope", [
253+
"localhost",
254+
"asic0"
255+
]
256+
)
257+
def test_buffer_profile_config_update_validator(self, scope, asic, field, value, op):
258+
patch_element = {
259+
"path": "/BUFFER_PROFILE/sample_profile/{}".format(field),
260+
"op": op,
261+
"value": value
262+
}
263+
264+
with (
265+
patch(
266+
"generic_config_updater.field_operation_validators.get_asic_name",
267+
return_value=asic
268+
),
269+
patch(
270+
"sonic_py_common.device_info.get_sonic_version_info",
271+
return_value={"build_version": "SONiC.20241200"}
272+
)
273+
):
274+
assert fov.buffer_profile_config_update_validator(scope, patch_element) is True
275+
236276
@patch("sonic_py_common.device_info.get_sonic_version_info",
237277
mock.Mock(return_value={"build_version": "SONiC.20220530"}))
238278
@patch("generic_config_updater.field_operation_validators.get_asic_name",
@@ -453,7 +493,7 @@ def test_validate_field_operation_illegal__pfcwd(self):
453493
old_config = {"PFC_WD": {"GLOBAL": {"POLL_INTERVAL": "60"}}}
454494
target_config = {"PFC_WD": {"GLOBAL": {}}}
455495
config_wrapper = gu_common.ConfigWrapper()
456-
self.assertRaises(
496+
pytest.raises(
457497
gu_common.IllegalPatchOperationError,
458498
config_wrapper.validate_field_operation,
459499
old_config,
@@ -494,7 +534,7 @@ def test_validate_field_operation_illegal__rm_loopback0(self):
494534
}
495535
}
496536
config_wrapper = gu_common.ConfigWrapper()
497-
self.assertRaises(
537+
pytest.raises(
498538
gu_common.IllegalPatchOperationError,
499539
config_wrapper.validate_field_operation,
500540
old_config,

0 commit comments

Comments
 (0)