Skip to content

Commit 47a9a0f

Browse files
[portconfig] Validate duplicate speed value and interface type value (sonic-net#1745)
#### What I did Validate input parameter for command `config interface advertised-speeds` and `config interface advertised-types`, make sure there is no duplicate speeds or types #### How I did it Split input speeds/types with "," and check if there is a duplication, if yes, print an error. #### How to verify it 1. new unit test case 2. manual test
1 parent f1086ee commit 47a9a0f

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

scripts/portconfig

+10-2
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,11 @@ class portconfig(object):
141141
supported_speeds_str = self.get_supported_speeds(port)
142142
if supported_speeds_str:
143143
supported_speeds = set(supported_speeds_str.split(','))
144-
config_speeds = set(adv_speeds.split(','))
144+
config_speed_list = [x.strip() for x in adv_speeds.split(',')]
145+
config_speeds = set(config_speed_list)
146+
if len(config_speeds) < len(config_speed_list):
147+
print('Invalid speed specified: {}. Please remove duplicate speed'.format(adv_speeds))
148+
exit(1)
145149
invalid_speeds = config_speeds - supported_speeds
146150
if invalid_speeds:
147151
print('Invalid speed specified: {}'.format(','.join(invalid_speeds)))
@@ -164,7 +168,11 @@ class portconfig(object):
164168
print("Setting adv_interface_types %s on port %s" % (adv_interface_types, port))
165169

166170
if adv_interface_types != 'all':
167-
config_interface_types = set(adv_interface_types.split(','))
171+
config_interface_type_list = [x.strip() for x in adv_interface_types.split(',')]
172+
config_interface_types = set(config_interface_type_list)
173+
if len(config_interface_types) < len(config_interface_type_list):
174+
print("Invalid interface type specified: {}. Please remove duplicate interface type".format(adv_interface_types))
175+
exit(1)
168176
invalid_interface_types = config_interface_types - VALID_INTERFACE_TYPE_SET
169177
if invalid_interface_types:
170178
print("Invalid interface type specified: {}".format(','.join(invalid_interface_types)))

tests/config_an_test.py

+6
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,9 @@ def test_config_adv_speeds(self, ctx):
5050
result = self.basic_check("advertised-speeds", ["Ethernet0", "50000,100000"], ctx, operator.ne)
5151
assert 'Invalid speed' in result.output
5252
assert 'Valid speeds:' in result.output
53+
result = self.basic_check("advertised-speeds", ["Ethernet0", "50000,50000"], ctx, operator.ne)
54+
assert 'Invalid speed' in result.output
55+
assert 'duplicate' in result.output
5356

5457
def test_config_type(self, ctx):
5558
self.basic_check("type", ["Ethernet0", "CR4"], ctx)
@@ -66,6 +69,9 @@ def test_config_adv_types(self, ctx):
6669
result = self.basic_check("advertised-types", ["Ethernet0", "CR4,Invalid"], ctx, operator.ne)
6770
assert 'Invalid interface type specified' in result.output
6871
assert 'Valid interface types:' in result.output
72+
result = self.basic_check("advertised-types", ["Ethernet0", "CR4,CR4"], ctx, operator.ne)
73+
assert 'Invalid interface type specified' in result.output
74+
assert 'duplicate' in result.output
6975
self.basic_check("advertised-types", ["Ethernet0", ""], ctx, operator.ne)
7076

7177
def basic_check(self, command_name, para_list, ctx, op=operator.eq, expect_result=0):

0 commit comments

Comments
 (0)