Skip to content

Commit d80ec97

Browse files
siqbal1986isabelmsft
authored andcommitted
Fixed a bug in "show vnet routes all" causing screen overrun. (sonic-net#2644)
Signed-off-by: siqbal1486 <shahzad.iqbal@microsoft.com>
1 parent 6b56716 commit d80ec97

File tree

5 files changed

+84
-29
lines changed

5 files changed

+84
-29
lines changed

show/vnet.py

+34-6
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,29 @@ def routes():
333333
"""Show vnet routes related information"""
334334
pass
335335

336+
def pretty_print(table, r, epval, mac_addr, vni, state):
337+
endpoints = epval.split(',')
338+
row_width = 3
339+
max_len = 0
340+
for ep in endpoints:
341+
max_len = len(ep) if len(ep) > max_len else max_len
342+
if max_len > 15:
343+
row_width = 2
344+
iter = 0
345+
while iter < len(endpoints):
346+
if iter +row_width > len(endpoints):
347+
r.append(",".join(endpoints[iter:]))
348+
else:
349+
r.append(",".join(endpoints[iter:iter + row_width]))
350+
if iter == 0:
351+
r.append(mac_addr)
352+
r.append(vni)
353+
r.append(state)
354+
else:
355+
r.extend(["", "", ""])
356+
iter += row_width
357+
table.append(r)
358+
r = ["",""]
336359

337360
@routes.command()
338361
def all():
@@ -373,12 +396,17 @@ def all():
373396
state_db_key = '|'.join(k.split(":",2))
374397
val = appl_db.get_all(appl_db.APPL_DB, k)
375398
val_state = state_db.get_all(state_db.STATE_DB, state_db_key)
376-
r.append(val.get('endpoint'))
377-
r.append(val.get('mac_address'))
378-
r.append(val.get('vni'))
379-
if val_state:
380-
r.append(val_state.get('state'))
381-
table.append(r)
399+
epval = val.get('endpoint')
400+
if len(epval) < 40:
401+
r.append(epval)
402+
r.append(val.get('mac_address'))
403+
r.append(val.get('vni'))
404+
if val_state:
405+
r.append(val_state.get('state'))
406+
table.append(r)
407+
continue
408+
state = val_state.get('state') if val_state else ""
409+
pretty_print(table, r, epval, val.get('mac_address'), val.get('vni'), state )
382410

383411
click.echo(tabulate(table, header))
384412

tests/mock_tables/appl_db.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -329,8 +329,8 @@
329329
"endpoint_monitor":"100.251.7.1"
330330
},
331331
"VNET_ROUTE_TUNNEL_TABLE:Vnet_v6_in_v6-0:fddd:a156:a251::a6:1/128": {
332-
"endpoint": "fddd:a100:a251::a10:1,fddd:a101:a251::a10:1",
333-
"endpoint_monitor":"fddd:a100:a251::a10:1,fddd:a101:a251::a10:1"
332+
"endpoint": "fddd:a100:a251::a10:1,fddd:a101:a251::a10:1,fddd:a102:a251::a10:1,fddd:a103:a251::a10:1",
333+
"endpoint_monitor":"fddd:a100:a251::a10:1,fddd:a101:a251::a10:1,fddd:a102:a251::a10:1,fddd:a103:a251::a10:1"
334334
},
335335
"VNET_ROUTE_TUNNEL_TABLE:test_v4_in_v4-0:160.162.191.1/32": {
336336
"endpoint":"100.251.7.1",

tests/mock_tables/state_db.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1086,7 +1086,7 @@
10861086
"state":"active"
10871087
},
10881088
"VNET_ROUTE_TUNNEL_TABLE|Vnet_v6_in_v6-0|fddd:a156:a251::a6:1/128": {
1089-
"active_endpoints":"fddd:a100:a251::a10:1,fddd:a101:a251::a10:1",
1089+
"active_endpoints":"fddd:a100:a251::a10:1,fddd:a101:a251::a10:1,fddd:a102:a251::a10:1,fddd:a103:a251::a10:1",
10901090
"state":"active"
10911091
},
10921092
"BFD_SESSION_TABLE|default|default|100.251.7.1": {

tests/show_vnet_test.py

+45
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,57 @@
22
from click.testing import CliRunner
33
from utilities_common.db import Db
44
import show.main as show
5+
import show.vnet as vnet
56

67
class TestShowVnetRoutesAll(object):
78
@classmethod
89
def setup_class(cls):
910
print("SETUP")
1011
os.environ["UTILITIES_UNIT_TESTING"] = "1"
1112

13+
def test_Preety_print(self):
14+
table =[]
15+
row = ["Vnet_v6_in_v6-0", "fddd:a156:a251::a6:1/128"]
16+
mac_addr = ""
17+
vni = ""
18+
state = "active"
19+
epval = "fddd:a100:a251::a10:1,fddd:a101:a251::a10:1"
20+
21+
vnet.pretty_print(table, row, epval, mac_addr, vni, state)
22+
expected_output = [['Vnet_v6_in_v6-0', 'fddd:a156:a251::a6:1/128', 'fddd:a100:a251::a10:1,fddd:a101:a251::a10:1', '', '', 'active']]
23+
assert table == expected_output
24+
25+
table =[]
26+
row = ["Vnet_v6_in_v6-0", "fddd:a156:a251::a6:1/128"]
27+
epval = "fddd:a100:a251::a10:1,fddd:a101:a251::a10:1,fddd:a100:a251::a11:1,fddd:a100:a251::a12:1,fddd:a100:a251::a13:1"
28+
vnet.pretty_print(table, row, epval, mac_addr, vni, state)
29+
expected_output = [
30+
['Vnet_v6_in_v6-0', 'fddd:a156:a251::a6:1/128', 'fddd:a100:a251::a10:1,fddd:a101:a251::a10:1', '', '', 'active'],
31+
['', '', 'fddd:a100:a251::a11:1,fddd:a100:a251::a12:1', '', '', ''],
32+
['', '', 'fddd:a100:a251::a13:1', '', '', '']
33+
]
34+
assert table == expected_output
35+
36+
table =[]
37+
row = ["Vnet_v6_in_v6-0", "fddd:a156:a251::a6:1/128"]
38+
epval = "192.168.1.1,192.168.1.2,192.168.1.3,192.168.1.4,192.168.1.5,192.168.1.6,192.168.1.7,192.168.1.8,192.168.1.9,192.168.1.10,192.168.1.11,192.168.1.12,192.168.1.13,192.168.1.14,192.168.1.15"
39+
vnet.pretty_print(table, row, epval, mac_addr, vni, state)
40+
expected_output =[
41+
['Vnet_v6_in_v6-0', 'fddd:a156:a251::a6:1/128', '192.168.1.1,192.168.1.2,192.168.1.3', '', '', 'active'],
42+
['', '', '192.168.1.4,192.168.1.5,192.168.1.6', '', '', ''],
43+
['', '', '192.168.1.7,192.168.1.8,192.168.1.9', '', '', ''],
44+
['', '', '192.168.1.10,192.168.1.11,192.168.1.12', '', '', ''],
45+
['', '', '192.168.1.13,192.168.1.14,192.168.1.15', '', '', '']]
46+
assert table == expected_output
47+
48+
table =[]
49+
row = ["Vnet_v6_in_v6-0", "fddd:a156:a251::a6:1/128"]
50+
epval = "192.168.1.1"
51+
vnet.pretty_print(table, row, epval, mac_addr, vni, state)
52+
expected_output =[
53+
['Vnet_v6_in_v6-0', 'fddd:a156:a251::a6:1/128', '192.168.1.1', '', '', 'active']]
54+
assert table == expected_output
55+
1256
def test_show_vnet_routes_all_basic(self):
1357
runner = CliRunner()
1458
db = Db()
@@ -22,6 +66,7 @@ def test_show_vnet_routes_all_basic(self):
2266
vnet name prefix endpoint mac address vni status
2367
--------------- ------------------------ ------------------------------------------- ------------- ----- --------
2468
Vnet_v6_in_v6-0 fddd:a156:a251::a6:1/128 fddd:a100:a251::a10:1,fddd:a101:a251::a10:1 active
69+
fddd:a102:a251::a10:1,fddd:a103:a251::a10:1
2570
test_v4_in_v4-0 160.162.191.1/32 100.251.7.1 active
2671
test_v4_in_v4-0 160.163.191.1/32 100.251.7.1 active
2772
test_v4_in_v4-0 160.164.191.1/32 100.251.7.1

tests/show_vnet_vxlan_cli_test.py

+2-20
Original file line numberDiff line numberDiff line change
@@ -9,32 +9,12 @@
99

1010
#test_path = os.path.dirname(os.path.abspath(__file__))
1111

12-
13-
1412
class TestShowVnet(object):
1513
@classmethod
1614
def setup_class(cls):
1715
print("SETUP")
1816
os.environ["UTILITIES_UNIT_TESTING"] = "1"
1917

20-
def test_show_vnet_routes_all_basic(self):
21-
runner = CliRunner()
22-
db = Db()
23-
result = runner.invoke(show.cli.commands['vnet'].commands['routes'].commands['all'], [], obj=db)
24-
assert result.exit_code == 0
25-
expected_output = """\
26-
vnet name prefix nexthop interface
27-
----------- -------- --------- -----------
28-
29-
vnet name prefix endpoint mac address vni status
30-
--------------- ------------------------ ------------------------------------------- ------------- ----- --------
31-
Vnet_v6_in_v6-0 fddd:a156:a251::a6:1/128 fddd:a100:a251::a10:1,fddd:a101:a251::a10:1 active
32-
test_v4_in_v4-0 160.162.191.1/32 100.251.7.1 active
33-
test_v4_in_v4-0 160.163.191.1/32 100.251.7.1 active
34-
test_v4_in_v4-0 160.164.191.1/32 100.251.7.1
35-
"""
36-
assert result.output == expected_output
37-
3818
def test_show_vnet_endpoint(self):
3919
runner = CliRunner()
4020
db = Db()
@@ -45,6 +25,8 @@ def test_show_vnet_endpoint(self):
4525
--------------------- --------------------- -------------- --------
4626
fddd:a100:a251::a10:1 fddd:a100:a251::a10:1 1 Unknown
4727
fddd:a101:a251::a10:1 fddd:a101:a251::a10:1 1 Down
28+
fddd:a102:a251::a10:1 fddd:a102:a251::a10:1 1 Unknown
29+
fddd:a103:a251::a10:1 fddd:a103:a251::a10:1 1 Unknown
4830
100.251.7.1 100.251.7.1 3 Up
4931
"""
5032
assert result.output == expected_output

0 commit comments

Comments
 (0)