From c442ee056bc46bcda59e473c00d5741ea90a1453 Mon Sep 17 00:00:00 2001 From: Dario Lombardo Date: Sat, 6 Apr 2019 00:29:51 +0200 Subject: extcap_parser: remove G_REGEX_RAW from line parsing. Check for utf8 valid line instead. Add a testcase that shows how the former code was buggy on special characters extcap sentences. Bug: 15668 Change-Id: Ic045c4791388af98705916e6ea84be8fc9b3c5b8 Reviewed-on: https://code.wireshark.org/review/32754 Petri-Dish: Dario Lombardo Tested-by: Petri Dish Buildbot Reviewed-by: Peter Wu --- test/sampleif.py | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++ test/suite_clopts.py | 26 +++++++++++++++++++++++++ 2 files changed, 80 insertions(+) create mode 100755 test/sampleif.py (limited to 'test') diff --git a/test/sampleif.py b/test/sampleif.py new file mode 100755 index 0000000000..b9c6df983c --- /dev/null +++ b/test/sampleif.py @@ -0,0 +1,54 @@ +#!/usr/bin/env python3 +# +# Wireshark test dummy extcap +# +# Copyright (c) 2018-2019 Peter Wu +# +# SPDX-License-Identifier: GPL-2.0-or-later +# +import argparse, os, sys + +parser = argparse.ArgumentParser() + +# Actions +parser.add_argument('--extcap-interfaces', action='store_true') +parser.add_argument('--extcap-dlts', action='store_true') +parser.add_argument('--extcap-config', action='store_true') +parser.add_argument('--capture', action='store_true') +parser.add_argument('--extcap-version') + +parser.add_argument('--extcap-interface', metavar='IFACE') + +parser.add_argument('--extcap-capture-filter', metavar='CFILTER') +parser.add_argument('--fifo', metavar='FIFO') + + +def extcap_interfaces(): + print("extcap {version=1.0}") + print("interface {value=sampleif}{display=Remote dumpcap}") + + +def extcap_dlts(): + # Required for the interface to show up in the interface list + print("dlt {number=147}{name=USER0}{display=Remote capture dependent DLT}") + + +def extcap_config(): + print("arg {number=0}{call=--test1}{display=Remote SSH server address}{type=string}{tooltip=bla}{required=true}{group=Server}") + print("arg {number=1}{call=--test2}{display=[7] UrzÄ…dzenie kompozytowe USB}{type=string}{tooltip=X}{group=Capture}") + + +def main(): + args = parser.parse_args() + if args.extcap_interfaces: + return extcap_interfaces() + + if args.extcap_dlts: + return extcap_dlts() + elif args.extcap_config: + return extcap_config() + else: + parser.error('Unsupported') + return 1 + +sys.exit(main()) diff --git a/test/suite_clopts.py b/test/suite_clopts.py index a0fe07bbf7..466ab62ea9 100644 --- a/test/suite_clopts.py +++ b/test/suite_clopts.py @@ -10,10 +10,12 @@ '''Command line option tests''' import json +import sys import os.path import subprocess import subprocesstest import fixtures +import shutil #glossaries = ('fields', 'protocols', 'values', 'decodes', 'defaultprefs', 'currentprefs') @@ -279,3 +281,27 @@ class case_tshark_z_expert(subprocesstest.SubprocessTestCase): self.assertFalse(self.grepOutput('Errors')) self.assertFalse(self.grepOutput('Warns')) self.assertFalse(self.grepOutput('Chats')) + + +@fixtures.mark_usefixtures('test_env') +@fixtures.uses_fixtures +class case_tshark_extcap(subprocesstest.SubprocessTestCase): + def test_tshark_extcap_interfaces(self, cmd_tshark, program_path): + # Script extcaps don't work with the current code on windows. + # https://www.wireshark.org/docs/wsdg_html_chunked/ChCaptureExtcap.html + # TODO: skip this test until it will get fixed. + if sys.platform == 'win32': + self.skipTest('FIXME extcap .py scripts needs special treatment on Windows') + extcap_tool = 'sampleif.py' + target_dir = os.path.join(program_path, 'extcap') + target_file = os.path.join(target_dir, extcap_tool) + source_file = os.path.join(os.path.dirname(__file__), extcap_tool) + os.makedirs(target_dir, exist_ok=True) + shutil.copy2(source_file, target_file) + # Ensure the test extcap_tool is properly loaded + self.assertRun((cmd_tshark, '-D')) + self.assertEqual(1, self.countOutput('sampleif')) + # Ensure tshark lists 2 interfaces in the preferences + self.assertRun((cmd_tshark, '-G', 'currentprefs')) + self.assertEqual(2, self.countOutput('extcap.sampleif.test')) + os.remove(target_file) -- cgit v1.2.3