Skip to content

Commit f9d6df2

Browse files
romankachur-mlnxliat-grozovik
authored andcommitted
aclshow unittest (sonic-net#468)
Signed-off-by: Roman Kachur <[email protected]>
1 parent 30b971a commit f9d6df2

File tree

3 files changed

+324
-1
lines changed

3 files changed

+324
-1
lines changed

sonic-utilities-tests/aclshow_test.py

+214
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,214 @@
1+
import sys
2+
import os
3+
from StringIO import StringIO
4+
import mock
5+
6+
test_path = os.path.dirname(os.path.abspath(__file__))
7+
modules_path = os.path.dirname(test_path)
8+
scripts_path = os.path.join(modules_path, "scripts")
9+
sys.path.insert(0, modules_path)
10+
11+
from imp import load_source
12+
load_source('aclshow', scripts_path+'/aclshow')
13+
from aclshow import *
14+
15+
import mock_tables.dbconnector
16+
17+
# Expected output for aclshow
18+
default_output = ''+ \
19+
"""RULE NAME TABLE NAME PRIO PACKETS COUNT BYTES COUNT
20+
------------ ------------ ------ --------------- -------------
21+
RULE_1 DATAACL 9999 101 100
22+
RULE_2 DATAACL 9998 201 200
23+
RULE_3 DATAACL 9997 301 300
24+
RULE_4 DATAACL 9996 401 400
25+
RULE_7 DATAACL 9993 701 700
26+
RULE_9 DATAACL 9991 901 900
27+
DEFAULT_RULE DATAACL 1 2 1
28+
RULE_6 EVERFLOW 9994 601 600
29+
"""
30+
31+
# Expected output for aclshow -a
32+
all_output = '' + \
33+
"""RULE NAME TABLE NAME PRIO PACKETS COUNT BYTES COUNT
34+
------------ ------------ ------ --------------- -------------
35+
RULE_1 DATAACL 9999 101 100
36+
RULE_2 DATAACL 9998 201 200
37+
RULE_3 DATAACL 9997 301 300
38+
RULE_4 DATAACL 9996 401 400
39+
RULE_05 DATAACL 9995 0 0
40+
RULE_7 DATAACL 9993 701 700
41+
RULE_9 DATAACL 9991 901 900
42+
DEFAULT_RULE DATAACL 1 2 1
43+
RULE_6 EVERFLOW 9994 601 600
44+
RULE_08 EVERFLOW 9992 0 0
45+
"""
46+
47+
# Expected output for aclshow -r RULE_1 -t DATAACL
48+
rule1_dataacl_output = '' + \
49+
"""RULE NAME TABLE NAME PRIO PACKETS COUNT BYTES COUNT
50+
----------- ------------ ------ --------------- -------------
51+
RULE_1 DATAACL 9999 101 100
52+
"""
53+
54+
# Expected output for aclshow -a -r RULE_05
55+
rule05_all_output = ''+ \
56+
"""RULE NAME TABLE NAME PRIO PACKETS COUNT BYTES COUNT
57+
----------- ------------ ------ --------------- -------------
58+
RULE_05 DATAACL 9995 0 0
59+
"""
60+
61+
# Expected output for aclshow -r RULE_0
62+
rule0_output = '' + \
63+
"""RULE NAME TABLE NAME PRIO PACKETS COUNT BYTES COUNT
64+
----------- ------------ ------ --------------- -------------
65+
"""
66+
67+
# Expected output for aclshow -r RULE_4,RULE_6 -vv
68+
rule4_rule6_verbose_output = '' + \
69+
"""Reading ACL info...
70+
Total number of ACL Tables: 4
71+
Total number of ACL Rules: 10
72+
73+
RULE NAME TABLE NAME PRIO PACKETS COUNT BYTES COUNT
74+
----------- ------------ ------ --------------- -------------
75+
RULE_4 DATAACL 9996 401 400
76+
RULE_6 EVERFLOW 9994 601 600
77+
"""
78+
79+
# Expected output for aclshow -t EVERFLOW
80+
everflow_output = '' + \
81+
"""RULE NAME TABLE NAME PRIO PACKETS COUNT BYTES COUNT
82+
----------- ------------ ------ --------------- -------------
83+
RULE_6 EVERFLOW 9994 601 600
84+
"""
85+
86+
# Expected output for aclshow -t DATAACL
87+
dataacl_output = '' + \
88+
"""RULE NAME TABLE NAME PRIO PACKETS COUNT BYTES COUNT
89+
------------ ------------ ------ --------------- -------------
90+
RULE_1 DATAACL 9999 101 100
91+
RULE_2 DATAACL 9998 201 200
92+
RULE_3 DATAACL 9997 301 300
93+
RULE_4 DATAACL 9996 401 400
94+
RULE_7 DATAACL 9993 701 700
95+
RULE_9 DATAACL 9991 901 900
96+
DEFAULT_RULE DATAACL 1 2 1
97+
"""
98+
99+
# Expected output for aclshow -c
100+
clear_output = ''
101+
102+
# Expected output for
103+
# aclshow -a -c ; aclshow -a
104+
all_after_clear_output = '' + \
105+
"""RULE NAME TABLE NAME PRIO PACKETS COUNT BYTES COUNT
106+
------------ ------------ ------ --------------- -------------
107+
RULE_1 DATAACL 9999 0 0
108+
RULE_2 DATAACL 9998 0 0
109+
RULE_3 DATAACL 9997 0 0
110+
RULE_4 DATAACL 9996 0 0
111+
RULE_05 DATAACL 9995 0 0
112+
RULE_7 DATAACL 9993 0 0
113+
RULE_9 DATAACL 9991 0 0
114+
DEFAULT_RULE DATAACL 1 0 0
115+
RULE_6 EVERFLOW 9994 0 0
116+
RULE_08 EVERFLOW 9992 0 0
117+
"""
118+
119+
class Aclshow():
120+
def __init__(self, *args, **kwargs):
121+
"""
122+
nullify_on_start, nullify_on_exit will call nullify_counters()
123+
before and/or after the test. By default - clear on start and exit.
124+
"""
125+
self.nullify_on_start, self.nullify_on_exit = args if args else (True, True)
126+
self.kwargs = kwargs
127+
self.setUp()
128+
self.runTest()
129+
self.tearDown()
130+
131+
def nullify_counters(self):
132+
"""
133+
This method is used to empty dumped counters
134+
if exist in /tmp/.counters_acl.p (by default).
135+
"""
136+
if os.path.isfile(COUNTER_POSITION):
137+
with open(COUNTER_POSITION, 'wb') as fp:
138+
json.dump([], fp)
139+
140+
def runTest(self):
141+
"""
142+
This method invokes main() from aclshow utility (parametrized by argparse)
143+
parametrized by mock argparse.
144+
"""
145+
@mock.patch('argparse.ArgumentParser.parse_args', return_value = argparse.Namespace(**self.kwargs))
146+
def run(mock_args):
147+
main()
148+
run()
149+
150+
def setUp(self):
151+
if self.nullify_on_start:
152+
self.nullify_counters()
153+
self.old_stdout = sys.stdout
154+
self.result = StringIO()
155+
sys.stdout = self.result
156+
157+
def tearDown(self):
158+
if self.nullify_on_exit:
159+
self.nullify_counters()
160+
sys.stdout = self.old_stdout
161+
162+
# aclshow
163+
def test_default():
164+
test = Aclshow(all = None, clear = None, rules = None, tables = None, verbose = None)
165+
assert test.result.getvalue() == default_output
166+
167+
# aclshow -a
168+
def test_all():
169+
test = Aclshow(all = True, clear = None, rules = None, tables = None, verbose = None)
170+
assert test.result.getvalue() == all_output
171+
172+
# aclshow -r RULE_1 -t DATAACL
173+
def test_rule1_dataacl():
174+
test = Aclshow(all = None, clear = None, rules = 'RULE_1', tables = 'DATAACL', verbose = None)
175+
assert test.result.getvalue() == rule1_dataacl_output
176+
177+
# aclshow -a -r RULE_05
178+
def test_rule05_all():
179+
test = Aclshow(all = True, clear = None, rules = 'RULE_05', tables = None, verbose = None)
180+
assert test.result.getvalue() == rule05_all_output
181+
182+
# aclshow -r RULE_0
183+
def test_rule0():
184+
test = Aclshow(all = None, clear = None, rules = 'RULE_0', tables = None, verbose = None)
185+
assert test.result.getvalue() == rule0_output
186+
187+
# aclshow -r RULE_4,RULE_6 -vv
188+
def test_rule4_rule6_verbose():
189+
test = Aclshow(all = None, clear = None, rules = 'RULE_4,RULE_6', tables = None, verbose = True)
190+
assert test.result.getvalue() == rule4_rule6_verbose_output
191+
192+
# aclshow -t EVERFLOW
193+
def test_everflow():
194+
test = Aclshow(all=None, clear=None, rules=None, tables='EVERFLOW', verbose=None)
195+
assert test.result.getvalue() == everflow_output
196+
197+
# aclshow -t DATAACL
198+
def test_dataacl():
199+
test = Aclshow(all=None, clear=None, rules=None, tables='DATAACL', verbose=None)
200+
assert test.result.getvalue() == dataacl_output
201+
202+
# aclshow -c
203+
def test_clear():
204+
test = Aclshow(all=None, clear=True, rules=None, tables=None, verbose=None)
205+
assert test.result.getvalue() == clear_output
206+
207+
# aclshow -a -c ; aclshow -a
208+
def test_all_after_clear():
209+
nullify_on_start, nullify_on_exit = True, False
210+
test = Aclshow(nullify_on_start, nullify_on_exit, all=True, clear=True, rules=None, tables=None, verbose=None)
211+
assert test.result.getvalue() == clear_output
212+
nullify_on_start, nullify_on_exit = False, True
213+
test = Aclshow(nullify_on_start, nullify_on_exit, all=True, clear=False, rules=None, tables=None, verbose=None)
214+
assert test.result.getvalue() == all_after_clear_output

sonic-utilities-tests/mock_tables/config_db.json

+69
Original file line numberDiff line numberDiff line change
@@ -41,5 +41,74 @@
4141
"lanes": "116,117,118,119",
4242
"mtu": "9100",
4343
"speed": "40000"
44+
},
45+
"ACL_RULE|DATAACL|DEFAULT_RULE": {
46+
"PACKET_ACTION": "DROP",
47+
"PRIORITY": "1"
48+
},
49+
"ACL_RULE|DATAACL|RULE_1": {
50+
"PACKET_ACTION": "FORWARD",
51+
"PRIORITY": "9999",
52+
"SRC_IP": "10.0.0.2/32"
53+
},
54+
"ACL_RULE|DATAACL|RULE_2": {
55+
"DST_IP": "192.168.0.16/32",
56+
"PACKET_ACTION": "FORWARD",
57+
"PRIORITY": "9998"
58+
},
59+
"ACL_RULE|DATAACL|RULE_3": {
60+
"DST_IP": "172.16.2.0/32",
61+
"PACKET_ACTION": "FORWARD",
62+
"PRIORITY": "9997"
63+
},
64+
"ACL_RULE|DATAACL|RULE_4": {
65+
"L4_SRC_PORT": "4661",
66+
"PACKET_ACTION": "FORWARD",
67+
"PRIORITY": "9996"
68+
},
69+
"ACL_RULE|DATAACL|RULE_05": {
70+
"IP_PROTOCOL": "126",
71+
"PACKET_ACTION": "FORWARD",
72+
"PRIORITY": "9995"
73+
},
74+
"ACL_RULE|EVERFLOW|RULE_6": {
75+
"PACKET_ACTION": "FORWARD",
76+
"PRIORITY": "9994",
77+
"TCP_FLAGS": "0x12/0x12"
78+
},
79+
"ACL_RULE|DATAACL|RULE_7": {
80+
"PACKET_ACTION": "DROP",
81+
"PRIORITY": "9993",
82+
"SRC_IP": "10.0.0.3/32"
83+
},
84+
"ACL_RULE|EVERFLOW|RULE_08": {
85+
"PACKET_ACTION": "FORWARD",
86+
"PRIORITY": "9992",
87+
"SRC_IP": "10.0.0.3/32"
88+
},
89+
"ACL_RULE|DATAACL|RULE_9": {
90+
"L4_DST_PORT": "4661",
91+
"PACKET_ACTION": "FORWARD",
92+
"PRIORITY": "9991"
93+
},
94+
"ACL_TABLE|DATAACL": {
95+
"policy_desc": "DATAACL",
96+
"ports@": "PortChannel0002,PortChannel0005,PortChannel0008,PortChannel0011,PortChannel0014,PortChannel0017,PortChannel0020,PortChannel0023,Ethernet64,Ethernet68,Ethernet72,Ethernet76,Ethernet80,Ethernet84,Ethernet88,Ethernet92,Ethernet96,Ethernet100,Ethernet104,Ethernet108,Ethernet112,Ethernet116,Ethernet120,Ethernet124",
97+
"type": "L3"
98+
},
99+
"ACL_TABLE|EVERFLOW": {
100+
"policy_desc": "EVERFLOW",
101+
"ports@": "PortChannel0002,PortChannel0005,PortChannel0008,PortChannel0011,PortChannel0014,PortChannel0017,PortChannel0020,PortChannel0023,Ethernet100,Ethernet104,Ethernet92,Ethernet96,Ethernet84,Ethernet88,Ethernet76,Ethernet80,Ethernet108,Ethernet112,Ethernet64,Ethernet120,Ethernet116,Ethernet124,Ethernet72,Ethernet68",
102+
"type": "MIRROR"
103+
},
104+
"ACL_TABLE|SNMP_ACL": {
105+
"policy_desc": "SNMP_ACL",
106+
"services@": "SNMP",
107+
"type": "CTRLPLANE"
108+
},
109+
"ACL_TABLE|SSH_ONLY": {
110+
"policy_desc": "SSH_ONLY",
111+
"services@": "SSH",
112+
"type": "CTRLPLANE"
44113
}
45114
}

