From 5615edaede347b8102773ce57452740d2f16b66e Mon Sep 17 00:00:00 2001 From: Vivek Reddy Karri Date: Tue, 17 Aug 2021 06:10:43 +0000 Subject: [PATCH] pep-8 issues handled Signed-off-by: Vivek Reddy Karri --- dump/plugins/copp.py | 186 ++++++++++----------- tests/dump_tests/module_tests/copp_test.py | 61 +++---- 2 files changed, 126 insertions(+), 121 deletions(-) diff --git a/dump/plugins/copp.py b/dump/plugins/copp.py index b56e732e9d..bdf411c4b9 100644 --- a/dump/plugins/copp.py +++ b/dump/plugins/copp.py @@ -4,46 +4,46 @@ from dump.helper import handle_error from .executor import Executor -TRAP_ID_MAP = { - "stp" : "SAI_HOSTIF_TRAP_TYPE_STP", - "lacp" : "SAI_HOSTIF_TRAP_TYPE_LACP", - "eapol" : "SAI_HOSTIF_TRAP_TYPE_EAPOL", - "lldp" : "SAI_HOSTIF_TRAP_TYPE_LLDP", - "pvrst" : "SAI_HOSTIF_TRAP_TYPE_PVRST", - "igmp_query" : "SAI_HOSTIF_TRAP_TYPE_IGMP_TYPE_QUERY", - "igmp_leave" : "SAI_HOSTIF_TRAP_TYPE_IGMP_TYPE_LEAVE", - "igmp_v1_report" : "SAI_HOSTIF_TRAP_TYPE_IGMP_TYPE_V1_REPORT", - "igmp_v2_report" : "SAI_HOSTIF_TRAP_TYPE_IGMP_TYPE_V2_REPORT", - "igmp_v3_report" : "SAI_HOSTIF_TRAP_TYPE_IGMP_TYPE_V3_REPORT", - "sample_packet" : "SAI_HOSTIF_TRAP_TYPE_SAMPLEPACKET", - "switch_cust_range" : "SAI_HOSTIF_TRAP_TYPE_SWITCH_CUSTOM_RANGE_BASE", - "arp_req" : "SAI_HOSTIF_TRAP_TYPE_ARP_REQUEST", - "arp_resp" : "SAI_HOSTIF_TRAP_TYPE_ARP_RESPONSE", - "dhcp" : "SAI_HOSTIF_TRAP_TYPE_DHCP", - "ospf" : "SAI_HOSTIF_TRAP_TYPE_OSPF", - "pim" : "SAI_HOSTIF_TRAP_TYPE_PIM", - "vrrp" : "SAI_HOSTIF_TRAP_TYPE_VRRP", - "bgp" : "SAI_HOSTIF_TRAP_TYPE_BGP", - "dhcpv6" : "SAI_HOSTIF_TRAP_TYPE_DHCPV6", - "ospfv6" : "SAI_HOSTIF_TRAP_TYPE_OSPFV6", - "vrrpv6" : "SAI_HOSTIF_TRAP_TYPE_VRRPV6", - "bgpv6" : "SAI_HOSTIF_TRAP_TYPE_BGPV6", - "neigh_discovery" : "SAI_HOSTIF_TRAP_TYPE_IPV6_NEIGHBOR_DISCOVERY", - "mld_v1_v2" : "SAI_HOSTIF_TRAP_TYPE_IPV6_MLD_V1_V2", - "mld_v1_report" : "SAI_HOSTIF_TRAP_TYPE_IPV6_MLD_V1_REPORT", - "mld_v1_done" : "SAI_HOSTIF_TRAP_TYPE_IPV6_MLD_V1_DONE", - "mld_v2_report" : "SAI_HOSTIF_TRAP_TYPE_MLD_V2_REPORT", - "ip2me" : "SAI_HOSTIF_TRAP_TYPE_IP2ME", - "ssh" : "SAI_HOSTIF_TRAP_TYPE_SSH", - "snmp" : "SAI_HOSTIF_TRAP_TYPE_SNMP", - "router_custom_range" : "SAI_HOSTIF_TRAP_TYPE_ROUTER_CUSTOM_RANGE_BASE", - "l3_mtu_error" : "SAI_HOSTIF_TRAP_TYPE_L3_MTU_ERROR", - "ttl_error" : "SAI_HOSTIF_TRAP_TYPE_TTL_ERROR", - "udld" : "SAI_HOSTIF_TRAP_TYPE_UDLD", - "bfd" : "SAI_HOSTIF_TRAP_TYPE_BFD", - "bfdv6" : "SAI_HOSTIF_TRAP_TYPE_BFDV6", - "src_nat_miss" : "SAI_HOSTIF_TRAP_TYPE_SNAT_MISS", - "dest_nat_miss" : "SAI_HOSTIF_TRAP_TYPE_DNAT_MISS" +TRAP_ID_MAP = { + "stp": "SAI_HOSTIF_TRAP_TYPE_STP", + "lacp": "SAI_HOSTIF_TRAP_TYPE_LACP", + "eapol": "SAI_HOSTIF_TRAP_TYPE_EAPOL", + "lldp": "SAI_HOSTIF_TRAP_TYPE_LLDP", + "pvrst": "SAI_HOSTIF_TRAP_TYPE_PVRST", + "igmp_query": "SAI_HOSTIF_TRAP_TYPE_IGMP_TYPE_QUERY", + "igmp_leave": "SAI_HOSTIF_TRAP_TYPE_IGMP_TYPE_LEAVE", + "igmp_v1_report": "SAI_HOSTIF_TRAP_TYPE_IGMP_TYPE_V1_REPORT", + "igmp_v2_report": "SAI_HOSTIF_TRAP_TYPE_IGMP_TYPE_V2_REPORT", + "igmp_v3_report": "SAI_HOSTIF_TRAP_TYPE_IGMP_TYPE_V3_REPORT", + "sample_packet": "SAI_HOSTIF_TRAP_TYPE_SAMPLEPACKET", + "switch_cust_range": "SAI_HOSTIF_TRAP_TYPE_SWITCH_CUSTOM_RANGE_BASE", + "arp_req": "SAI_HOSTIF_TRAP_TYPE_ARP_REQUEST", + "arp_resp": "SAI_HOSTIF_TRAP_TYPE_ARP_RESPONSE", + "dhcp": "SAI_HOSTIF_TRAP_TYPE_DHCP", + "ospf": "SAI_HOSTIF_TRAP_TYPE_OSPF", + "pim": "SAI_HOSTIF_TRAP_TYPE_PIM", + "vrrp": "SAI_HOSTIF_TRAP_TYPE_VRRP", + "bgp": "SAI_HOSTIF_TRAP_TYPE_BGP", + "dhcpv6": "SAI_HOSTIF_TRAP_TYPE_DHCPV6", + "ospfv6": "SAI_HOSTIF_TRAP_TYPE_OSPFV6", + "vrrpv6": "SAI_HOSTIF_TRAP_TYPE_VRRPV6", + "bgpv6": "SAI_HOSTIF_TRAP_TYPE_BGPV6", + "neigh_discovery": "SAI_HOSTIF_TRAP_TYPE_IPV6_NEIGHBOR_DISCOVERY", + "mld_v1_v2": "SAI_HOSTIF_TRAP_TYPE_IPV6_MLD_V1_V2", + "mld_v1_report": "SAI_HOSTIF_TRAP_TYPE_IPV6_MLD_V1_REPORT", + "mld_v1_done": "SAI_HOSTIF_TRAP_TYPE_IPV6_MLD_V1_DONE", + "mld_v2_report": "SAI_HOSTIF_TRAP_TYPE_MLD_V2_REPORT", + "ip2me": "SAI_HOSTIF_TRAP_TYPE_IP2ME", + "ssh": "SAI_HOSTIF_TRAP_TYPE_SSH", + "snmp": "SAI_HOSTIF_TRAP_TYPE_SNMP", + "router_custom_range": "SAI_HOSTIF_TRAP_TYPE_ROUTER_CUSTOM_RANGE_BASE", + "l3_mtu_error": "SAI_HOSTIF_TRAP_TYPE_L3_MTU_ERROR", + "ttl_error": "SAI_HOSTIF_TRAP_TYPE_TTL_ERROR", + "udld": "SAI_HOSTIF_TRAP_TYPE_UDLD", + "bfd": "SAI_HOSTIF_TRAP_TYPE_BFD", + "bfdv6": "SAI_HOSTIF_TRAP_TYPE_BFDV6", + "src_nat_miss": "SAI_HOSTIF_TRAP_TYPE_SNAT_MISS", + "dest_nat_miss": "SAI_HOSTIF_TRAP_TYPE_DNAT_MISS" } CFG_COPP_TRAP_TABLE_NAME = "COPP_TRAP" @@ -61,10 +61,10 @@ class Copp(Executor): - + ARG_NAME = "trap_id" CONFIG_FILE = "/etc/sonic/copp_cfg.json" - + def __init__(self): self.match_engine = MatchEngine() self.copp_trap_cfg_key = "" @@ -72,7 +72,7 @@ def __init__(self): self.trap_id = "" self.ns = "" self.ret_temp = {} - + def fetch_all_trap_ids(self, ret): traps = [] if not ret["error"]: @@ -81,18 +81,18 @@ def fetch_all_trap_ids(self, ret): for id in temp_ids: traps.append(id) return traps - + def get_all_args(self, ns): all_trap_ids = set() req = MatchRequest(file=Copp.CONFIG_FILE, table=CFG_COPP_TRAP_TABLE_NAME, return_fields=["trap_ids"], ns=ns) ret = self.match_engine.fetch(req) all_trap_ids.update(self.fetch_all_trap_ids(ret)) - + req = MatchRequest(db="CONFIG_DB", table=CFG_COPP_TRAP_TABLE_NAME, return_fields=["trap_ids"], ns=ns) ret = self.match_engine.fetch(req) all_trap_ids.update(self.fetch_all_trap_ids(ret)) return list(all_trap_ids) - + def execute(self, params): self.ret_temp = create_template_dict(dbs=["CONFIG_DB", "APPL_DB", "ASIC_DB", "STATE_DB", "CONFIG_FILE"]) self.ns = params["namespace"] @@ -104,7 +104,7 @@ def execute(self, params): self.handle_asic_db() self.handle_state_db() return self.ret_temp - + def handle_state_db(self): req = MatchRequest(db="STATE_DB", table="COPP_TRAP_TABLE", key_pattern=self.copp_trap_cfg_key) ret = self.match_engine.fetch(req) @@ -112,16 +112,16 @@ def handle_state_db(self): self.ret_temp["STATE_DB"]["keys"].append(ret["keys"][0]) else: self.ret_temp["STATE_DB"]["tables_not_found"].append("COPP_TRAP_TABLE") - + req = MatchRequest(db="STATE_DB", table="COPP_GROUP_TABLE", key_pattern=self.trap_group) ret = self.match_engine.fetch(req) if not ret["error"] and len(ret["keys"]) > 0: self.ret_temp["STATE_DB"]["keys"].append(ret["keys"][0]) else: self.ret_temp["STATE_DB"]["tables_not_found"].append("COPP_GROUP_TABLE") - + def handle_appl_db(self): - req = MatchRequest(db="APPL_DB", table=APP_COPP_TABLE_NAME, key_pattern="*", field="trap_ids", + req = MatchRequest(db="APPL_DB", table=APP_COPP_TABLE_NAME, key_pattern="*", field="trap_ids", value=self.trap_id, match_entire_list=False, return_fields=["trap_group"]) ret = self.match_engine.fetch(req) tg = "" @@ -133,15 +133,15 @@ def handle_appl_db(self): tg = ret["return_values"][ret["keys"][0]]["trap_group"] else: self.ret_temp["APPL_DB"]["tables_not_found"].append(APP_COPP_TABLE_NAME) - + if tg != self.trap_group and not self.trap_group and not tg: err_str = "The Associated Trap_group for the trap_id found in APPL and CONFIG_DB/CONFIG_FILE did not match. In APPL_DB: {}, CONFIG_DB: {}".format(tg, self.trap_group) err_str += "\n Proceding with the trap group found in APPL DB" handle_error(err_str, False) - + if tg: self.trap_group = tg - + def handle_asic_db(self): if self.trap_id not in TRAP_ID_MAP: handle_error("Invalid Trap Id {} is provided, no corresponding SAI_TRAP_OBJ is found".format(self.trap_id), False) @@ -154,13 +154,13 @@ def handle_asic_db(self): self.__get_asic_queue_obj(sai_queue) sai_hostif_vid = self.__get_asic_hostif_entry_obj(sai_trap) self.__get_asic_hostif_obj(sai_hostif_vid) - + def __get_asic_hostif_trap_obj(self, sai_trap_id): if not sai_trap_id: self.ret_temp["ASIC_DB"]["tables_not_found"].append(ASIC_TRAP_OBJ) return "", "" - - req = MatchRequest(db="ASIC_DB", table=ASIC_TRAP_OBJ, field="SAI_HOSTIF_TRAP_ATTR_TRAP_TYPE", value=sai_trap_id, + + req = MatchRequest(db="ASIC_DB", table=ASIC_TRAP_OBJ, field="SAI_HOSTIF_TRAP_ATTR_TRAP_TYPE", value=sai_trap_id, ns=self.ns, return_fields=["SAI_HOSTIF_TRAP_ATTR_TRAP_GROUP"]) ret = self.match_engine.fetch(req) if not ret["error"] and len(ret["keys"]) > 0: @@ -173,13 +173,13 @@ def __get_asic_hostif_trap_obj(self, sai_trap_id): else: self.ret_temp["ASIC_DB"]["tables_not_found"].append(ASIC_TRAP_OBJ) return "", "" - + def __get_asic_hostif_trap_group_obj(self, trap_group_obj): if not trap_group_obj: self.ret_temp["ASIC_DB"]["tables_not_found"].append(ASIC_TRAP_GROUP_OBJ) return "", "" - - req = MatchRequest(db="ASIC_DB", table=ASIC_TRAP_GROUP_OBJ, key_pattern=trap_group_obj, ns=self.ns, + + req = MatchRequest(db="ASIC_DB", table=ASIC_TRAP_GROUP_OBJ, key_pattern=trap_group_obj, ns=self.ns, return_fields=["SAI_HOSTIF_TRAP_GROUP_ATTR_QUEUE", "SAI_HOSTIF_TRAP_GROUP_ATTR_POLICER"]) ret = self.match_engine.fetch(req) if not ret["error"] and len(ret["keys"]) > 0: @@ -191,36 +191,36 @@ def __get_asic_hostif_trap_group_obj(self, trap_group_obj): else: self.ret_temp["ASIC_DB"]["tables_not_found"].append(ASIC_TRAP_GROUP_OBJ) return "", "" - + def __get_asic_policer_obj(self, policer_sai_obj): # Not adding to tables_not_found because, some of the trap_ids might not have a policer associated with them # and that is expected if not policer_sai_obj: - return + return req = MatchRequest(db="ASIC_DB", table=ASIC_POLICER_OBJ, key_pattern=policer_sai_obj, ns=self.ns) ret = self.match_engine.fetch(req) if not ret["error"] and len(ret["keys"]) > 0: self.ret_temp["ASIC_DB"]["keys"].append(ret["keys"][0]) - + def __get_asic_queue_obj(self, queue_sai_obj): # Not adding tp tables_not_found because of the type of reason specified for policer obj if not queue_sai_obj: - return + return req = MatchRequest(db="ASIC_DB", table=ASIC_QUEUE_OBJ, field="SAI_QUEUE_ATTR_INDEX", value=queue_sai_obj, ns=self.ns) ret = self.match_engine.fetch(req) if not ret["error"] and len(ret["keys"]) > 0: - self.ret_temp["ASIC_DB"]["keys"].append(ret["keys"][0]) - + self.ret_temp["ASIC_DB"]["keys"].append(ret["keys"][0]) + def __get_asic_hostif_entry_obj(self, sai_trap_key): # Not adding tp tables_not_found because of the type of reason specified for policer obj if not sai_trap_key: - return + return matches = re.findall(r"oid:0x\w{1,14}", sai_trap_key) if matches: sai_trap_vid = matches[0] else: - return - req = MatchRequest(db="ASIC_DB", table=ASIC_HOSTIF_TABLE_ENTRY, field="SAI_HOSTIF_TABLE_ENTRY_ATTR_TRAP_ID", + return + req = MatchRequest(db="ASIC_DB", table=ASIC_HOSTIF_TABLE_ENTRY, field="SAI_HOSTIF_TABLE_ENTRY_ATTR_TRAP_ID", value=sai_trap_vid, return_fields=["SAI_HOSTIF_TABLE_ENTRY_ATTR_HOST_IF"], ns=self.ns) ret = self.match_engine.fetch(req) if not ret["error"] and len(ret["keys"]) > 0: @@ -228,16 +228,16 @@ def __get_asic_hostif_entry_obj(self, sai_trap_key): self.ret_temp["ASIC_DB"]["keys"].append(sai_hostif_table_entry_key) sai_hostif_vid = ret["return_values"][sai_hostif_table_entry_key]["SAI_HOSTIF_TABLE_ENTRY_ATTR_HOST_IF"] return sai_hostif_vid - + def __get_asic_hostif_obj(self, sai_hostif_vid): # Not adding tp tables_not_found because of the type of reason specified for policer obj if not sai_hostif_vid: - return + return req = MatchRequest(db="ASIC_DB", table=ASIC_HOSTIF, key_pattern=sai_hostif_vid, ns=self.ns) ret = self.match_engine.fetch(req) if not ret["error"] and len(ret["keys"]) > 0: - self.ret_temp["ASIC_DB"]["keys"].append(ret["keys"][0]) - + self.ret_temp["ASIC_DB"]["keys"].append(ret["keys"][0]) + # When the user writes config to CONFIG_DB, that takes precedence over default config def handle_user_and_default_config(self): # ------------------ Find trap_id_key and trap_group from both the sources @@ -248,43 +248,43 @@ def handle_user_and_default_config(self): trap_id_key_cf, trap_group_cf = self.__find_trap_id_in_conf_file() elif trap_id_key_db and not trap_group_db: _, trap_group_cf = self.__find_trap_id_in_conf_file(trap_id_key_db.split("|")[-1], False) - + # ------------------ Find any diff and fill the return dictionary with COPP_TRAP keys if trap_id_key_db: self.ret_temp["CONFIG_DB"]["keys"].append(trap_id_key_db) - self.copp_trap_cfg_key = trap_id_key_db.split("|")[-1] + self.copp_trap_cfg_key = trap_id_key_db.split("|")[-1] id_in_file, _ = self.__find_trap_id_in_conf_file(self.copp_trap_cfg_key, False) - if id_in_file == trap_id_key_db: # If any diff + if id_in_file == trap_id_key_db: # If any diff self.ret_temp["CONFIG_FILE"]["keys"].append(trap_id_key_db) elif trap_id_key_cf: self.ret_temp["CONFIG_FILE"]["keys"].append(trap_id_key_cf) self.copp_trap_cfg_key = trap_id_key_cf.split("|")[-1] id_in_file, _ = self.__find_trap_id_in_db(self.copp_trap_cfg_key, False) - if id_in_file == trap_id_key_cf: # # Find the diff, if any, inside the CONFIG DB + if id_in_file == trap_id_key_cf: # Find the diff, if any, inside the CONFIG DB self.ret_temp["CONFIG_DB"]["keys"].append(trap_id_key_cf) else: self.ret_temp["CONFIG_FILE"]["tables_not_found"].append(CFG_COPP_TRAP_TABLE_NAME) self.ret_temp["CONFIG_DB"]["tables_not_found"].append(CFG_COPP_TRAP_TABLE_NAME) - - # ------------------ Find any diff and fill the return dictionary with COPP_GROUP keys + + # ------------------ Find any diff and fill the return dictionary with COPP_GROUP keys if trap_group_db: # Preference to User-provided Config - self.trap_group = trap_group_db - trap_in_cfg_file = False - elif trap_group_cf: # Then, the preference to the group found in CFG_File + self.trap_group = trap_group_db + trap_in_cfg_file = False + elif trap_group_cf: # Then, the preference to the group found in CFG_File self.trap_group = trap_group_cf trap_in_cfg_file = True else: self.ret_temp["CONFIG_FILE"]["tables_not_found"].append(CFG_COPP_GROUP_TABLE_NAME) - self.ret_temp["CONFIG_DB"]["tables_not_found"].append(CFG_COPP_GROUP_TABLE_NAME) + self.ret_temp["CONFIG_DB"]["tables_not_found"].append(CFG_COPP_GROUP_TABLE_NAME) return - tg_in_default = self.__fill_trap_group_in_conf_file(trap_in_cfg_file) # Check if the trap_group in cfg_file + tg_in_default = self.__fill_trap_group_in_conf_file(trap_in_cfg_file) # Check if the trap_group in cfg_file # Trap_group is expected to be in cfg_db when # 1) Trap_group is not found in cfg_file # 2) Trap_ID was provided by the user i.e trap_in_cfg_file = False # Otherwise, we're just looking for diff self.__fill_trap_group_in_conf_db(not(tg_in_default) and not(trap_in_cfg_file)) - - def __fill_trap_group_in_conf_file(self, not_found_report=True): + + def __fill_trap_group_in_conf_file(self, not_found_report=True): req = MatchRequest(table=CFG_COPP_GROUP_TABLE_NAME, key_pattern=self.trap_group, ns=self.ns, file=Copp.CONFIG_FILE) ret = self.match_engine.fetch(req) key_tg = "" @@ -295,9 +295,9 @@ def __fill_trap_group_in_conf_file(self, not_found_report=True): elif not_found_report: self.ret_temp["CONFIG_FILE"]["tables_not_found"].append(CFG_COPP_GROUP_TABLE_NAME) return False - - def __fill_trap_group_in_conf_db(self, not_found_report=True): - req = MatchRequest(table=CFG_COPP_GROUP_TABLE_NAME, key_pattern=self.trap_group, ns=self.ns, db="CONFIG_DB") + + def __fill_trap_group_in_conf_db(self, not_found_report=True): + req = MatchRequest(table=CFG_COPP_GROUP_TABLE_NAME, key_pattern=self.trap_group, ns=self.ns, db="CONFIG_DB") ret = self.match_engine.fetch(req) key_tg = "" if not ret["error"] and len(ret["keys"]) > 0: @@ -307,13 +307,13 @@ def __fill_trap_group_in_conf_db(self, not_found_report=True): elif not_found_report: self.ret_temp["CONFIG_DB"]["tables_not_found"].append(CFG_COPP_GROUP_TABLE_NAME) return False - + def __find_trap_id_in_conf_file(self, key_ptrn="*", do_fv_check=True): field_, value_ = None, None if do_fv_check: field_ = "trap_ids" value_ = self.trap_id - req = MatchRequest(file=Copp.CONFIG_FILE, table=CFG_COPP_TRAP_TABLE_NAME, key_pattern=key_ptrn, match_entire_list=False, + req = MatchRequest(file=Copp.CONFIG_FILE, table=CFG_COPP_TRAP_TABLE_NAME, key_pattern=key_ptrn, match_entire_list=False, ns=self.ns, return_fields=["trap_group"], field=field_, value=value_) ret = self.match_engine.fetch(req) if not ret["error"] and len(ret["keys"]) > 0: @@ -324,13 +324,13 @@ def __find_trap_id_in_conf_file(self, key_ptrn="*", do_fv_check=True): return key_copp_trap, ret["return_values"][key_copp_trap]["trap_group"] else: return "", "" - + def __find_trap_id_in_db(self, key_ptrn="*", do_fv_check=True): field_, value_ = None, None if do_fv_check: field_ = "trap_ids" value_ = self.trap_id - req = MatchRequest(db="CONFIG_DB", table=CFG_COPP_TRAP_TABLE_NAME, key_pattern=key_ptrn, match_entire_list=False, + req = MatchRequest(db="CONFIG_DB", table=CFG_COPP_TRAP_TABLE_NAME, key_pattern=key_ptrn, match_entire_list=False, ns=self.ns, return_fields=["trap_group"], field=field_, value=value_) ret = self.match_engine.fetch(req) if not ret["error"] and len(ret["keys"]) > 0: @@ -340,4 +340,4 @@ def __find_trap_id_in_db(self, key_ptrn="*", do_fv_check=True): key_copp_trap = ret["keys"][0] return key_copp_trap, ret["return_values"][key_copp_trap]["trap_group"] else: - return "", "" + return "", "" diff --git a/tests/dump_tests/module_tests/copp_test.py b/tests/dump_tests/module_tests/copp_test.py index 3d777c6877..ae7acc3774 100644 --- a/tests/dump_tests/module_tests/copp_test.py +++ b/tests/dump_tests/module_tests/copp_test.py @@ -1,4 +1,6 @@ -import json, os, sys +import json +import os +import sys import jsonpatch import unittest import pytest @@ -11,20 +13,22 @@ module_tests_path = os.path.dirname(__file__) dump_tests_path = os.path.join(module_tests_path, "../") tests_path = os.path.join(dump_tests_path, "../") -dump_test_input = os.path.join(tests_path,"dump_input") +dump_test_input = os.path.join(tests_path, "dump_input") # Location for dedicated db's used for UT -copp_files_path = os.path.join(dump_test_input,"copp") +copp_files_path = os.path.join(dump_test_input, "copp") dedicated_dbs = {} -dedicated_dbs['CONFIG_DB'] = os.path.join(copp_files_path, "config_db.json") -dedicated_dbs['APPL_DB'] = os.path.join(copp_files_path, "appl_db.json") +dedicated_dbs['CONFIG_DB'] = os.path.join(copp_files_path, "config_db.json") +dedicated_dbs['APPL_DB'] = os.path.join(copp_files_path, "appl_db.json") dedicated_dbs['ASIC_DB'] = os.path.join(copp_files_path, "asic_db.json") dedicated_dbs['STATE_DB'] = os.path.join(copp_files_path, "state_db.json") + def mock_connector(namespace, use_unix_socket_path=True): return MockSonicV2Connector(dedicated_dbs, namespace=namespace, use_unix_socket_path=use_unix_socket_path) + @pytest.fixture(scope="module", autouse=True) def verbosity_setup(): print("SETUP") @@ -33,13 +37,14 @@ def verbosity_setup(): print("TEARDOWN") os.environ["VERBOSE"] = "0" + @patch("dump.match_infra.SonicV2Connector", mock_connector) @patch("dump.plugins.copp.Copp.CONFIG_FILE", os.path.join(dump_test_input, "copp_cfg.json")) class TestCoppModule(unittest.TestCase): - + def test_usr_cfg_trap_and_copp_cfg_file_grp(self): ''' - Scenario: A custom COPP_TRAP table entry is defined by the user and the relevant Trap Group is configured through the copp_cfg file + Scenario: A custom COPP_TRAP table entry is defined by the user and the relevant Trap Group is configured through the copp_cfg file ''' params = {} params[Copp.ARG_NAME] = "snmp" @@ -52,11 +57,11 @@ def test_usr_cfg_trap_and_copp_cfg_file_grp(self): expect["CONFIG_DB"]["keys"].append("COPP_TRAP|snmp_grp") expect["APPL_DB"]["keys"].append("COPP_TABLE:queue4_group2") expect["STATE_DB"]["keys"].extend(["COPP_GROUP_TABLE|queue4_group2", "COPP_TRAP_TABLE|snmp_grp"]) - expect["ASIC_DB"]["keys"].extend(["ASIC_STATE:SAI_OBJECT_TYPE_HOSTIF_TRAP:oid:0x220000000004dc", "ASIC_STATE:SAI_OBJECT_TYPE_HOSTIF_TRAP_GROUP:oid:0x110000000004da", - "ASIC_STATE:SAI_OBJECT_TYPE_POLICER:oid:0x120000000004db","ASIC_STATE:SAI_OBJECT_TYPE_QUEUE:oid:0x150000000002a0"]) + expect["ASIC_DB"]["keys"].extend(["ASIC_STATE:SAI_OBJECT_TYPE_HOSTIF_TRAP:oid:0x220000000004dc", "ASIC_STATE:SAI_OBJECT_TYPE_HOSTIF_TRAP_GROUP:oid:0x110000000004da", + "ASIC_STATE:SAI_OBJECT_TYPE_POLICER:oid:0x120000000004db", "ASIC_STATE:SAI_OBJECT_TYPE_QUEUE:oid:0x150000000002a0"]) ddiff = DeepDiff(returned, expect, ignore_order=True) assert not ddiff, ddiff - + def test_copp_cfg_file_trap_and_copp_cfg_file_grp(self): ''' Scenario: Both the Trap ID and Trap Group are configured through copp_cfg file @@ -71,14 +76,14 @@ def test_copp_cfg_file_trap_and_copp_cfg_file_grp(self): expect["CONFIG_FILE"]["keys"].extend(["COPP_GROUP|queue4_group2", "COPP_TRAP|arp"]) expect["APPL_DB"]["keys"].append("COPP_TABLE:queue4_group2") expect["STATE_DB"]["keys"].extend(["COPP_GROUP_TABLE|queue4_group2", "COPP_TRAP_TABLE|arp"]) - expect["ASIC_DB"]["keys"].extend(["ASIC_STATE:SAI_OBJECT_TYPE_HOSTIF_TRAP:oid:0x220000000004dd", "ASIC_STATE:SAI_OBJECT_TYPE_HOSTIF_TRAP_GROUP:oid:0x110000000004da", - "ASIC_STATE:SAI_OBJECT_TYPE_POLICER:oid:0x120000000004db","ASIC_STATE:SAI_OBJECT_TYPE_QUEUE:oid:0x150000000002a0"]) + expect["ASIC_DB"]["keys"].extend(["ASIC_STATE:SAI_OBJECT_TYPE_HOSTIF_TRAP:oid:0x220000000004dd", "ASIC_STATE:SAI_OBJECT_TYPE_HOSTIF_TRAP_GROUP:oid:0x110000000004da", + "ASIC_STATE:SAI_OBJECT_TYPE_POLICER:oid:0x120000000004db", "ASIC_STATE:SAI_OBJECT_TYPE_QUEUE:oid:0x150000000002a0"]) ddiff = DeepDiff(returned, expect, ignore_order=True) assert not ddiff, ddiff - + def test_copp_cfg_file_trap_and_copp_cfg_file_grp_with_diff(self): ''' - Scenario: Both the Trap ID and Trap Group are configured through copp_cfg file. + Scenario: Both the Trap ID and Trap Group are configured through copp_cfg file. In addition, User also provided a diff for the COPP_GROUP entry ''' params = {} @@ -92,12 +97,12 @@ def test_copp_cfg_file_trap_and_copp_cfg_file_grp_with_diff(self): expect["CONFIG_DB"]["keys"].append("COPP_GROUP|queue2_group1") expect["APPL_DB"]["keys"].append("COPP_TABLE:queue2_group1") expect["STATE_DB"]["keys"].extend(["COPP_GROUP_TABLE|queue2_group1", "COPP_TRAP_TABLE|sflow"]) - expect["ASIC_DB"]["keys"].extend(["ASIC_STATE:SAI_OBJECT_TYPE_HOSTIF_TRAP:oid:0x220000000004de", "ASIC_STATE:SAI_OBJECT_TYPE_HOSTIF_TRAP_GROUP:oid:0x110000000004db", - "ASIC_STATE:SAI_OBJECT_TYPE_POLICER:oid:0x120000000004dc","ASIC_STATE:SAI_OBJECT_TYPE_QUEUE:oid:0x150000000002a1", + expect["ASIC_DB"]["keys"].extend(["ASIC_STATE:SAI_OBJECT_TYPE_HOSTIF_TRAP:oid:0x220000000004de", "ASIC_STATE:SAI_OBJECT_TYPE_HOSTIF_TRAP_GROUP:oid:0x110000000004db", + "ASIC_STATE:SAI_OBJECT_TYPE_POLICER:oid:0x120000000004dc", "ASIC_STATE:SAI_OBJECT_TYPE_QUEUE:oid:0x150000000002a1", "ASIC_STATE:SAI_OBJECT_TYPE_HOSTIF:oid:0xd0000000004d6", "ASIC_STATE:SAI_OBJECT_TYPE_HOSTIF_TABLE_ENTRY:oid:0x230000000004d8"]) ddiff = DeepDiff(returned, expect, ignore_order=True) assert not ddiff, ddiff - + def test_usr_cfg_trap_with_missing_group(self): ''' Scenario: A custom COPP_TRAP table entry is defined by the user, but the relevant COPP_GROUP entry is missing @@ -116,10 +121,10 @@ def test_usr_cfg_trap_with_missing_group(self): expect["ASIC_DB"]["tables_not_found"].extend(["ASIC_STATE:SAI_OBJECT_TYPE_HOSTIF_TRAP", "ASIC_STATE:SAI_OBJECT_TYPE_HOSTIF_TRAP_GROUP"]) ddiff = DeepDiff(returned, expect, ignore_order=True) assert not ddiff, ddiff - + def test_copp_cfg_file_group_and_copp_cfg_file_trap_with_diff(self): ''' - Scenario: User has added a trap_id to a COPP_TRAP entry. The COPP_TRAP entry is already present in copp_cfg file (i.e diff) + Scenario: User has added a trap_id to a COPP_TRAP entry. The COPP_TRAP entry is already present in copp_cfg file (i.e diff) and the relevant trap group is in copp_cfg file ''' params = {} @@ -133,11 +138,11 @@ def test_copp_cfg_file_group_and_copp_cfg_file_trap_with_diff(self): expect["CONFIG_DB"]["keys"].append("COPP_TRAP|bgp") expect["APPL_DB"]["keys"].append("COPP_TABLE:queue4_group1") expect["STATE_DB"]["keys"].extend(["COPP_GROUP_TABLE|queue4_group1", "COPP_TRAP_TABLE|bgp"]) - expect["ASIC_DB"]["keys"].extend(["ASIC_STATE:SAI_OBJECT_TYPE_HOSTIF_TRAP:oid:0x220000000004df", "ASIC_STATE:SAI_OBJECT_TYPE_HOSTIF_TRAP_GROUP:oid:0x110000000004db", - "ASIC_STATE:SAI_OBJECT_TYPE_POLICER:oid:0x120000000004dc","ASIC_STATE:SAI_OBJECT_TYPE_QUEUE:oid:0x150000000002a1"]) + expect["ASIC_DB"]["keys"].extend(["ASIC_STATE:SAI_OBJECT_TYPE_HOSTIF_TRAP:oid:0x220000000004df", "ASIC_STATE:SAI_OBJECT_TYPE_HOSTIF_TRAP_GROUP:oid:0x110000000004db", + "ASIC_STATE:SAI_OBJECT_TYPE_POLICER:oid:0x120000000004dc", "ASIC_STATE:SAI_OBJECT_TYPE_QUEUE:oid:0x150000000002a1"]) ddiff = DeepDiff(returned, expect, ignore_order=True) assert not ddiff, ddiff - + def test_invalid_trap_id(self): params = {} params[Copp.ARG_NAME] = "random" @@ -153,7 +158,7 @@ def test_invalid_trap_id(self): expect["ASIC_DB"]["tables_not_found"].extend(["ASIC_STATE:SAI_OBJECT_TYPE_HOSTIF_TRAP", "ASIC_STATE:SAI_OBJECT_TYPE_HOSTIF_TRAP_GROUP"]) ddiff = DeepDiff(returned, expect, ignore_order=True) assert not ddiff, ddiff - + def test_missing_asic_dump(self): params = {} params[Copp.ARG_NAME] = "ospf" @@ -169,7 +174,7 @@ def test_missing_asic_dump(self): expect["ASIC_DB"]["tables_not_found"].extend(["ASIC_STATE:SAI_OBJECT_TYPE_HOSTIF_TRAP", "ASIC_STATE:SAI_OBJECT_TYPE_HOSTIF_TRAP_GROUP"]) ddiff = DeepDiff(returned, expect, ignore_order=True) assert not ddiff, ddiff - + def test_missing_appl(self): params = {} params[Copp.ARG_NAME] = "lldp" @@ -184,7 +189,7 @@ def test_missing_appl(self): expect["ASIC_DB"]["tables_not_found"].extend(["ASIC_STATE:SAI_OBJECT_TYPE_HOSTIF_TRAP", "ASIC_STATE:SAI_OBJECT_TYPE_HOSTIF_TRAP_GROUP"]) ddiff = DeepDiff(returned, expect, ignore_order=True) assert not ddiff, ddiff - + def test_missing_state(self): params = {} params[Copp.ARG_NAME] = "src_nat_miss" @@ -192,15 +197,15 @@ def test_missing_state(self): m_copp = Copp() returned = m_copp.execute(params) print(returned) - expect = create_template_dict(dbs=["CONFIG_FILE", "APPL_DB", "ASIC_DB", "STATE_DB","CONFIG_DB"]) + expect = create_template_dict(dbs=["CONFIG_FILE", "APPL_DB", "ASIC_DB", "STATE_DB", "CONFIG_DB"]) expect["CONFIG_FILE"]["keys"].extend(["COPP_GROUP|queue1_group2", "COPP_TRAP|nat"]) expect["APPL_DB"]["keys"].append("COPP_TABLE:queue1_group2") expect["STATE_DB"]["tables_not_found"].extend(["COPP_GROUP_TABLE", "COPP_TRAP_TABLE"]) - expect["ASIC_DB"]["keys"].extend(["ASIC_STATE:SAI_OBJECT_TYPE_HOSTIF_TRAP:oid:0x220000000004e0", "ASIC_STATE:SAI_OBJECT_TYPE_HOSTIF_TRAP_GROUP:oid:0x110000000004e0", + expect["ASIC_DB"]["keys"].extend(["ASIC_STATE:SAI_OBJECT_TYPE_HOSTIF_TRAP:oid:0x220000000004e0", "ASIC_STATE:SAI_OBJECT_TYPE_HOSTIF_TRAP_GROUP:oid:0x110000000004e0", "ASIC_STATE:SAI_OBJECT_TYPE_QUEUE:oid:0x150000000002a1"]) ddiff = DeepDiff(returned, expect, ignore_order=True) assert not ddiff, ddiff - + def test_all_args(self): params = {} m_copp = Copp()