2018-04-30 21:42:29 +00:00
|
|
|
#
|
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
# Wireshark tests
|
2018-05-04 22:14:10 +00:00
|
|
|
# By
|
|
|
|
# Gerald Combs <gerald@wireshark.org>
|
|
|
|
# Gilbert Ramirez <gram [AT] alumni.rice.edu>
|
2018-04-30 21:42:29 +00:00
|
|
|
#
|
|
|
|
# Ported from a set of Bash scripts which were copyright 2005 Ulf Lamping
|
|
|
|
#
|
|
|
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
#
|
|
|
|
'''EPAN unit tests'''
|
|
|
|
|
2018-05-05 22:53:54 +00:00
|
|
|
import difflib
|
2018-04-30 21:42:29 +00:00
|
|
|
import os.path
|
2018-05-05 22:53:54 +00:00
|
|
|
import re
|
2018-04-30 21:42:29 +00:00
|
|
|
import subprocesstest
|
2018-11-13 01:17:33 +00:00
|
|
|
import fixtures
|
2018-04-30 21:42:29 +00:00
|
|
|
|
2018-11-13 01:17:33 +00:00
|
|
|
|
|
|
|
@fixtures.uses_fixtures
|
2018-04-30 21:42:29 +00:00
|
|
|
class case_unittests(subprocesstest.SubprocessTestCase):
|
2018-11-13 01:17:33 +00:00
|
|
|
def test_unit_exntest(self, program, base_env):
|
2018-04-30 21:42:29 +00:00
|
|
|
'''exntest'''
|
2018-11-13 01:17:33 +00:00
|
|
|
self.assertRun(program('exntest'), env=base_env)
|
2018-04-30 21:42:29 +00:00
|
|
|
|
2018-11-13 01:17:33 +00:00
|
|
|
def test_unit_oids_test(self, program, base_env):
|
2018-04-30 21:42:29 +00:00
|
|
|
'''oids_test'''
|
2018-11-13 01:17:33 +00:00
|
|
|
self.assertRun(program('oids_test'), env=base_env)
|
2018-04-30 21:42:29 +00:00
|
|
|
|
2018-11-13 01:17:33 +00:00
|
|
|
def test_unit_reassemble_test(self, program, base_env):
|
2018-04-30 21:42:29 +00:00
|
|
|
'''reassemble_test'''
|
2018-11-13 01:17:33 +00:00
|
|
|
self.assertRun(program('reassemble_test'), env=base_env)
|
2018-04-30 21:42:29 +00:00
|
|
|
|
2018-11-13 01:17:33 +00:00
|
|
|
def test_unit_tvbtest(self, program, base_env):
|
2018-04-30 21:42:29 +00:00
|
|
|
'''tvbtest'''
|
2018-11-13 01:17:33 +00:00
|
|
|
self.assertRun(program('tvbtest'), env=base_env)
|
2018-04-30 21:42:29 +00:00
|
|
|
|
2018-11-13 01:17:33 +00:00
|
|
|
def test_unit_wmem_test(self, program, base_env):
|
2018-04-30 21:42:29 +00:00
|
|
|
'''wmem_test'''
|
2018-11-13 01:17:33 +00:00
|
|
|
self.assertRun((program('wmem_test'),
|
2018-04-30 21:42:29 +00:00
|
|
|
'--verbose'
|
2018-11-13 01:17:33 +00:00
|
|
|
), env=base_env)
|
2018-04-30 21:42:29 +00:00
|
|
|
|
2018-11-13 01:17:33 +00:00
|
|
|
def test_unit_wmem_test(self, program, base_env):
|
2018-04-30 21:42:29 +00:00
|
|
|
'''wmem_test'''
|
2018-11-13 01:17:33 +00:00
|
|
|
self.assertRun((program('wmem_test'),
|
2018-04-30 21:42:29 +00:00
|
|
|
'--verbose'
|
2018-11-13 01:17:33 +00:00
|
|
|
), env=base_env)
|
2018-04-30 21:42:29 +00:00
|
|
|
|
2018-11-13 01:17:33 +00:00
|
|
|
def test_unit_fieldcount(self, cmd_tshark, test_env):
|
2018-04-30 21:42:29 +00:00
|
|
|
'''fieldcount'''
|
2018-11-13 01:17:33 +00:00
|
|
|
self.assertRun((cmd_tshark, '-G', 'fieldcount'), env=test_env)
|
2018-05-04 22:14:10 +00:00
|
|
|
|
2018-11-15 17:44:59 +00:00
|
|
|
def test_unit_ctest_coverage(self, all_test_groups):
|
2018-05-05 22:53:54 +00:00
|
|
|
'''Make sure CTest runs all of our tests.'''
|
2018-11-13 01:17:33 +00:00
|
|
|
with open(os.path.join(os.path.dirname(__file__), '..', 'CMakeLists.txt')) as cml_fd:
|
|
|
|
group_re = re.compile(r'set *\( *_test_group_list')
|
2018-05-05 22:53:54 +00:00
|
|
|
in_list = False
|
2018-06-18 19:01:01 +00:00
|
|
|
cml_groups = []
|
2018-05-05 22:53:54 +00:00
|
|
|
for cml_line in cml_fd:
|
2018-06-18 19:01:01 +00:00
|
|
|
if group_re.search(cml_line):
|
2018-05-05 22:53:54 +00:00
|
|
|
in_list = True
|
|
|
|
continue
|
|
|
|
if in_list:
|
|
|
|
if ')' in cml_line:
|
|
|
|
break
|
2018-06-18 19:01:01 +00:00
|
|
|
cml_groups.append(cml_line.strip())
|
|
|
|
cml_groups.sort()
|
2018-11-15 17:44:59 +00:00
|
|
|
if not all_test_groups == cml_groups:
|
|
|
|
diff = '\n'.join(list(difflib.unified_diff(all_test_groups, cml_groups, 'all test groups', 'CMakeLists.txt test groups')))
|
2018-06-18 19:01:01 +00:00
|
|
|
self.fail("CMakeLists.txt doesn't test all available groups:\n" + diff)
|
2018-05-05 22:53:54 +00:00
|
|
|
|
|
|
|
|
2018-05-04 22:14:10 +00:00
|
|
|
class Proto:
|
|
|
|
"""Data for a protocol."""
|
|
|
|
def __init__(self, line):
|
|
|
|
data = line.split("\t")
|
|
|
|
assert len(data) == 3, "expected 3 columns in %s" % data
|
|
|
|
assert data[0] == "P"
|
|
|
|
self.name = data[1]
|
|
|
|
self.abbrev = data[2]
|
|
|
|
|
|
|
|
class Field:
|
|
|
|
"""Data for a field."""
|
|
|
|
def __init__(self, line):
|
|
|
|
data = line.split("\t")
|
|
|
|
assert len(data) == 8, "expected 8 columns in %s" % data
|
|
|
|
assert data[0] == "F"
|
|
|
|
self.name = data[1]
|
|
|
|
self.abbrev = data[2]
|
|
|
|
self.ftype = data[3]
|
|
|
|
self.parent = data[4]
|
|
|
|
self.base = data[5]
|
|
|
|
self.bitmask = int(data[6],0)
|
|
|
|
self.blurb = data[7]
|
|
|
|
|
2018-11-13 01:17:33 +00:00
|
|
|
|
|
|
|
@fixtures.uses_fixtures
|
2018-05-04 22:14:10 +00:00
|
|
|
class case_unit_ftsanity(subprocesstest.SubprocessTestCase):
|
2018-11-13 01:17:33 +00:00
|
|
|
def test_unit_ftsanity(self, cmd_tshark, base_env):
|
2018-05-04 22:14:10 +00:00
|
|
|
"""Looks for problems in field type definitions."""
|
2018-11-13 01:17:33 +00:00
|
|
|
tshark_proc = self.assertRun((cmd_tshark, "-G", "fields"), env=base_env)
|
2018-05-04 22:14:10 +00:00
|
|
|
|
|
|
|
lines = tshark_proc.stdout_str.splitlines()
|
|
|
|
# XXX We don't currently check protos.
|
|
|
|
protos = [Proto(x) for x in lines if x[0] == "P"]
|
|
|
|
fields = [Field(x) for x in lines if x[0] == "F"]
|
|
|
|
|
|
|
|
err_list = []
|
|
|
|
for field in fields:
|
|
|
|
if field.bitmask != 0:
|
|
|
|
if field.ftype.find("FT_UINT") != 0 and \
|
|
|
|
field.ftype.find("FT_INT") != 0 and \
|
|
|
|
field.ftype != "FT_BOOLEAN" and \
|
|
|
|
field.ftype != "FT_CHAR":
|
|
|
|
err_list.append("%s has a bitmask 0x%x but is type %s" % \
|
|
|
|
(field.abbrev, field.bitmask, field.ftype))
|
|
|
|
|
|
|
|
self.assertEqual(len(err_list), 0, 'Found field type errors: \n' + '\n'.join(err_list))
|