sonic-utilities-tests/mock_tables/counters_db.json

+41-1
Original file line numberDiff line numberDiff line change
@@ -74,5 +74,45 @@
7474
"oid:0x600000000063c": "SAI_ROUTER_INTERFACE_TYPE_PORT",
7575
"oid:0x600000000063d": "SAI_ROUTER_INTERFACE_TYPE_PORT",
7676
"oid:0x600000000065f": "SAI_ROUTER_INTERFACE_TYPE_PORT"
77+
},
78+
"COUNTERS:DATAACL:DEFAULT_RULE": {
79+
"Bytes": "1",
80+
"Packets": "2"
81+
},
82+
"COUNTERS:DATAACL:RULE_1": {
83+
"Bytes": "100",
84+
"Packets": "101"
85+
},
86+
"COUNTERS:DATAACL:RULE_2": {
87+
"Bytes": "200",
88+
"Packets": "201"
89+
},
90+
"COUNTERS:DATAACL:RULE_3": {
91+
"Bytes": "300",
92+
"Packets": "301"
93+
},
94+
"COUNTERS:DATAACL:RULE_4": {
95+
"Bytes": "400",
96+
"Packets": "401"
97+
},
98+
"COUNTERS:DATAACL:RULE_05": {
99+
"Bytes": "0",
100+
"Packets": "0"
101+
},
102+
"COUNTERS:EVERFLOW:RULE_6": {
103+
"Bytes": "600",
104+
"Packets": "601"
105+
},
106+
"COUNTERS:DATAACL:RULE_7":{
107+
"Bytes": "700",
108+
"Packets": "701"
109+
},
110+
"COUNTERS:EVERFLOW:RULE_08": {
111+
"Bytes": "0",
112+
"Packets": "0"
113+
},
114+
"COUNTERS:DATAACL:RULE_9": {
115+
"Bytes": "900",
116+
"Packets": "901"
77117
}
78-
}
118+
}

0 commit comments

Comments
 (0)