Test: Make sure we run our display filter tests.
authorGerald Combs <gerald@wireshark.org>
Sat, 5 May 2018 22:53:54 +0000 (15:53 -0700)
committerGerald Combs <gerald@wireshark.org>
Sun, 6 May 2018 23:56:41 +0000 (23:56 +0000)
Change the test suite list in CMakeLists.txt to a static list. Add a
CTest coverage unit test.

Change-Id: I8459f320a2d0707618d6d56abdfce80274fddd2d
Reviewed-on: https://code.wireshark.org/review/27377
Petri-Dish: Gerald Combs <gerald@wireshark.org>
Tested-by: Petri Dish Buildbot
Reviewed-by: Gerald Combs <gerald@wireshark.org>
20 files changed:
CMakeLists.txt
test/config.py
test/suite_dfilter/group_bytes_ether.py
test/suite_dfilter/group_bytes_ipv6.py
test/suite_dfilter/group_bytes_type.py
test/suite_dfilter/group_double.py
test/suite_dfilter/group_integer.py
test/suite_dfilter/group_integer_1byte.py
test/suite_dfilter/group_ipv4.py
test/suite_dfilter/group_membership.py
test/suite_dfilter/group_range_method.py
test/suite_dfilter/group_scanner.py
test/suite_dfilter/group_string_type.py
test/suite_dfilter/group_stringz.py
test/suite_dfilter/group_time_relative.py
test/suite_dfilter/group_time_type.py
test/suite_dfilter/group_tvb.py
test/suite_dfilter/group_uint64.py
test/suite_unittests.py
test/test.py

index edaaa02..369c431 100644 (file)
@@ -2957,7 +2957,7 @@ if(RPMBUILD_EXECUTABLE)
 
        _SET_GITVERSION_CMAKE_VARIABLE(_git_description)
 
-       if (NOT _git_description)       
+       if (NOT _git_description)
                # We're building the rpm outside the source. Guess the version from the dirname.
                get_filename_component(CMAKE_SOURCE_DIR_NAME ${CMAKE_SOURCE_DIR} NAME)
                # XXX this assumes the directory to start with "wireshark-"
