2 # Copyright (c) 2013 by Gilbert Ramirez <gram@alumni.rice.edu>
4 # SPDX-License-Identifier: GPL-2.0-or-later
7 from suite_dfilter
.dfiltertest
import *
10 class TestDfilterString
:
11 trace_file
= "http.pcap"
13 def test_eq_1(self
, checkDFilterCount
):
14 dfilter
= 'http.request.method == "HEAD"'
15 checkDFilterCount(dfilter
, 1)
17 def test_eq_2(self
, checkDFilterCount
):
18 dfilter
= 'http.request.method == "POST"'
19 checkDFilterCount(dfilter
, 0)
21 def test_gt_1(self
, checkDFilterCount
):
22 dfilter
= 'http.request.method > "HEAC"'
23 checkDFilterCount(dfilter
, 1)
25 def test_gt_2(self
, checkDFilterCount
):
26 dfilter
= 'http.request.method > "HEAD"'
27 checkDFilterCount(dfilter
, 0)
29 def test_gt_3(self
, checkDFilterCount
):
30 dfilter
= 'http.request.method > "HEAE"'
31 checkDFilterCount(dfilter
, 0)
33 def test_ge_1(self
, checkDFilterCount
):
34 dfilter
= 'http.request.method >= "HEAC"'
35 checkDFilterCount(dfilter
, 1)
37 def test_ge_2(self
, checkDFilterCount
):
38 dfilter
= 'http.request.method >= "HEAD"'
39 checkDFilterCount(dfilter
, 1)
41 def test_ge_3(self
, checkDFilterCount
):
42 dfilter
= 'http.request.method >= "HEAE"'
43 checkDFilterCount(dfilter
, 0)
45 def test_lt_1(self
, checkDFilterCount
):
46 dfilter
= 'http.request.method < "HEAC"'
47 checkDFilterCount(dfilter
, 0)
49 def test_lt_2(self
, checkDFilterCount
):
50 dfilter
= 'http.request.method < "HEAD"'
51 checkDFilterCount(dfilter
, 0)
53 def test_lt_3(self
, checkDFilterCount
):
54 dfilter
= 'http.request.method < "HEAE"'
55 checkDFilterCount(dfilter
, 1)
57 def test_le_1(self
, checkDFilterCount
):
58 dfilter
= 'http.request.method <= "HEAC"'
59 checkDFilterCount(dfilter
, 0)
61 def test_le_2(self
, checkDFilterCount
):
62 dfilter
= 'http.request.method <= "HEAD"'
63 checkDFilterCount(dfilter
, 1)
65 def test_le_3(self
, checkDFilterCount
):
66 dfilter
= 'http.request.method <= "HEAE"'
67 checkDFilterCount(dfilter
, 1)
69 def test_slice_1(self
, checkDFilterCount
):
70 dfilter
= 'http.request.method[0] == "H"'
71 checkDFilterCount(dfilter
, 1)
73 def test_slice_2(self
, checkDFilterCount
):
74 dfilter
= 'http.request.method[0] == "P"'
75 checkDFilterCount(dfilter
, 0)
77 def test_slice_3(self
, checkDFilterCount
):
78 dfilter
= 'http.request.method[0:4] == "HEAD"'
79 checkDFilterCount(dfilter
, 1)
81 def test_slice_4(self
, checkDFilterCount
):
82 dfilter
= 'http.request.method[0:4] != "HEAD"'
83 checkDFilterCount(dfilter
, 0)
85 def test_slice_5(self
, checkDFilterCount
):
86 dfilter
= 'http.request.method[1:2] == "EA"'
87 checkDFilterCount(dfilter
, 1)
89 def test_slice_6(self
, checkDFilterCount
):
90 dfilter
= 'http.request.method[1:2] > "EA"'
91 checkDFilterCount(dfilter
, 0)
93 def test_slice_7(self
, checkDFilterCount
):
94 dfilter
= 'http.request.method[-1] == "D"'
95 checkDFilterCount(dfilter
, 1)
97 def test_slice_8(self
, checkDFilterCount
):
98 dfilter
= 'http.request.method[-2] == "D"'
99 checkDFilterCount(dfilter
, 0)
101 def xxxtest_stringz_1(self
):
102 return self
.DFilterCount(pkt_tftp
,
103 'tftp.type == "octet"', 1)
105 def xxxtest_stringz_2(self
):
106 return self
.DFilterCount(pkt_tftp
,
107 'tftp.type == "junk"', 0)
109 def test_contains_1(self
, checkDFilterCount
):
110 dfilter
= 'http.request.method contains "E"'
111 checkDFilterCount(dfilter
, 1)
113 def test_contains_2(self
, checkDFilterCount
):
114 dfilter
= 'http.request.method contains "EA"'
115 checkDFilterCount(dfilter
, 1)
117 def test_contains_3(self
, checkDFilterCount
):
118 dfilter
= 'http.request.method contains "HEAD"'
119 checkDFilterCount(dfilter
, 1)
121 def test_contains_4(self
, checkDFilterCount
):
122 dfilter
= 'http.request.method contains "POST"'
123 checkDFilterCount(dfilter
, 0)
125 def test_contains_5(self
, checkDFilterCount
):
126 dfilter
= 'http.request.method contains "\x50\x4f\x53\x54"' # "POST"
127 checkDFilterCount(dfilter
, 0)
129 def test_contains_6(self
, checkDFilterCount
):
130 dfilter
= 'http.request.method contains "\x48\x45\x41\x44"' # "HEAD"
131 checkDFilterCount(dfilter
, 1)
133 def test_contains_7(self
, checkDFilterCount
):
134 dfilter
= 'http.request.method contains 48:45:41:44' # "48:45:41:44"
135 checkDFilterCount(dfilter
, 0)
137 def test_contains_fail_0(self
, checkDFilterCount
):
138 dfilter
= 'http.user_agent contains "update"'
139 checkDFilterCount(dfilter
, 0)
141 def test_contains_fail_1(self
, checkDFilterCount
):
142 dfilter
= 'http.user_agent contains "UPDATE"'
143 checkDFilterCount(dfilter
, 0)
145 def test_contains_upper_0(self
, checkDFilterCount
):
146 dfilter
= 'upper(http.user_agent) contains "UPDATE"'
147 checkDFilterCount(dfilter
, 1)
149 def test_contains_upper_1(self
, checkDFilterCount
):
150 dfilter
= 'upper(http.user_agent) contains "update"'
151 checkDFilterCount(dfilter
, 0)
153 def test_contains_upper_2(self
, checkDFilterFail
):
154 dfilter
= 'upper(tcp.seq) == 4'
155 checkDFilterFail(dfilter
, 'Only string type fields can be used')
157 def test_contains_lower_0(self
, checkDFilterCount
):
158 dfilter
= 'lower(http.user_agent) contains "UPDATE"'
159 checkDFilterCount(dfilter
, 0)
161 def test_contains_lower_1(self
, checkDFilterCount
):
162 dfilter
= 'lower(http.user_agent) contains "update"'
163 checkDFilterCount(dfilter
, 1)
165 def test_eq_lower_1(self
, checkDFilterFail
):
166 dfilter
= 'lower(tcp.seq) == 4'
167 checkDFilterFail(dfilter
, 'Only string type fields can be used')
169 def test_string_len(self
, checkDFilterCount
):
170 dfilter
= 'len(http.request.method) == 4'
171 checkDFilterCount(dfilter
, 1)
173 def test_eq_unicode(self
, checkDFilterCount
):
174 dfilter
= 'tcp.flags.str == "·······AP···"'
175 checkDFilterCount(dfilter
, 1)
177 def test_contains_unicode(self
, checkDFilterCount
):
178 dfilter
= 'tcp.flags.str contains "·······AP···"'
179 checkDFilterCount(dfilter
, 1)
181 def test_value_string_1(self
, checkDFilterCount
):
182 dfilter
= 'tcp.checksum.status == "Unverified" || tcp.checksum.status == "Good"'
183 checkDFilterCount(dfilter
, 1)
185 def test_value_string_2(self
, checkDFilterCount
):
186 dfilter
= 'tcp.checksum.status matches "unverified|good"'
187 checkDFilterCount(dfilter
, 1)
189 def test_value_string_3(self
, checkDFilterSucceed
):
190 dfilter
= 'tcp.checksum.status == Unverified'
191 checkDFilterSucceed(dfilter
, 'Writing value strings without double quotes is deprecated')
193 class TestDfilterStringz
:
194 trace_file
= "tftp.pcap"
196 def test_stringz_1(self
, checkDFilterCount
):
197 dfilter
= 'tftp.type == octet'
198 checkDFilterCount(dfilter
, 1)
200 def test_stringz_2(self
, checkDFilterCount
):
201 dfilter
= 'tftp.type == "octet"'
202 checkDFilterCount(dfilter
, 1)
204 def test_stringz_3(self
, checkDFilterCount
):
205 dfilter
= 'tftp.type == junk'
206 checkDFilterCount(dfilter
, 0)
208 class TestDfilterStringIndex
:
209 trace_file
= "data-utf8.pcap"
211 def test_index_1(self
, checkDFilterCount
):
212 dfilter
= 'data.text[3] == "á"'
213 prefs
= "data.show_as_text:true"
214 checkDFilterCount(dfilter
, 1, prefs
)
216 def test_index_2(self
, checkDFilterCount
):
217 dfilter
= 'data.text[3] == "a"'
218 prefs
= "data.show_as_text:true"
219 checkDFilterCount(dfilter
, 0, prefs
)
221 def test_index_3(self
, checkDFilterCount
):
222 dfilter
= 'data.text[40:] == "cão preguiçoso"'
223 prefs
= "data.show_as_text:true"
224 checkDFilterCount(dfilter
, 1, prefs
)
226 def test_index_4(self
, checkDFilterCount
):
228 dfilter
= '@data.text[41:] == "cão preguiçoso"'
229 prefs
= "data.show_as_text:true"
230 checkDFilterCount(dfilter
, 1, prefs
)
232 def test_index_5(self
, checkDFilterCount
):
234 dfilter
= '@data.text[41:] == 63:c3:a3:6f:20:70:72:65:67:75:69:c3:a7:6f:73:6f'
235 prefs
= "data.show_as_text:true"
236 checkDFilterCount(dfilter
, 1, prefs
)
238 def test_strlen_1(self
, checkDFilterCount
):
239 dfilter
= 'len(data.text) == 54'
240 prefs
= "data.show_as_text:true"
241 checkDFilterCount(dfilter
, 1, prefs
)
243 def test_strlen_2(self
, checkDFilterCount
):
245 dfilter
= 'len(@data.text) == 57'
246 prefs
= "data.show_as_text:true"
247 checkDFilterCount(dfilter
, 1, prefs
)