Skip to content

Commit 4e132c1

Browse files
authored
[debug dump] Refactoring Modules and Unit Tests (sonic-net#1943)
What I did Moved the "populate_mock" method to dump/helper.py i.e. common to all the tests Moved the "add_to_ret_template" to Executor class i.e. common across all the modules. How I did it How to verify it Unit Tests's:
1 parent b550c44 commit 4e132c1

21 files changed

+57
-233
lines changed

dump/helper.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import os, sys
1+
import os, sys, json
22

33
def create_template_dict(dbs):
44
""" Generate a Template which will be returned by Executor Classes """
@@ -33,3 +33,15 @@ def sort_lists(ret_template):
3333
if isinstance(ret_template[db][key], list):
3434
ret_template[db][key].sort()
3535
return ret_template
36+
37+
38+
def populate_mock(db, db_names, dedicated_dbs):
39+
for db_name in db_names:
40+
db.connect(db_name)
41+
# Delete any default data
42+
db.delete_all_by_pattern(db_name, "*")
43+
with open(dedicated_dbs[db_name]) as f:
44+
mock_json = json.load(f)
45+
for key in mock_json:
46+
for field, value in mock_json[key].items():
47+
db.set(db_name, key, field, value)

dump/plugins/copp.py

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,6 @@ def __init__(self, match_engine=None):
7171
self.trap_group = ""
7272
self.trap_id = ""
7373
self.ns = ""
74-
self.ret_temp = {}
7574

7675
def fetch_all_trap_ids(self, ret):
7776
traps = []
@@ -108,17 +107,11 @@ def execute(self, params):
108107
def handle_state_db(self):
109108
req = MatchRequest(db="STATE_DB", table="COPP_TRAP_TABLE", key_pattern=self.copp_trap_cfg_key)
110109
ret = self.match_engine.fetch(req)
111-
if not ret["error"] and len(ret["keys"]) > 0:
112-
self.ret_temp["STATE_DB"]["keys"].append(ret["keys"][0])
113-
else:
114-
self.ret_temp["STATE_DB"]["tables_not_found"].append("COPP_TRAP_TABLE")
110+
self.add_to_ret_template(req.table, req.db, ret["keys"], ret["error"])
115111

116112
req = MatchRequest(db="STATE_DB", table="COPP_GROUP_TABLE", key_pattern=self.trap_group)
117113
ret = self.match_engine.fetch(req)
118-
if not ret["error"] and len(ret["keys"]) > 0:
119-
self.ret_temp["STATE_DB"]["keys"].append(ret["keys"][0])
120-
else:
121-
self.ret_temp["STATE_DB"]["tables_not_found"].append("COPP_GROUP_TABLE")
114+
self.add_to_ret_template(req.table, req.db, ret["keys"], ret["error"])
122115

123116
def handle_appl_db(self):
124117
req = MatchRequest(db="APPL_DB", table=APP_COPP_TABLE_NAME, key_pattern="*", field="trap_ids",
@@ -207,17 +200,15 @@ def __get_asic_policer_obj(self, policer_sai_obj):
207200
return
208201
req = MatchRequest(db="ASIC_DB", table=ASIC_POLICER_OBJ, key_pattern=policer_sai_obj, ns=self.ns)
209202
ret = self.match_engine.fetch(req)
210-
if not ret["error"] and len(ret["keys"]) > 0:
211-
self.ret_temp["ASIC_DB"]["keys"].append(ret["keys"][0])
203+
self.add_to_ret_template(req.table, req.db, ret["keys"], ret["error"], False)
212204

213205
def __get_asic_queue_obj(self, queue_sai_obj):
214206
# Not adding tp tables_not_found because of the type of reason specified for policer obj
215207
if not queue_sai_obj:
216208
return
217209
req = MatchRequest(db="ASIC_DB", table=ASIC_QUEUE_OBJ, field="SAI_QUEUE_ATTR_INDEX", value=queue_sai_obj, ns=self.ns)
218210
ret = self.match_engine.fetch(req)
219-
if not ret["error"] and len(ret["keys"]) > 0:
220-
self.ret_temp["ASIC_DB"]["keys"].append(ret["keys"][0])
211+
self.add_to_ret_template(req.table, req.db, ret["keys"], ret["error"], False)
221212

222213
def __get_asic_hostif_entry_obj(self, sai_trap_key):
223214
# Not adding tp tables_not_found because of the type of reason specified for policer obj
@@ -231,9 +222,9 @@ def __get_asic_hostif_entry_obj(self, sai_trap_key):
231222
req = MatchRequest(db="ASIC_DB", table=ASIC_HOSTIF_TABLE_ENTRY, field="SAI_HOSTIF_TABLE_ENTRY_ATTR_TRAP_ID",
232223
value=sai_trap_vid, return_fields=["SAI_HOSTIF_TABLE_ENTRY_ATTR_HOST_IF"], ns=self.ns)
233224
ret = self.match_engine.fetch(req)
225+
self.add_to_ret_template(req.table, req.db, ret["keys"], ret["error"], False)
234226
if not ret["error"] and len(ret["keys"]) > 0:
235227
sai_hostif_table_entry_key = ret["keys"][0]
236-
self.ret_temp["ASIC_DB"]["keys"].append(sai_hostif_table_entry_key)
237228
sai_hostif_vid = ret["return_values"][sai_hostif_table_entry_key]["SAI_HOSTIF_TABLE_ENTRY_ATTR_HOST_IF"]
238229
return sai_hostif_vid
239230

@@ -243,8 +234,7 @@ def __get_asic_hostif_obj(self, sai_hostif_vid):
243234
return
244235
req = MatchRequest(db="ASIC_DB", table=ASIC_HOSTIF, key_pattern=sai_hostif_vid, ns=self.ns)
245236
ret = self.match_engine.fetch(req)
246-
if not ret["error"] and len(ret["keys"]) > 0:
247-
self.ret_temp["ASIC_DB"]["keys"].append(ret["keys"][0])
237+
self.add_to_ret_template(req.table, req.db, ret["keys"], ret["error"], False)
248238

249239
# When the user writes config to CONFIG_DB, that takes precedence over default config
250240
def handle_user_and_default_config(self):

dump/plugins/evpn.py

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ class Evpn(Executor):
1111

1212
def __init__(self, match_engine=None):
1313
super().__init__(match_engine)
14-
self.ret_temp = {}
1514
self.ns = ''
1615
self.remote_ip = ''
1716
self.vlan = ''
@@ -41,14 +40,6 @@ def execute(self, params):
4140
self.init_state_evpn_info(evpn_name)
4241
return self.ret_temp
4342

44-
def add_to_ret_template(self, table, db, keys, err):
45-
if not err and keys:
46-
self.ret_temp[db]["keys"].extend(keys)
47-
return True
48-
else:
49-
self.ret_temp[db]["tables_not_found"].extend([table])
50-
return False
51-
5243
def init_evpn_appl_info(self, evpn_name):
5344
req = MatchRequest(db="APPL_DB", table="VXLAN_REMOTE_VNI_TABLE", key_pattern=evpn_name, ns=self.ns)
5445
ret = self.match_engine.fetch(req)

dump/plugins/executor.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ def __init__(self, match_engine=None):
1616
self.match_engine = MatchEngine(None)
1717
else:
1818
self.match_engine = match_engine
19+
self.ret_temp = {}
1920

2021
@abstractmethod
2122
def execute(self, params):
@@ -24,3 +25,14 @@ def execute(self, params):
2425
@abstractmethod
2526
def get_all_args(self, ns):
2627
pass
28+
29+
def add_to_ret_template(self, table, db, keys, err, add_to_tables_not_found=True):
30+
if db not in self.ret_temp:
31+
return []
32+
33+
if not err and keys:
34+
self.ret_temp[db]["keys"].extend(keys)
35+
return keys
36+
elif add_to_tables_not_found:
37+
self.ret_temp[db]["tables_not_found"].extend([table])
38+
return []

dump/plugins/port.py

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,6 @@ def execute(self, params):
2929
self.init_state_port_info(port_name)
3030
return self.ret_temp
3131

32-
def add_to_ret_template(self, table, db, keys, err):
33-
if not err and keys:
34-
self.ret_temp[db]["keys"].extend(keys)
35-
return True
36-
else:
37-
self.ret_temp[db]["tables_not_found"].extend([table])
38-
return False
39-
4032
def init_port_config_info(self, port_name):
4133
req = MatchRequest(db="CONFIG_DB", table="PORT", key_pattern=port_name, ns=self.ns)
4234
ret = self.match_engine.fetch(req)

dump/plugins/portchannel.py

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ class Portchannel(Executor):
1111

1212
def __init__(self, match_engine=None):
1313
super().__init__(match_engine)
14-
self.ret_temp = {}
1514
self.ns = ''
1615
self.lag_members = set()
1716

@@ -38,14 +37,6 @@ def execute(self, params_dict):
3837
self.init_lag_asic_info(lag_type_objs_asic)
3938
return self.ret_temp
4039

41-
def add_to_ret_template(self, table, db, keys, err):
42-
if not err and keys:
43-
self.ret_temp[db]["keys"].extend(keys)
44-
return True
45-
else:
46-
self.ret_temp[db]["tables_not_found"].extend([table])
47-
return False
48-
4940
def init_lag_config_info(self):
5041
req = MatchRequest(db="CONFIG_DB", table="PORTCHANNEL", key_pattern=self.lag_name, ns=self.ns)
5142
ret = self.match_engine.fetch(req)

dump/plugins/portchannel_member.py

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ class Portchannel_Member(Executor):
1010

1111
def __init__(self, match_engine=None):
1212
super().__init__(match_engine)
13-
self.ret_temp = {}
1413
self.ns = ''
1514
self.lag_member_key = ''
1615
self.lag = ''
@@ -39,14 +38,6 @@ def execute(self, params_dict):
3938
self.init_lag_member_type_obj_asic_info()
4039
return self.ret_temp
4140

42-
def add_to_ret_template(self, table, db, keys, err):
43-
if not err and keys:
44-
self.ret_temp[db]["keys"].extend(keys)
45-
return True
46-
else:
47-
self.ret_temp[db]["tables_not_found"].extend([table])
48-
return False
49-
5041
def init_lag_member_config_info(self):
5142
req = MatchRequest(db="CONFIG_DB", table="PORTCHANNEL_MEMBER", key_pattern=self.lag_member_key, ns=self.ns)
5243
ret = self.match_engine.fetch(req)

dump/plugins/route.py

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@ def __init__(self, match_engine=None):
5353
4) CLASS_BASED_NEXT_HOP_GROUP_TABLE
5454
5) NEXTHOP_GROUP_TABLE
5555
"""
56-
self.ret_temp = {}
5756
self.ns = ''
5857
self.dest_net = ''
5958
self.nh_id = ''
@@ -83,14 +82,6 @@ def execute(self, params):
8382
self.init_asic_nh()
8483
return self.ret_temp
8584

86-
def add_to_ret_template(self, table, db, keys, err, add_to_tables_not_found=True):
87-
if not err and keys:
88-
self.ret_temp[db]["keys"].extend(keys)
89-
return keys
90-
elif add_to_tables_not_found:
91-
self.ret_temp[db]["tables_not_found"].extend([table])
92-
return []
93-
9485
def init_route_config_info(self):
9586
req = MatchRequest(db="CONFIG_DB", table="STATIC_ROUTE", key_pattern=self.dest_net, ns=self.ns)
9687
ret = self.match_engine.fetch(req)

dump/plugins/vlan.py

Lines changed: 5 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -30,27 +30,18 @@ def execute(self, params_dict):
3030
def init_vlan_config_info(self, vlan_name):
3131
req = MatchRequest(db="CONFIG_DB", table="VLAN", key_pattern=vlan_name, ns=self.ns)
3232
ret = self.match_engine.fetch(req)
33-
if not ret["error"] and len(ret["keys"]) != 0:
34-
self.ret_temp[req.db]["keys"] = ret["keys"]
35-
else:
36-
self.ret_temp[req.db]["tables_not_found"] = [req.table]
33+
self.add_to_ret_template(req.table, req.db, ret["keys"], ret["error"])
3734

3835
def init_vlan_appl_info(self, vlan_name):
3936
req = MatchRequest(db="APPL_DB", table="VLAN_TABLE", key_pattern=vlan_name, ns=self.ns)
4037
ret = self.match_engine.fetch(req)
41-
if not ret["error"] and len(ret["keys"]) != 0:
42-
self.ret_temp[req.db]["keys"] = ret["keys"]
43-
else:
44-
self.ret_temp[req.db]["tables_not_found"] = [req.table]
38+
self.add_to_ret_template(req.table, req.db, ret["keys"], ret["error"])
4539

4640
def init_state_vlan_info(self, vlan_name):
4741
req = MatchRequest(db="STATE_DB", table="VLAN_TABLE", key_pattern=vlan_name, ns=self.ns)
4842
ret = self.match_engine.fetch(req)
49-
if not ret["error"] and len(ret["keys"]) != 0:
50-
self.ret_temp[req.db]["keys"] = ret["keys"]
51-
else:
52-
self.ret_temp[req.db]["tables_not_found"] = [req.table]
53-
43+
self.add_to_ret_template(req.table, req.db, ret["keys"], ret["error"])
44+
5445
def init_asic_vlan_info(self, vlan_name):
5546
# Convert 'Vlanxxx' to 'xxx'
5647
if vlan_name[0:4] != "Vlan" or not vlan_name[4:].isnumeric():
@@ -62,8 +53,4 @@ def init_asic_vlan_info(self, vlan_name):
6253
req = MatchRequest(db="ASIC_DB", table="ASIC_STATE:SAI_OBJECT_TYPE_VLAN", key_pattern="*", field="SAI_VLAN_ATTR_VLAN_ID",
6354
value=str(vlan_num), ns=self.ns)
6455
ret = self.match_engine.fetch(req)
65-
if not ret["error"] and len(ret["keys"]) != 0:
66-
self.ret_temp[req.db]["keys"] = ret["keys"]
67-
else:
68-
self.ret_temp[req.db]["tables_not_found"] = [req.table]
69-
56+
self.add_to_ret_template(req.table, req.db, ret["keys"], ret["error"])

dump/plugins/vlan_member.py

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -49,20 +49,12 @@ def init_vlan_member_config_info(self, vlan_name, member_name):
4949
def init_vlan_member_appl_info(self, vlan_name, member_name):
5050
req = MatchRequest(db="APPL_DB", table="VLAN_MEMBER_TABLE", key_pattern=vlan_name+':'+member_name+"*", ns=self.ns)
5151
ret = self.match_engine.fetch(req)
52-
if not ret["error"] and len(ret["keys"]) != 0:
53-
for mem in ret["keys"]:
54-
self.ret_temp[req.db]["keys"].append(mem)
55-
else:
56-
self.ret_temp[req.db]["tables_not_found"].append(req.table)
52+
self.add_to_ret_template(req.table, req.db, ret["keys"], ret["error"])
5753

5854
def init_state_vlan_member_info(self, vlan_name, member_name):
5955
req = MatchRequest(db="STATE_DB", table="VLAN_MEMBER_TABLE", key_pattern=vlan_name+'|'+member_name+"*", ns=self.ns)
6056
ret = self.match_engine.fetch(req)
61-
if not ret["error"] and len(ret["keys"]) != 0:
62-
for mem in ret["keys"]:
63-
self.ret_temp[req.db]["keys"].append(mem)
64-
else:
65-
self.ret_temp[req.db]["tables_not_found"].append(req.table)
57+
self.add_to_ret_template(req.table, req.db, ret["keys"], ret["error"])
6658

6759
def init_asic_vlan_member_info(self, vlan_name, member_name):
6860

@@ -140,5 +132,3 @@ def init_asic_vlan_member_info(self, vlan_name, member_name):
140132
else:
141133
self.ret_temp["ASIC_DB"]["tables_not_found"].append("ASIC_STATE:SAI_OBJECT_TYPE_VLAN_MEMBER")
142134
self.ret_temp["ASIC_DB"]["tables_not_found"].append("ASIC_STATE:SAI_OBJECT_TYPE_BRIDGE_PORT")
143-
144-

0 commit comments

Comments
 (0)