aboutsummaryrefslogtreecommitdiffstats
path: root/tools/indexcap.py
diff options
context:
space:
mode:
authorKovarththanan Rajaratnam <kovarththanan.rajaratnam@gmail.com>2009-09-26 09:48:46 +0000
committerKovarththanan Rajaratnam <kovarththanan.rajaratnam@gmail.com>2009-09-26 09:48:46 +0000
commitd557791862f5a17c233a008f23cdeb2e222d120b (patch)
treecf9794ee30c7e1dad08b1d572856b0346602e547 /tools/indexcap.py
parent386a463b323a15718051152ec17e4df3aaa83d8c (diff)
Start implementing 'compare against baseline'. When fully implemented we'll be able to compare any changes that we've made to the working directory against a clean/baseline version of tshark.
svn path=/trunk/; revision=30168
Diffstat (limited to 'tools/indexcap.py')
-rwxr-xr-xtools/indexcap.py55
1 files changed, 44 insertions, 11 deletions
diff --git a/tools/indexcap.py b/tools/indexcap.py
index fd10739230..09d0d9e259 100755
--- a/tools/indexcap.py
+++ b/tools/indexcap.py
@@ -78,9 +78,9 @@ def dissect_file_process(tshark, file):
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
(stdout, stderr) = p.communicate()
if p.returncode == 0:
- return (file, True)
+ return (file, True, stdout, stderr)
else:
- return (file, False)
+ return (file, False, stdout, stderr)
except KeyboardInterrupt:
return False
@@ -100,6 +100,24 @@ def dissect_files(tshark, num_procs, max_files, cap_files):
exit(0)
+def compare_files(tshark_bin, tshark_cmp, num_procs, max_files, cap_files):
+ pool = multiprocessing.Pool(num_procs)
+ results_bin = [pool.apply_async(dissect_file_process, [tshark_bin, file]) for file in cap_files]
+ results_cmp = [pool.apply_async(dissect_file_process, [tshark_cmp, file]) for file in cap_files]
+ try:
+ for (cur_item_idx,(result_async_bin, result_async_cmp)) in enumerate(zip(results_bin, results_cmp)):
+ file_result_bin = result_async_bin.get()
+ file_result_cmp = result_async_cmp.get()
+ action = "FAILED" if (file_result_cmp[1] is False or file_result_bin[1] is False) else "PASSED"
+ print "%s [%u/%u] %s %u bytes" % (action, cur_item_idx+1, max_files, file_result_bin[0], os.path.getsize(file_result_bin[0]))
+ print "%s [%u/%u] %s %u bytes" % (action, cur_item_idx+1, max_files, file_result_cmp[0], os.path.getsize(file_result_cmp[0]))
+ except KeyboardInterrupt:
+ print "%s was interrupted by user" % (sys.argv[0])
+ pool.terminate()
+ exit(1)
+
+ exit(0)
+
def list_all_proto(cap_hash):
proto_hash = {}
for files_hash in cap_hash.itervalues():
@@ -156,8 +174,10 @@ def main():
help="Dissect all matching files")
parser.add_option("-m", "--max-files", dest="max_files", default=sys.maxint, type="int",
help="Max number of files to process")
- parser.add_option("-b", "--binary-dir", dest="bin_dir", default=os.getcwd(),
+ parser.add_option("-b", "--binary-dir", dest="bin_dir", default=os.getcwd(),
help="Directory containing tshark executable")
+ parser.add_option("-c", "--compare-dir", dest="compare_dir", default=None,
+ help="Directory containing tshark executable which is used for comparison")
parser.add_option("-j", dest="num_procs", default=1, type=int,
help="Max number of processes to spawn")
parser.add_option("", "--list-all-proto", dest="list_all_proto", default=False, action="store_true",
@@ -179,6 +199,9 @@ def main():
if options.dissect_files and not options.list_all_files and not options.list_all_proto_files:
parser.error("--list-all-files or --list-all-proto-files must be specified")
+ if options.dissect_files and not options.compare_dir is None:
+ parser.error("--dissect-files and --compare-dir cannot be specified at the same time")
+
index_file_name = args.pop(0)
paths = args
cap_hash = {}
@@ -204,14 +227,22 @@ def main():
indexed_files = list_all_proto_files(cap_hash, options.list_all_proto_files)
print indexed_files
- tshark = find_tshark_executable(options.bin_dir)
- if not tshark is None:
- print "tshark:", tshark, "[FOUND]"
+ tshark_bin = find_tshark_executable(options.bin_dir)
+ if not tshark_bin is None:
+ print "tshark:", tshark_bin, "[FOUND]"
else:
- print "tshark:", tshark, "[MISSING]"
+ print "tshark:", tshark_bin, "[MISSING]"
exit(1)
- if options.dissect_files:
+ if not options.compare_dir is None:
+ tshark_cmp = find_tshark_executable(options.compare_dir)
+ if not tshark_cmp is None:
+ print "tshark:", tshark_cmp, "[FOUND]"
+ else:
+ print "tshark:", tshark_cmp, "[MISSING]"
+ exit(1)
+
+ if options.dissect_files or options.compare_dir:
cap_files = indexed_files
elif options.list_all_proto_files or options.list_all_files:
exit(0)
@@ -223,10 +254,12 @@ def main():
print "%u total files, %u working files\n" % (len(cap_files), options.max_files)
cap_files = cap_files[:options.max_files]
- if options.dissect_files:
- dissect_files(tshark, options.num_procs, options.max_files, cap_files)
+ if options.compare_dir:
+ compare_files(tshark_bin, tshark_cmp, options.num_procs, options.max_files, cap_files)
+ elif options.dissect_files:
+ dissect_files(tshark_bin, options.num_procs, options.max_files, cap_files)
else:
- extract_protos_from_file(tshark, options.num_procs, options.max_files, cap_files, cap_hash, index_file_name)
+ extract_protos_from_file(tshark_bin, options.num_procs, options.max_files, cap_files, cap_hash, index_file_name)
if __name__ == "__main__":
main()