wireshark/test
João Valverde 0abe10e040 dfilter: Fix "!=" relation to be free of contradictions
Wireshark defines the relation of equality A == B as
A any_eq B <=> An == Bn for at least one An, Bn.
More accurately I think this is (formally) an equivalence
relation, not true equality.

Whichever definition for "==" we choose we must keep the
definition of "!=" as !(A == B), otherwise it will
lead to logical contradictions like (A == B) AND (A != B)
being true.

Fix the '!=' relation to match the definition of equality:
  A != B <=> !(A == B) <=> A all_ne B <=> An != Bn, for
every n.

This has been the recomended way to write "not equal" for a
long time in the documentation, even to the point where != was
deprecated, but it just wasn't implemented consistently in the
language, which has understandably been a persistent source
of confusion. Even a field that is normally well-behaved
with "!=" like "ip.src" or "ip.dst" will produce unexpected
results with encapsulations like IP-over-IP.

The opcode ALL_NE could have been implemented in the compiler
instead using NOT and ANY_EQ but I chose to implement it in
bytecode. It just seemed more elegant and efficient
but the difference was not very significant.

Keep around "~=" for any_ne relation, in case someone depends
on that, and because we don't have an operator for true equality:
  A strict_equal B <=> A all_eq B <=> !(A any_ne B).
If there is only one value then any_ne and all_ne are the same
comparison operation.

Implementing this change did not require fixing any tests so it
is unlikely the relation "~=" (any_ne) will be very useful.

Note that the behaviour of the '<' (less than) comparison relation
is a separate, more subtle issue. In the general case the definition
of '<' that is used is only a partial order.
2021-10-24 06:55:54 +00:00
..
baseline Qt: Copy->Value - don't zero pad hex values 2021-03-11 07:17:58 +00:00
captures http2: fix the stream mode reassembly issue 2021-10-20 17:25:17 +00:00
config dot11decrypt: Add partial FT-EAP decryption support 2021-01-20 16:10:12 +00:00
keys Add support for RSA decryption using PKCS #11 tokens 2018-12-29 10:40:16 +00:00
lua Carry drop count/packet ID/queue ID as options on packet block 2021-07-19 21:25:40 +00:00
protobuf_lang_files Protobuf: fix bugs that parsing complex syntax .proto files 2020-12-27 11:32:10 +00:00
suite_dfilter dfilter: Fix "!=" relation to be free of contradictions 2021-10-24 06:55:54 +00:00
suite_dissectors Qt: Copy->Value - don't zero pad hex values 2021-03-11 07:17:58 +00:00
README.test Qt: Add a packet diagram view. 2020-08-10 18:17:50 +00:00
conftest.py Tools+test: Call python3 explicitly. 2020-11-05 06:46:35 +00:00
fixtures.py Tools+test: Call python3 explicitly. 2020-11-05 06:46:35 +00:00
fixtures_ws.py MSYS2: Fix detection of test suite binaries 2021-09-27 16:45:58 +00:00
hosts.custom
hosts.global
hosts.personal
matchers.py Tools+test: Call python3 explicitly. 2020-11-05 06:46:35 +00:00
sampleif.py test: fix sampleif.py on weird systems using Python 3.6 and older 2019-04-16 03:28:43 +00:00
subprocesstest.py tests: Add argument to trim output to a reasonable size 2021-02-04 17:00:36 +00:00
suite_capture.py MSYS2: Test commands in pipes need quoting 2021-09-27 16:45:58 +00:00
suite_clopts.py tests: skip plugin count test if feature is disabled 2021-02-26 15:57:10 +00:00
suite_decryption.py test: add missing raw string regex identifier. 2021-03-25 08:16:10 +00:00
suite_dissection.py http2: fix the stream mode reassembly issue 2021-10-20 17:25:17 +00:00
suite_extcaps.py Tools+test: Call python3 explicitly. 2020-11-05 06:46:35 +00:00
suite_external.py Test: Add external tests. 2021-10-01 23:40:17 +00:00
suite_fileformats.py file-pcapng: redo the way we dissect the data in blocks. 2021-06-04 16:46:40 -07:00
suite_follow.py Tools+test: Call python3 explicitly. 2020-11-05 06:46:35 +00:00
suite_follow_dccp.py Replaced large NetPerfMeter captures by one small capture. 2021-03-04 20:27:24 +01:00
suite_follow_multistream.py HTTP2, QUIC: fix "Follow Stream" 2021-09-13 15:13:10 +00:00
suite_io.py Tools+test: Call python3 explicitly. 2020-11-05 06:46:35 +00:00
suite_mergecap.py Tools+test: Call python3 explicitly. 2020-11-05 06:46:35 +00:00
suite_nameres.py Tools+test: Call python3 explicitly. 2020-11-05 06:46:35 +00:00
suite_netperfmeter.py Using col_append_sep_fstr() instead of prepending "NetPerfMeter" label. 2021-06-28 14:39:04 +00:00
suite_outputformats.py Tools+test: Call python3 explicitly. 2020-11-05 06:46:35 +00:00
suite_release.py Tools+test: Call python3 explicitly. 2020-11-05 06:46:35 +00:00
suite_sharkd.py Use wtap_blocks for packet comments 2021-07-07 18:40:24 +00:00
suite_text2pcap.py [#17517] capinfos: machine-readable filetype/encap 2021-09-10 04:25:13 +00:00
suite_unittests.py COSE dissector from dtn-wireshark project 2021-09-29 08:51:13 +00:00
suite_wslua.py Lua: add DissectorTable.try_heuristics() function 2021-03-26 07:15:16 +00:00
test.py Test: Add external tests. 2021-10-01 23:40:17 +00:00
travis-upload-artifacts.sh test,travis: dump a screenshot for hanging GUI tests 2019-01-24 00:26:22 +00:00
util_dump_dhcp_pcap.py Dumpcap+Qt: Add support for `-a packets:NUM` and `-b packets:NUM`. 2018-11-09 05:55:11 +00:00

README.test

Wireshark Tests

The recommended steps to prepare for and to run tests:

* Install two Python packages, pytest: `pip install pytest pytest-xdist`
* Build programs (“wireshark”, “tshark”, etc.): `ninja`
* Build additional programs for the “unittests” suite: `ninja test-programs`
* Run tests in the build directory: `pytest`

Replace `ninja test-programs` by `make test-programs` as needed.

See the “Wireshark Tests” chapter of the Developer's Guide for details:
https://www.wireshark.org/docs/wsdg_html_chunked/ChapterTests.html

If you need to update the baseline files use the following commands (on a Linux system)
mkdir ~/.config/wireshark/profiles/ctest
TZ=UTC WIRESHARK_RUN_FROM_BUILD_DIRECTORY=1 build/run/tshark -C ctest -T ek -r test/captures/dhcp.pcap > test/baseline/dhcp.ek
TZ=UTC WIRESHARK_RUN_FROM_BUILD_DIRECTORY=1 build/run/tshark -C ctest -T json -r test/captures/dhcp.pcap > test/baseline/dhcp.json
TZ=UTC WIRESHARK_RUN_FROM_BUILD_DIRECTORY=1 build/run/tshark -C ctest -T jsonraw -r test/captures/dhcp.pcap > test/baseline/dhcp.jsonraw
TZ=UTC WIRESHARK_RUN_FROM_BUILD_DIRECTORY=1 build/run/tshark -C ctest -T ek -r test/captures/dhcp.pcap -x > test/baseline/dhcp-raw.ek