Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion scripts/aclshow
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,8 @@ class AclStat(object):
"""
for table, rule in self.acl_rules:
cnt_props = lowercase_keys(self.db.get_all(self.db.COUNTERS_DB, "COUNTERS:%s:%s" % (table, rule)))
if not cnt_props:
continue
self.acl_counters[table, rule] = cnt_props

if verboseflag:
Expand All @@ -141,7 +143,7 @@ class AclStat(object):
"""
return the counter value or the difference comparing with the saved value in string format
"""
if not self.acl_counters[key]:
if key not in self.acl_counters:
return 'N/A'

if key in self.saved_acl_counters:
Expand Down
132 changes: 88 additions & 44 deletions tests/aclshow_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,27 +33,28 @@

# Expected output for aclshow -a
all_output = '' + \
"""RULE NAME TABLE NAME PRIO PACKETS COUNT BYTES COUNT
------------------------------------- ------------- ------ --------------- -------------
RULE_1 DATAACL 9999 101 100
RULE_2 DATAACL 9998 201 200
RULE_3 DATAACL 9997 301 300
RULE_4 DATAACL 9996 401 400
RULE_05 DATAACL 9995 0 0
RULE_7 DATAACL 9993 701 700
RULE_9 DATAACL 9991 901 900
RULE_10 DATAACL 9989 1001 1000
DEFAULT_RULE DATAACL 1 2 1
RULE_6 EVERFLOW 9994 601 600
RULE_08 EVERFLOW 9992 0 0
RULE_1 NULL_ROUTE_V4 9999 N/A N/A
BLOCK_RULE_10.0.0.2/32 NULL_ROUTE_V4 9999 N/A N/A
BLOCK_RULE_10.0.0.3/32 NULL_ROUTE_V4 9999 N/A N/A
DEFAULT_RULE NULL_ROUTE_V4 1 N/A N/A
RULE_1 NULL_ROUTE_V6 9999 N/A N/A
BLOCK_RULE_1000:1000:1000:1000::2/128 NULL_ROUTE_V6 9999 N/A N/A
BLOCK_RULE_1000:1000:1000:1000::3/128 NULL_ROUTE_V6 9999 N/A N/A
DEFAULT_RULE NULL_ROUTE_V6 1 N/A N/A
"""RULE NAME TABLE NAME PRIO PACKETS COUNT BYTES COUNT
------------------------------------- ------------------ ------ --------------- -------------
RULE_1 DATAACL 9999 101 100
RULE_2 DATAACL 9998 201 200
RULE_3 DATAACL 9997 301 300
RULE_4 DATAACL 9996 401 400
RULE_05 DATAACL 9995 0 0
RULE_7 DATAACL 9993 701 700
RULE_9 DATAACL 9991 901 900
RULE_10 DATAACL 9989 1001 1000
DEFAULT_RULE DATAACL 1 2 1
RULE_NO_COUNTER DATAACL_NO_COUNTER 9995 N/A N/A
RULE_6 EVERFLOW 9994 601 600
RULE_08 EVERFLOW 9992 0 0
RULE_1 NULL_ROUTE_V4 9999 N/A N/A
BLOCK_RULE_10.0.0.2/32 NULL_ROUTE_V4 9999 N/A N/A
BLOCK_RULE_10.0.0.3/32 NULL_ROUTE_V4 9999 N/A N/A
DEFAULT_RULE NULL_ROUTE_V4 1 N/A N/A
RULE_1 NULL_ROUTE_V6 9999 N/A N/A
BLOCK_RULE_1000:1000:1000:1000::2/128 NULL_ROUTE_V6 9999 N/A N/A
BLOCK_RULE_1000:1000:1000:1000::3/128 NULL_ROUTE_V6 9999 N/A N/A
DEFAULT_RULE NULL_ROUTE_V6 1 N/A N/A
"""

# Expected output for aclshow -r RULE_1 -t DATAACL
Expand Down Expand Up @@ -86,8 +87,8 @@
# Expected output for aclshow -r RULE_4,RULE_6 -vv
rule4_rule6_verbose_output = '' + \
"""Reading ACL info...
Total number of ACL Tables: 10
Total number of ACL Rules: 19
Total number of ACL Tables: 11
Total number of ACL Rules: 20

RULE NAME TABLE NAME PRIO PACKETS COUNT BYTES COUNT
----------- ------------ ------ --------------- -------------
Expand Down Expand Up @@ -122,27 +123,53 @@
# Expected output for
# aclshow -a -c ; aclshow -a
all_after_clear_output = '' + \
"""RULE NAME TABLE NAME PRIO PACKETS COUNT BYTES COUNT
------------------------------------- ------------- ------ --------------- -------------
RULE_1 DATAACL 9999 0 0
RULE_2 DATAACL 9998 0 0
RULE_3 DATAACL 9997 0 0
RULE_4 DATAACL 9996 0 0
RULE_05 DATAACL 9995 0 0
RULE_7 DATAACL 9993 0 0
RULE_9 DATAACL 9991 0 0
RULE_10 DATAACL 9989 0 0
DEFAULT_RULE DATAACL 1 0 0
RULE_6 EVERFLOW 9994 0 0
RULE_08 EVERFLOW 9992 0 0
RULE_1 NULL_ROUTE_V4 9999 N/A N/A
BLOCK_RULE_10.0.0.2/32 NULL_ROUTE_V4 9999 N/A N/A
BLOCK_RULE_10.0.0.3/32 NULL_ROUTE_V4 9999 N/A N/A
DEFAULT_RULE NULL_ROUTE_V4 1 N/A N/A
RULE_1 NULL_ROUTE_V6 9999 N/A N/A
BLOCK_RULE_1000:1000:1000:1000::2/128 NULL_ROUTE_V6 9999 N/A N/A
BLOCK_RULE_1000:1000:1000:1000::3/128 NULL_ROUTE_V6 9999 N/A N/A
DEFAULT_RULE NULL_ROUTE_V6 1 N/A N/A
"""RULE NAME TABLE NAME PRIO PACKETS COUNT BYTES COUNT
------------------------------------- ------------------ ------ --------------- -------------
RULE_1 DATAACL 9999 0 0
RULE_2 DATAACL 9998 0 0
RULE_3 DATAACL 9997 0 0
RULE_4 DATAACL 9996 0 0
RULE_05 DATAACL 9995 0 0
RULE_7 DATAACL 9993 0 0
RULE_9 DATAACL 9991 0 0
RULE_10 DATAACL 9989 0 0
DEFAULT_RULE DATAACL 1 0 0
RULE_NO_COUNTER DATAACL_NO_COUNTER 9995 N/A N/A
RULE_6 EVERFLOW 9994 0 0
RULE_08 EVERFLOW 9992 0 0
RULE_1 NULL_ROUTE_V4 9999 N/A N/A
BLOCK_RULE_10.0.0.2/32 NULL_ROUTE_V4 9999 N/A N/A
BLOCK_RULE_10.0.0.3/32 NULL_ROUTE_V4 9999 N/A N/A
DEFAULT_RULE NULL_ROUTE_V4 1 N/A N/A
RULE_1 NULL_ROUTE_V6 9999 N/A N/A
BLOCK_RULE_1000:1000:1000:1000::2/128 NULL_ROUTE_V6 9999 N/A N/A
BLOCK_RULE_1000:1000:1000:1000::3/128 NULL_ROUTE_V6 9999 N/A N/A
DEFAULT_RULE NULL_ROUTE_V6 1 N/A N/A
"""