@@ -3160,26 +3160,37 @@ set_target_properties(test-programs PROPERTIES
 
 # Test suites
 enable_testing()
-file(GLOB _test_suite_py_list test/suite_*.py)
+# We could try to build this list dynamically, but given that we tend to
+# go years between adding suites just run
+#     test/test.py --list-suites | sort
+# and paste the output here.
+set(_test_suite_list
+       suite_capture
+       suite_clopts
+       suite_decryption
+       suite_dfilter
+       suite_dissection
+       suite_fileformats
+       suite_io
+       suite_mergecap
+       suite_nameres
+       suite_text2pcap
+       suite_unittests
+       suite_wslua
+)
 if(WIN32)
        set(_test_suite_program_path ./run/$<CONFIG>)
 else()
        set(_test_suite_program_path ./run)
 endif()
 
-# We currently don't handle spaces in arguments. On Windows this
+# We don't currently handle spaces in arguments. On Windows this
 # means that you will probably have to pass in an interface index
 # instead of a name.
 set(TEST_EXTRA_ARGS "" CACHE STRING "Extra arguments to pass to test/test.py")
 separate_arguments(TEST_EXTRA_ARGS)
 
-# We can enumerate suites two ways: by probing the filesystem and by
-# running `test.py --list-suites`. Probe the filesystem for now, which
-# should hopefully give us enough parallelization. If we want to split
-# our tests by cases or individual tests we'll have to run and parse
-# `test.py --list-cases` or `test.py --list` respectively.
-foreach(_suite_py ${_test_suite_py_list})
-       get_filename_component(_suite_name ${_suite_py} NAME_WE)
+foreach(_suite_name ${_test_suite_list})
        add_test(
                NAME ${_suite_name}
                COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/test/test.py
index cffa59f..a68de77 100644 (file)
@@ -63,6 +63,8 @@ key_dir = os.path.join(this_dir, 'keys')
 lua_dir = os.path.join(this_dir, 'lua')
 tools_dir = os.path.join(this_dir, '..', 'tools')
 
+all_suites = []
+
 def canCapture():
     # XXX This appears to be evaluated at the wrong time when called
     # from a unittest.skipXXX decorator.
index 71f8d48..14fecc5 100644 (file)
@@ -2,7 +2,7 @@
 #
 # SPDX-License-Identifier: GPL-2.0-or-later
 
-import dfiltertest
+from suite_dfilter import dfiltertest
 
 class case_bytes_ether(dfiltertest.DFTestCase):
     trace_file = "ipx_rip.pcap"
index 94237aa..f2964a0 100644 (file)
@@ -2,7 +2,7 @@
 #
 # SPDX-License-Identifier: GPL-2.0-or-later
 
-import dfiltertest
+from suite_dfilter import dfiltertest
 
 class case_bytes_ipv6(dfiltertest.DFTestCase):
     trace_file = "ipv6.pcap"
index 4031d27..91e4271 100644 (file)
@@ -2,7 +2,7 @@
 #
 # SPDX-License-Identifier: GPL-2.0-or-later
 
-import dfiltertest
+from suite_dfilter import dfiltertest
 
 class case_bytes_type(dfiltertest.DFTestCase):
     trace_file = "arp.pcap"
index 3bf7cb6..e9497db 100644 (file)
@@ -2,7 +2,7 @@
 #
 # SPDX-License-Identifier: GPL-2.0-or-later
 
-import dfiltertest
+from suite_dfilter import dfiltertest
 
 class case_double(dfiltertest.DFTestCase):
 
index 42901fb..86dee8f 100644 (file)
@@ -2,7 +2,7 @@
 #
 # SPDX-License-Identifier: GPL-2.0-or-later
 
-import dfiltertest
+from suite_dfilter import dfiltertest
 
 class case_integer(dfiltertest.DFTestCase):
     trace_file = "ntp.pcap"
index be8ba19..0043008 100644 (file)
@@ -3,7 +3,7 @@
 # SPDX-License-Identifier: GPL-2.0-or-later
 
 
-import dfiltertest
+from suite_dfilter import dfiltertest
 
 class case_integer_1_byte(dfiltertest.DFTestCase):
 
index 33a996f..37f8bf1 100644 (file)
@@ -3,7 +3,7 @@
 # SPDX-License-Identifier: GPL-2.0-or-later
 
 
-import dfiltertest
+from suite_dfilter import dfiltertest
 
 class case_ipv4(dfiltertest.DFTestCase):
     trace_file = "nfs.pcap"
index 6cfc9a2..1c1201a 100644 (file)
@@ -2,7 +2,7 @@
 #
 # SPDX-License-Identifier: GPL-2.0-or-later
 
-import dfiltertest
+from suite_dfilter import dfiltertest
 
 class case_membership(dfiltertest.DFTestCase):
     trace_file = "http.pcap"
index 520b8f2..2c56854 100644 (file)
@@ -2,7 +2,7 @@
 #
 # SPDX-License-Identifier: GPL-2.0-or-later
 
-import dfiltertest
+from suite_dfilter import dfiltertest
 
 class case_range(dfiltertest.DFTestCase):
     trace_file = "ipx_rip.pcap"
index 4637f50..7ad1b54 100644 (file)
@@ -2,7 +2,7 @@
 #
 # SPDX-License-Identifier: GPL-2.0-or-later
 
-import dfiltertest
+from suite_dfilter import dfiltertest
 
 class case_scanner(dfiltertest.DFTestCase):
     trace_file = "http.pcap"
index 9bebfc9..b3f9065 100644 (file)
@@ -2,7 +2,7 @@
 #
 # SPDX-License-Identifier: GPL-2.0-or-later
 
-import dfiltertest
+from suite_dfilter import dfiltertest
 
 class case_string(dfiltertest.DFTestCase):
     trace_file = "http.pcap"
index 3e21a40..594ee21 100644 (file)
@@ -2,7 +2,7 @@
 #
 # SPDX-License-Identifier: GPL-2.0-or-later
 
-import dfiltertest
+from suite_dfilter import dfiltertest
 
 class case_stringz(dfiltertest.DFTestCase):
     trace_file = "tftp.pcap"
index 24cd79e..963041c 100644 (file)
@@ -2,7 +2,7 @@
 #
 # SPDX-License-Identifier: GPL-2.0-or-later
 
-import dfiltertest
+from suite_dfilter import dfiltertest
 
 class case_time_relative(dfiltertest.DFTestCase):
     trace_file = "nfs.pcap"
index 3c77c0c..801001d 100644 (file)
@@ -2,7 +2,7 @@
 #
 # SPDX-License-Identifier: GPL-2.0-or-later
 
-import dfiltertest
+from suite_dfilter import dfiltertest
 
 class case_time(dfiltertest.DFTestCase):
     trace_file = "http.pcap"
index e00047b..e257de1 100644 (file)
@@ -2,7 +2,7 @@
 #
 # SPDX-License-Identifier: GPL-2.0-or-later
 
-import dfiltertest
+from suite_dfilter import dfiltertest
 import unittest
 
 class case_tvb(dfiltertest.DFTestCase):
index a4e50d7..3194a25 100644 (file)
@@ -2,7 +2,7 @@
 #
 # SPDX-License-Identifier: GPL-2.0-or-later
 
-import dfiltertest
+from suite_dfilter import dfiltertest
 
 class case_uint64(dfiltertest.DFTestCase):
     trace_file = "nfs.pcap"
index 8c3fc59..6d896d6 100644 (file)
 '''EPAN unit tests'''
 
 import config
+import difflib
 import os.path
+import pprint
+import re
 import subprocesstest
 import unittest
 
@@ -49,6 +52,26 @@ class case_unittests(subprocesstest.SubprocessTestCase):
         '''fieldcount'''
         self.assertRun((config.cmd_tshark, '-G', 'fieldcount'))
 
+    def test_unit_ctest_coverage(self):
+        '''Make sure CTest runs all of our tests.'''
+        with open(os.path.join(config.this_dir, '..', 'CMakeLists.txt')) as cml_fd:
+            suite_re = re.compile('set *\( *_test_suite_list')
+            in_list = False
+            cml_suites = []
+            for cml_line in cml_fd:
+                if suite_re.search(cml_line):
+                    in_list = True
+                    continue
+                if in_list:
+                    if ')' in cml_line:
+                        break
+                    cml_suites.append(cml_line.strip())
+        cml_suites.sort()
+        if not config.all_suites == cml_suites:
+            diff = '\n'.join(list(difflib.unified_diff(config.all_suites, cml_suites, 'all test suites', 'CMakeLists.txt test suites')))
+            self.fail("CMakeLists.txt doesn't test all available suites:\n" + diff)
+
+
 class Proto:
     """Data for a protocol."""
     def __init__(self, line):
index 78421bd..91bddaa 100755 (executable)
@@ -87,12 +87,15 @@ def main():
         print('\n'.join(run_ids))
         sys.exit(0)
 
+    all_suites = set()
+    for aid in all_ids:
+        aparts = aid.split('.')
+        all_suites |= {aparts[0]}
+    config.all_suites = list(all_suites)
+    config.all_suites.sort()
+
     if args.list_suites:
-        suites = set()
-        for rid in run_ids:
-            rparts = rid.split('.')
-            suites |= {rparts[0]}
-        print('\n'.join(list(suites)))
+        print('\n'.join(config.all_suites))
         sys.exit(0)
 
     if args.list_cases: