diff options
author | Kovarththanan Rajaratnam <kovarththanan.rajaratnam@gmail.com> | 2009-09-26 11:05:59 +0000 |
---|---|---|
committer | Kovarththanan Rajaratnam <kovarththanan.rajaratnam@gmail.com> | 2009-09-26 11:05:59 +0000 |
commit | 0638d407b7348df65561456553fd36697dffce6a (patch) | |
tree | 3ca52f04a64e4f3394263be1f8c0d39cd0b374e1 /tools | |
parent | d557791862f5a17c233a008f23cdeb2e222d120b (diff) |
* Redirect stdout/stderr to temporary files
* Do file comparison on stdout/stderr output
svn path=/trunk/; revision=30169
Diffstat (limited to 'tools')
-rwxr-xr-x | tools/indexcap.py | 37 |
1 files changed, 28 insertions, 9 deletions
diff --git a/tools/indexcap.py b/tools/indexcap.py index 09d0d9e259..23e25a331e 100755 --- a/tools/indexcap.py +++ b/tools/indexcap.py @@ -32,6 +32,8 @@ import os import subprocess import re import pickle +import tempfile +import filecmp def extract_protos_from_file_proces(tshark, file): try: @@ -72,22 +74,29 @@ def extract_protos_from_file(tshark, num_procs, max_files, cap_files, cap_hash, index_file.close() exit(0) -def dissect_file_process(tshark, file): +def dissect_file_process(tshark, tmpdir, file): try: + (handle_o, tmpfile_o) = tempfile.mkstemp(suffix='_stdout', dir=tmpdir) + (handle_e, tmpfile_e) = tempfile.mkstemp(suffix='_stderr', dir=tmpdir) cmd = [tshark, "-nxVr", file] - p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + p = subprocess.Popen(cmd, stdout=handle_o, stderr=handle_e) (stdout, stderr) = p.communicate() if p.returncode == 0: - return (file, True, stdout, stderr) + return (file, True, tmpfile_o, tmpfile_e) else: - return (file, False, stdout, stderr) + return (file, False, tmpfile_o, tmpfile_e) except KeyboardInterrupt: return False + finally: + os.close(handle_o) + os.close(handle_e) + def dissect_files(tshark, num_procs, max_files, cap_files): pool = multiprocessing.Pool(num_procs) - results = [pool.apply_async(dissect_file_process, [tshark, file]) for file in cap_files] + print "Temporary working dir: %s" % tmpdir + results = [pool.apply_async(dissect_file_process, [tshark, tmpdir, file]) for file in cap_files] try: for (cur_item_idx,result_async) in enumerate(results): file_result = result_async.get() @@ -102,13 +111,23 @@ def dissect_files(tshark, num_procs, max_files, cap_files): 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] + tmpdir = tempfile.mkdtemp() + print "Temporary working dir: %s" % tmpdir + results_bin = [pool.apply_async(dissect_file_process, [tshark_bin, tmpdir, file]) for file in cap_files] + results_cmp = [pool.apply_async(dissect_file_process, [tshark_cmp, tmpdir, 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" + if file_result_cmp[1] is False or file_result_bin[1] is False: + action = "FAILED (exitcode)" + if not filecmp.cmp(file_result_bin[2], file_result_cmp[2]): + action = "FAILED (stdout)" + if not filecmp.cmp(file_result_bin[3], file_result_cmp[3]): + action = "FAILED (stderr)" + else: + action = "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: @@ -251,7 +270,7 @@ def main(): cap_files.sort() options.max_files = min(options.max_files, len(cap_files)) - print "%u total files, %u working files\n" % (len(cap_files), options.max_files) + print "%u total files, %u working files" % (len(cap_files), options.max_files) cap_files = cap_files[:options.max_files] if options.compare_dir: |