all_after_clear_and_populate_output = '' + \
"""RULE NAME TABLE NAME PRIO PACKETS COUNT BYTES COUNT
------------------------------------- ------------------ ------ --------------- -------------
RULE_1 DATAACL 9999 0 0
RULE_2 DATAACL 9998 0 0
RULE_3 DATAACL 9997 0 0
RULE_4 DATAACL 9996 0 0
RULE_05 DATAACL 9995 0 0
RULE_7 DATAACL 9993 0 0
RULE_9 DATAACL 9991 0 0
RULE_10 DATAACL 9989 0 0
DEFAULT_RULE DATAACL 1 0 0
RULE_NO_COUNTER DATAACL_NO_COUNTER 9995 100 100
RULE_6 EVERFLOW 9994 0 0
RULE_08 EVERFLOW 9992 0 0
RULE_1 NULL_ROUTE_V4 9999 N/A N/A
BLOCK_RULE_10.0.0.2/32 NULL_ROUTE_V4 9999 N/A N/A
BLOCK_RULE_10.0.0.3/32 NULL_ROUTE_V4 9999 N/A N/A
DEFAULT_RULE NULL_ROUTE_V4 1 N/A N/A
RULE_1 NULL_ROUTE_V6 9999 N/A N/A
BLOCK_RULE_1000:1000:1000:1000::2/128 NULL_ROUTE_V6 9999 N/A N/A
BLOCK_RULE_1000:1000:1000:1000::3/128 NULL_ROUTE_V6 9999 N/A N/A
DEFAULT_RULE NULL_ROUTE_V6 1 N/A N/A
"""

class Aclshow():
Expand Down Expand Up @@ -246,3 +273,20 @@ def test_all_after_clear():
nullify_on_start, nullify_on_exit = False, True
test = Aclshow(nullify_on_start, nullify_on_exit, all=True, clear=False, rules=None, tables=None, verbose=None)
assert test.result.getvalue() == all_after_clear_output

def test_clear_and_populate_counters_db():
# No counters yet for DATAACL_NO_COUNTER:RULE_NO_COUNTER
nullify_on_start, nullify_on_exit = True, False
test = Aclshow(nullify_on_start, nullify_on_exit, all=True, clear=True, rules=None, tables=None, verbose=None)
assert test.result.getvalue() == clear_output
nullify_on_start, nullify_on_exit = False, True

# Counters populated.
conn = dbconnector.SonicV2Connector()
conn.connect(conn.COUNTERS_DB)
conn.set(conn.COUNTERS_DB, 'COUNTERS:DATAACL_NO_COUNTER:RULE_NO_COUNTER', 'packets', '100')
conn.set(conn.COUNTERS_DB, 'COUNTERS:DATAACL_NO_COUNTER:RULE_NO_COUNTER', 'bytes', '100')

with mock.patch('swsssdk.SonicV2Connector', return_value=conn):
test = Aclshow(nullify_on_start, nullify_on_exit, all=True, clear=False, rules=None, tables=None, verbose=None)
assert test.result.getvalue() == all_after_clear_and_populate_output
10 changes: 10 additions & 0 deletions tests/mock_tables/config_db.json
Original file line number Diff line number Diff line change
Expand Up @@ -433,6 +433,11 @@
"priority": "9989",
"SRC_IP": "10.0.0.3/32"
},
"ACL_RULE|DATAACL_NO_COUNTER|RULE_NO_COUNTER": {
"IP_PROTOCOL": "126",
"PACKET_ACTION": "FORWARD",
"PRIORITY": "9995"
},
"ACL_TABLE|NULL_ROUTE_V4": {
"policy_desc": "DATAACL",
"ports@": "PortChannel0002,PortChannel0005,PortChannel0008,PortChannel0011,PortChannel0014,PortChannel0017,PortChannel0020,PortChannel0023",
Expand All @@ -448,6 +453,11 @@
"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",
"type": "L3"
},
"ACL_TABLE|DATAACL_NO_COUNTER": {
"policy_desc": "DATAACL",
"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",
"type": "L3"
},
"ACL_TABLE|DATAACL_2": {
"policy_desc": "DATAACL_2",
"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",
Expand Down