You can test the dissection of files outside the Wireshark source code repository by using the external test generator, which creates tests using a JSON configuration file. The file must have the following format:
{
"case_name": "<test case name>",
"tests": [
{
"test_name": "<test name>",
"tshark_args": [ <tshark argument array> ],
"requirements": [ <one or more requirements> ]
}
]
}
tshark_args elements can use ${case_dir} to specify the path to the JSON configuration file.
requirements can be one or more of
[ "count", "<pattern>", <count> ]count occurrences of pattern in the dissection output.
Equivalent to the built-in Python assertEqual(countOutput('<pattern'), <count>)
[ "grep", "<pattern>" ]pattern.
Equivalent to assertTrue(grepOutput('<pattern>')).
[ "!grep", "<pattern>" ]pattern.
Equivalent to assertFalse(grepOutput('<pattern>')).
[ "in", "<string>", <line> ]line of the dissection output must contain string.
Equivalent to assertIn('<pattern>', lines[<line>]).
[ "!in", "<string>", <line> ]line of the dissection output must not contain string.
Equivalent to assertNotIn('<pattern>', lines[<line>]).
Patterns can be any valid Python regular expression.
The example below defines a single test case, named “external_example”.
The case has a single test named “dns”, which runs TShark on tests/dns-1/dns.pcapng, relative to the JSON configuration file.
{
"case_name": "external_example",
"tests": [
{
"test_name": "dns",
"tshark_args": [ "-r", "${case_dir}/tests/dns-1/dns.pcapng",
"-Y", "dns", "-T", "fields", "-e", "dns.qry.name"
],
"requirements": [
[ "count", "in.m.yahoo.com", 1 ],
[ "grep", "in.m.yahoo.com" ],
[ "!grep", "in.m.notyahoo.com" ],
[ "in", "in.m.yahoo.com", 0 ],
[ "!in", "in.m.notyahoo.com", 0 ]
]
}
]
}
You can specify external tests using the test.py --add-external-test.
For example, if the JSON file above is named wireshark-tests.json you can list its test by running the following:
$ ./test/test.py -p ./build/run --add-external-test /path/to/wireshark-tests.json --list external suite_external.case_external_example.test_dns