Skip to content

Commit 8c81ae3

Browse files
author
Sangita Maity
authored
[breakout] Fix the check when port is not present in BREAKOUT_CFG table (sonic-net#1765)
#### What I did This PR fixed issue for [show interface breakout](sonic-net#7957) issue **Before this fix** removed `Ethernet60` from breakout_cfg table for unit testing and got the issue ```   admin@lnos-x1-a-asw04:~$ sudo redis-cli -n 4 del "BREAKOUT_CFG|Ethernet60" (integer) 1 admin@lnos-x1-a-asw04:~$ sudo redis-cli -n 4 hgetall "BREAKOUT_CFG|Ethernet60" (empty array) admin@lnos-x1-a-asw04:~$ show int breakout Traceback (most recent call last):   File "/usr/local/bin/show", line 8, in <module>     sys.exit(cli())   File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 764, in __call__     return self.main(*args, **kwargs)   File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 717, in main     rv = self.invoke(ctx)   File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 1137, in invoke     return _process_result(sub_ctx.command.invoke(sub_ctx))   File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 1137, in invoke     return _process_result(sub_ctx.command.invoke(sub_ctx))   File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 1114, in invoke     return Command.invoke(self, ctx)   File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 956, in invoke     return ctx.invoke(self.callback, **ctx.params)   File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 555, in invoke     return callback(*args, **kwargs)   File "/usr/local/lib/python3.7/dist-packages/click/decorators.py", line 17, in new_func     return f(get_current_context(), *args, **kwargs)   File "/usr/local/lib/python3.7/dist-packages/show/interfaces/__init__.py", line 181, in breakout     cur_brkout_mode = cur_brkout_tbl[port_name]["brkout_mode"] KeyError: 'Ethernet60' ``` **After the fix** ``` admin@lnos-x1-a-asw04:~$ show int breakout current-mode Ethernet60 +-------------+-------------------------+ | Interface | Current Breakout Mode | +=============+=========================+ | Ethernet60 | Not Available | +-------------+-------------------------+ ``` #### How I did it Gracefully handle the error when port/interface is not present in `BREAKOUT_CFG` table. #### How to verify it ``` show interface breakout show int interface current-mode ``` **_Added unit test case for negetive Test case_**
1 parent bc8fe7c commit 8c81ae3

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

show/interfaces/__init__.py

+8-1
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,9 @@ def breakout(ctx):
203203
raise click.Abort()
204204

205205
for port_name in platform_dict:
206+
# Check whether port is available in `BREAKOUT_CFG` table or not
207+
if port_name not in cur_brkout_tbl:
208+
continue
206209
cur_brkout_mode = cur_brkout_tbl[port_name]["brkout_mode"]
207210

208211
# Update deafult breakout mode and current breakout mode to platform_dict
@@ -252,7 +255,11 @@ def currrent_mode(ctx, interface):
252255

253256
# Show current Breakout Mode of user prompted interface
254257
if interface is not None:
255-
body.append([interface, str(cur_brkout_tbl[interface]['brkout_mode'])])
258+
# Check whether interface is available in `BREAKOUT_CFG` table or not
259+
if interface in cur_brkout_tbl:
260+
body.append([interface, str(cur_brkout_tbl[interface]['brkout_mode'])])
261+
else:
262+
body.append([interface, "Not Available"])
256263
click.echo(tabulate(body, header, tablefmt="grid"))
257264
return
258265

tests/show_breakout_test.py

+16
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,16 @@
3535
+-------------+-------------------------+
3636
"""
3737

38+
# Negetive Test
39+
# Expected output for 'show breakout current-mode Ethernet60'
40+
current_mode_intf_output_Ethernet60 = ''+ \
41+
"""+-------------+-------------------------+
42+
| Interface | Current Breakout Mode |
43+
+=============+=========================+
44+
| Ethernet60 | Not Available |
45+
+-------------+-------------------------+
46+
"""
47+
3848
class TestBreakout(TestCase):
3949
@classmethod
4050
def setup_class(cls):
@@ -59,6 +69,12 @@ def test_single_intf_current_mode(self):
5969
print(sys.stderr, result.output)
6070
assert result.output == current_mode_intf_output
6171

72+
# Negetive Test 'show interfaces breakout current-mode Ethernet60'
73+
def test_single_intf_current_mode(self):
74+
result = self.runner.invoke(show.cli.commands["interfaces"].commands["breakout"].commands["current-mode"], ["Ethernet60"], obj=self.obj)
75+
print(sys.stderr, result.output)
76+
assert result.output == current_mode_intf_output_Ethernet60
77+
6278
@classmethod
6379
def teardown_class(cls):
6480
print("TEARDOWN")

0 commit comments

Comments
 (0)