Skip to content

Commit 8768580

Browse files
authored
[filter-fdb] Call Filter FDB Main From Within Test Code (#1051)
Code coverage requires that python code be run with the same process. Current test code was invoking filter fdb via shell which launches new process and so coverage is not available. This PR calls the main method from within test code. signed-off-by: Tamer Ahmed <tamer.ahmed@microsoft.com>
1 parent 3297b7a commit 8768580

File tree

6 files changed

+17
-28
lines changed

6 files changed

+17
-28
lines changed

fdbutil/__init__.py

Whitespace-only changes.

scripts/filter_fdb_entries.py fdbutil/filter_fdb_entries.py

+8-21
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
#!/usr/bin/env python
2-
31
import json
42
import sys
53
import os
@@ -124,44 +122,33 @@ def file_exists_or_raise(filename):
124122
if not os.path.exists(filename):
125123
raise Exception("file '{0}' does not exist".format(filename))
126124

127-
def main():
125+
def main(argv=sys.argv):
128126
parser = argparse.ArgumentParser()
129127
parser.add_argument('-f', '--fdb', type=str, default='/tmp/fdb.json', help='fdb file name')
130128
parser.add_argument('-a', '--arp', type=str, default='/tmp/arp.json', help='arp file name')
131129
parser.add_argument('-c', '--config_db', type=str, default='/tmp/config_db.json', help='config db file name')
132130
parser.add_argument('-b', '--backup_file', type=bool, default=True, help='Back up old fdb entries file')
133-
args = parser.parse_args()
131+
args = parser.parse_args(argv[1:])
134132

135133
fdb_filename = args.fdb
136134
arp_filename = args.arp
137135
config_db_filename = args.config_db
138136
backup_file = args.backup_file
139137

138+
res = 0
140139
try:
140+
syslog.openlog('filter_fdb_entries')
141141
file_exists_or_raise(fdb_filename)
142142
file_exists_or_raise(arp_filename)
143143
file_exists_or_raise(config_db_filename)
144144
except Exception as e:
145145
syslog.syslog(syslog.LOG_ERR, "Got an exception %s: Traceback: %s" % (str(e), traceback.format_exc()))
146-
else:
147-
filter_fdb_entries(fdb_filename, arp_filename, config_db_filename, backup_file)
148-
149-
return 0
150-
151-
if __name__ == '__main__':
152-
res = 0
153-
try:
154-
syslog.openlog('filter_fdb_entries')
155-
res = main()
156146
except KeyboardInterrupt:
157147
syslog.syslog(syslog.LOG_NOTICE, "SIGINT received. Quitting")
158148
res = 1
159-
except Exception as e:
160-
syslog.syslog(syslog.LOG_ERR, "Got an exception %s: Traceback: %s" % (str(e), traceback.format_exc()))
161-
res = 2
149+
else:
150+
filter_fdb_entries(fdb_filename, arp_filename, config_db_filename, backup_file)
162151
finally:
163152
syslog.closelog()
164-
try:
165-
sys.exit(res)
166-
except SystemExit:
167-
os._exit(res)
153+
154+
return res

pytest.ini

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
[pytest]
22
filterwarnings =
33
ignore::DeprecationWarning
4-
addopts = --cov=acl_loader --cov=clear --cov=config --cov=connect --cov=consutil --cov=counterpoll --cov=crm --cov=debug --cov=fwutil --cov=pcieutil --cov=pfcwd --cov=psuutil --cov=pddf_fanutil --cov=pddf_ledutil --cov=pddf_psuutil --cov=pddf_thermalutil --cov=scripts --cov=sfputil --cov=show --cov=sonic_installer --cov=ssdutil --cov=utilities_common --cov=watchdogutil --cov-report html --cov-report term --cov-report xml
4+
addopts = --cov=acl_loader --cov=clear --cov=config --cov=connect --cov=consutil --cov=counterpoll --cov=crm --cov=debug --cov=fdbutil --cov=fwutil --cov=pcieutil --cov=pfcwd --cov=psuutil --cov=pddf_fanutil --cov=pddf_ledutil --cov=pddf_psuutil --cov=pddf_thermalutil --cov=scripts --cov=sfputil --cov=show --cov=sonic_installer --cov=ssdutil --cov=utilities_common --cov=watchdogutil --cov-report html --cov-report term --cov-report xml

scripts/fast-reboot

+1-1
Original file line numberDiff line numberDiff line change
@@ -456,7 +456,7 @@ if [[ "$REBOOT_TYPE" = "fast-reboot" ]]; then
456456
457457
FILTER_FDB_ENTRIES_RC=0
458458
# Filter FDB entries using MAC addresses from ARP table
459-
/usr/bin/filter_fdb_entries.py -f $DUMP_DIR/fdb.json -a $DUMP_DIR/arp.json -c $CONFIG_DB_FILE || FILTER_FDB_ENTRIES_RC=$?
459+
/usr/bin/filter_fdb_entries -f $DUMP_DIR/fdb.json -a $DUMP_DIR/arp.json -c $CONFIG_DB_FILE || FILTER_FDB_ENTRIES_RC=$?
460460
if [[ FILTER_FDB_ENTRIES_RC -ne 0 ]]; then
461461
error "Failed to filter FDb entries. Exit code: $FILTER_FDB_ENTRIES_RC"
462462
unload_kernel

setup.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
'ssdutil',
4242
'pfc',
4343
'psuutil',
44+
'fdbutil',
4445
'fwutil',
4546
'pcieutil',
4647
'pddf_fanutil',
@@ -78,7 +79,6 @@
7879
'scripts/fast-reboot-dump.py',
7980
'scripts/fdbclear',
8081
'scripts/fdbshow',
81-
'scripts/filter_fdb_entries.py',
8282
'scripts/gearboxutil',
8383
'scripts/generate_dump',
8484
'scripts/intfutil',
@@ -124,6 +124,7 @@
124124
'counterpoll = counterpoll.main:cli',
125125
'crm = crm.main:cli',
126126
'debug = debug.main:cli',
127+
'filter_fdb_entries = fdbutil.filter_fdb_entries:main',
127128
'pfcwd = pfcwd.main:cli',
128129
'sfputil = sfputil.main:cli',
129130
'ssdutil = ssdutil.main:ssdutil',

tests/filter_fdb_entries_test.py

+5-4
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
from collections import defaultdict
99
from filter_fdb_input.test_vectors import filterFdbEntriesTestVector
10+
from fdbutil.filter_fdb_entries import main as filterFdbMain
1011

1112
class TestFilterFdbEntries(object):
1213
"""
@@ -162,16 +163,16 @@ def testFilterFdbEntries(self, testData):
162163
"""
163164
try:
164165
self.__setUp(testData)
165-
166-
stdout, stderr, rc = self.__runCommand([
167-
"scripts/filter_fdb_entries.py",
166+
argv = [
167+
"filter_fdb_entries",
168168
"-a",
169169
self.ARP_FILENAME,
170170
"-f",
171171
self.FDB_FILENAME,
172172
"-c",
173173
self.CONFIG_DB_FILENAME,
174-
])
174+
]
175+
rc = filterFdbMain(argv)
175176
assert rc == 0, "Filter_fdb_entries.py failed with '{0}'".format(stderr)
176177
assert self.__verifyOutput(), "Test failed for test data: {0}".format(testData)
177178
finally:

0 commit comments

Comments
 (0)