aboutsummaryrefslogtreecommitdiffstats
path: root/test/suite_dfilter
diff options
context:
space:
mode:
authorJoão Valverde <j@v6e.pt>2023-06-24 14:54:03 +0100
committerJoão Valverde <j@v6e.pt>2023-06-26 00:46:18 +0000
commitbd25b9f4cdce820dcb1951fd3c0acff6c5306d6b (patch)
tree516b2768d7d08e1e49cd94ff971e98da42ca3e5e /test/suite_dfilter
parentbf9c4ff0fff01f46affa4c130cf9c4fce84c4bfa (diff)
dfilter: Make string slices a return an FT_STRING
Allow string slices (indexing) to work with internationalized strings. The old behavior of indexing on byte boundaries can be obtained using raw slices.
Diffstat (limited to 'test/suite_dfilter')
-rw-r--r--test/suite_dfilter/dfiltertest.py15
-rw-r--r--test/suite_dfilter/group_string.py42
2 files changed, 52 insertions, 5 deletions
diff --git a/test/suite_dfilter/dfiltertest.py b/test/suite_dfilter/dfiltertest.py
index c464c5edaa..6a92c8f337 100644
--- a/test/suite_dfilter/dfiltertest.py
+++ b/test/suite_dfilter/dfiltertest.py
@@ -8,7 +8,7 @@ import pytest
@pytest.fixture
def dfilter_cmd(cmd_tshark, capture_file, request):
- def wrapped(dfilter, frame_number=None):
+ def wrapped(dfilter, frame_number=None, prefs=None):
cmd = [
cmd_tshark,
"-n", # No name resolution
@@ -24,6 +24,11 @@ def dfilter_cmd(cmd_tshark, capture_file, request):
"-Y", # packet display filter (used to be -R)
dfilter
])
+ if prefs:
+ cmd.extend([
+ "-o",
+ prefs
+ ])
return cmd
return wrapped
@@ -34,9 +39,9 @@ def cmd_dftest(program):
@pytest.fixture
def checkDFilterCount(dfilter_cmd, base_env):
- def checkDFilterCount_real(dfilter, expected_count):
+ def checkDFilterCount_real(dfilter, expected_count, prefs=None):
"""Run a display filter and expect a certain number of packets."""
- output = subprocess.check_output(dfilter_cmd(dfilter),
+ output = subprocess.check_output(dfilter_cmd(dfilter, prefs=prefs),
universal_newlines=True,
stderr=subprocess.STDOUT,
env=base_env)
@@ -49,9 +54,9 @@ def checkDFilterCount(dfilter_cmd, base_env):
@pytest.fixture
def checkDFilterCountWithSelectedFrame(dfilter_cmd, base_env):
- def checkDFilterCount_real(dfilter, expected_count, selected_frame):
+ def checkDFilterCount_real(dfilter, expected_count, selected_frame, prefs=None):
"""Run a display filter and expect a certain number of packets."""
- output = subprocess.check_output(dfilter_cmd(dfilter, frame_number=selected_frame),
+ output = subprocess.check_output(dfilter_cmd(dfilter, frame_number=selected_frame, prefs=prefs),
universal_newlines=True,
stderr=subprocess.STDOUT,
env=base_env)
diff --git a/test/suite_dfilter/group_string.py b/test/suite_dfilter/group_string.py
index e8694010ce..8d77b3e662 100644
--- a/test/suite_dfilter/group_string.py
+++ b/test/suite_dfilter/group_string.py
@@ -196,3 +196,45 @@ class TestDfilterStringz:
def test_stringz_3(self, checkDFilterCount):
dfilter = 'tftp.type == junk'
checkDFilterCount(dfilter, 0)
+
+class TestDfilterStringIndex:
+ trace_file = "data-utf8.pcap"
+
+ def test_index_1(self, checkDFilterCount):
+ dfilter = 'data.text[3] == "á"'
+ prefs = "data.show_as_text:true"
+ checkDFilterCount(dfilter, 1, prefs)
+
+ def test_index_2(self, checkDFilterCount):
+ dfilter = 'data.text[3] == "a"'
+ prefs = "data.show_as_text:true"
+ checkDFilterCount(dfilter, 0, prefs)
+
+ def test_index_3(self, checkDFilterCount):
+ dfilter = 'data.text[40:] == "cão preguiçoso"'
+ prefs = "data.show_as_text:true"
+ checkDFilterCount(dfilter, 1, prefs)
+
+ def test_index_4(self, checkDFilterCount):
+ # Byte offset
+ dfilter = '@data.text[41:] == "cão preguiçoso"'
+ prefs = "data.show_as_text:true"
+ checkDFilterCount(dfilter, 1, prefs)
+
+ def test_index_5(self, checkDFilterCount):
+ # Byte offset
+ dfilter = '@data.text[41:] == 63:c3:a3:6f:20:70:72:65:67:75:69:c3:a7:6f:73:6f'
+ prefs = "data.show_as_text:true"
+ checkDFilterCount(dfilter, 1, prefs)
+
+ def test_strlen_1(self, checkDFilterCount):
+ dfilter = 'len(data.text) == 54'
+ prefs = "data.show_as_text:true"
+ checkDFilterCount(dfilter, 1, prefs)
+
+ def test_strlen_2(self, checkDFilterCount):
+ # Byte length
+ dfilter = 'len(@data.text) == 57'
+ prefs = "data.show_as_text:true"
+ checkDFilterCount(dfilter, 1, prefs)
+