summaryrefslogtreecommitdiffstats
path: root/tools/check_dissector.py
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-10 20:34:10 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-10 20:34:10 +0000
commite4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc (patch)
tree68cb5ef9081156392f1dd62a00c6ccc1451b93df /tools/check_dissector.py
parentInitial commit. (diff)
downloadwireshark-e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc.tar.xz
wireshark-e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc.zip
Adding upstream version 4.2.2.upstream/4.2.2
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'tools/check_dissector.py')
-rwxr-xr-xtools/check_dissector.py133
1 files changed, 133 insertions, 0 deletions
diff --git a/tools/check_dissector.py b/tools/check_dissector.py
new file mode 100755
index 0000000..af1dc64
--- /dev/null
+++ b/tools/check_dissector.py
@@ -0,0 +1,133 @@
+#!/usr/bin/env python3
+# Wireshark - Network traffic analyzer
+# By Gerald Combs <gerald@wireshark.org>
+# Copyright 1998 Gerald Combs
+#
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+import sys
+import os
+import signal
+import argparse
+
+# Run battery of tests on one or more dissectors.
+
+# For text colouring/highlighting.
+class bcolors:
+ HEADER = '\033[95m'
+ OKBLUE = '\033[94m'
+ OKGREEN = '\033[92m'
+ ADDED = '\033[45m'
+ WARNING = '\033[93m'
+ FAIL = '\033[91m'
+ ENDC = '\033[0m'
+ BOLD = '\033[1m'
+ UNDERLINE = '\033[4m'
+
+
+# Try to exit soon after Ctrl-C is pressed.
+should_exit = False
+
+def signal_handler(sig, frame):
+ global should_exit
+ should_exit = True
+ print('You pressed Ctrl+C - exiting')
+
+signal.signal(signal.SIGINT, signal_handler)
+
+# Command-line args
+parser = argparse.ArgumentParser(description="Run gamut of tests on dissector(s)")
+parser.add_argument('--file', action='append',
+ help='specify individual dissector file to test')
+parser.add_argument('--file-list', action='store',
+ help='file with list of dissectors')
+parser.add_argument('--build-folder', action='store',
+ help='build folder')
+
+args = parser.parse_args()
+
+if not args.file and not args.file_list:
+ print('Need to specify --file or --file-list')
+ exit(1)
+
+# TODO: verify build-folder if set.
+
+# Get list of files to check.
+dissectors = []
+
+# Individually-selected files
+if args.file:
+ for f in args.file:
+ if not os.path.isfile(f):
+ print('Chosen file', f, 'does not exist.')
+ exit(1)
+ else:
+ dissectors.append(f)
+
+# List of dissectors stored in a file
+if args.file_list:
+ if not os.path.isfile(args.file_list):
+ print('Dissector-list file', args.file_list, 'does not exist.')
+ exit(1)
+ else:
+ with open(args.file_list, 'r') as f:
+ contents = f.read().splitlines()
+ for f in contents:
+ if not os.path.isfile(f):
+ print('Chosen file', f, 'does not exist.')
+ exit(1)
+ else:
+ dissectors.append(f)
+
+# Tools that should be run on selected files.
+# Boolean arg is for whether build-dir is needed in order to run it.
+# 3rd is Windows support.
+tools = [
+ ('tools/delete_includes.py --folder .', True, True),
+ ('tools/check_spelling.py', False, True),
+ ('tools/check_tfs.py --check-value-strings', False, True),
+ ('tools/check_typed_item_calls.py --all-checks', False, True),
+ ('tools/check_static.py', True, False),
+ ('tools/check_dissector_urls.py', False, True),
+ ('tools/check_val_to_str.py', False, True),
+ ('tools/cppcheck/cppcheck.sh', False, True),
+ ('tools/checkhf.pl', False, True),
+ ('tools/checkAPIs.pl', False, True),
+ ('tools/fix-encoding-args.pl', False, True),
+ ('tools/checkfiltername.pl', False, True)
+]
+
+
+def run_check(tool, dissectors, python):
+ # Create command-line with all dissectors included
+ command = ''
+
+ # Don't trust shebang on windows.
+ if sys.platform.startswith('win'):
+ if python:
+ command += 'python.exe '
+ else:
+ command += 'perl.exe '
+
+ command += tool[0]
+ if tool[1]:
+ command += ' --build-folder ' + args.build_folder
+
+ for d in dissectors:
+ # Add this dissector file to command-line args
+ command += ((' --file' if python else '') + ' ' + d)
+
+ # Run it
+ print(bcolors.BOLD + command + bcolors.ENDC)
+ os.system(command)
+
+
+# Run all checks on all of my dissectors.
+for tool in tools:
+ if should_exit:
+ exit(1)
+ if ((not sys.platform.startswith('win') or tool[2]) and # Supported on this platform?
+ (not tool[1] or (tool[1] and args.build_folder))): # Have --build-folder if needed?
+
+ # Run it.
+ run_check(tool, dissectors, tool[0].find('.py') != -1)