Skip to content

Commit 34a7299

Browse files
committed
Fixed a bug in "show vnet routes all" causing screen overrun. (sonic-net#2644)
Signed-off-by: siqbal1486 <shahzad.iqbal@microsoft.com>
1 parent a996abd commit 34a7299

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
@@ -334,6 +334,29 @@ def routes():
334334
"""Show vnet routes related information"""
335335
pass
336336

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

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

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

tests/mock_tables/appl_db.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -210,8 +210,8 @@
210210
"endpoint_monitor":"100.251.7.1"
211211
},
212212
"VNET_ROUTE_TUNNEL_TABLE:Vnet_v6_in_v6-0:fddd:a156:a251::a6:1/128": {
213-
"endpoint": "fddd:a100:a251::a10:1,fddd:a101:a251::a10:1",
214-
"endpoint_monitor":"fddd:a100:a251::a10:1,fddd:a101:a251::a10:1"
213+
"endpoint": "fddd:a100:a251::a10:1,fddd:a101:a251::a10:1,fddd:a102:a251::a10:1,fddd:a103:a251::a10:1",
214+
"endpoint_monitor":"fddd:a100:a251::a10:1,fddd:a101:a251::a10:1,fddd:a102:a251::a10:1,fddd:a103:a251::a10:1"
215215
},
216216
"VNET_ROUTE_TUNNEL_TABLE:test_v4_in_v4-0:160.162.191.1/32": {
217217
"endpoint":"100.251.7.1",

tests/mock_tables/state_db.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -731,7 +731,7 @@
731731
"state":"active"
732732
},
733733
"VNET_ROUTE_TUNNEL_TABLE|Vnet_v6_in_v6-0|fddd:a156:a251::a6:1/128": {
734-
"active_endpoints":"fddd:a100:a251::a10:1,fddd:a101:a251::a10:1",
734+
"active_endpoints":"fddd:a100:a251::a10:1,fddd:a101:a251::a10:1,fddd:a102:a251::a10:1,fddd:a103:a251::a10:1",
735735
"state":"active"
736736
},
737737
"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)