xref: /aosp_15_r20/external/scapy/test/mock_windows.uts (revision 7dc08ffc4802948ccbc861daaf1e81c405c2c4bd)
1*7dc08ffcSJunyu Lai% Regression tests on Windows only for Scapy
2*7dc08ffcSJunyu Lai
3*7dc08ffcSJunyu Lai# More informations at http://www.secdev.org/projects/UTscapy/
4*7dc08ffcSJunyu Lai
5*7dc08ffcSJunyu Lai############
6*7dc08ffcSJunyu Lai############
7*7dc08ffcSJunyu Lai+ Networking tests
8*7dc08ffcSJunyu Lai
9*7dc08ffcSJunyu Lai= Automaton - SelectableSelector system timeout
10*7dc08ffcSJunyu Lai
11*7dc08ffcSJunyu Laiclass TimeOutSelector(SelectableObject):
12*7dc08ffcSJunyu Lai    def check_recv(self):
13*7dc08ffcSJunyu Lai        return False
14*7dc08ffcSJunyu Lai
15*7dc08ffcSJunyu Laiassert select_objects([TimeOutSelector()], 0) == []
16*7dc08ffcSJunyu Laiassert select_objects([TimeOutSelector()], 1) == []
17*7dc08ffcSJunyu Lai
18*7dc08ffcSJunyu Lai############
19*7dc08ffcSJunyu Lai############
20*7dc08ffcSJunyu Lai+ Windows Networking tests
21*7dc08ffcSJunyu Lai
22*7dc08ffcSJunyu Lai= Mocked read_routes6() calls
23*7dc08ffcSJunyu Lai
24*7dc08ffcSJunyu Laiimport mock
25*7dc08ffcSJunyu Laifrom scapy.tools.UTscapy import Bunch
26*7dc08ffcSJunyu Laifrom scapy.arch.windows import _read_routes6_post2008
27*7dc08ffcSJunyu Lai
28*7dc08ffcSJunyu Laidef check_mandatory_ipv6_routes(routes6):
29*7dc08ffcSJunyu Lai    """Ensure that mandatory IPv6 routes are present."""
30*7dc08ffcSJunyu Lai    if len([r for r in routes6 if r[0] == "::" and r[4] == ["::1"]]) < 1:
31*7dc08ffcSJunyu Lai        return False
32*7dc08ffcSJunyu Lai    if len([r for r in routes6 if r[0] == "fe80::" and (r[1] == 64 or r[1] == 32)]) < 1:
33*7dc08ffcSJunyu Lai        return False
34*7dc08ffcSJunyu Lai    if len([r for r in routes6 if in6_islladdr(r[0]) and r[1] == 128]) < 1:
35*7dc08ffcSJunyu Lai        return False
36*7dc08ffcSJunyu Lai    return True
37*7dc08ffcSJunyu Lai
38*7dc08ffcSJunyu Laidef dev_from_index_custom(if_index):
39*7dc08ffcSJunyu Lai    if_list = [{'mac': 'D0:50:99:56:DD:F9', 'win_index': '13', 'guid': '{C56DFFB3-992C-4964-B000-3E7C0F76E8BA}', 'name': 'Killer E2200 Gigabit Ethernet Controller', 'description': 'Ethernet'}, {'mac': '00:FF:0E:C7:25:37', 'win_index': '3', 'guid': '{0EC72537-B662-4F5D-B34E-48BFAE799BBE}', 'name': 'TAP-Windows Adapter V9', 'description': 'Ethernet 2'}]
40*7dc08ffcSJunyu Lai    values = {}
41*7dc08ffcSJunyu Lai    for i in if_list:
42*7dc08ffcSJunyu Lai        try:
43*7dc08ffcSJunyu Lai            interface = NetworkInterface(i)
44*7dc08ffcSJunyu Lai            values[interface.guid] = interface
45*7dc08ffcSJunyu Lai        except (KeyError, PcapNameNotFoundError):
46*7dc08ffcSJunyu Lai            pass
47*7dc08ffcSJunyu Lai    for devname, iface in values.items():
48*7dc08ffcSJunyu Lai        if iface.win_index == str(if_index):
49*7dc08ffcSJunyu Lai            return iface
50*7dc08ffcSJunyu Lai    raise ValueError("Unknown network interface index %r" % if_index)
51*7dc08ffcSJunyu Lai
52*7dc08ffcSJunyu Lai@mock.patch("scapy.arch.windows.construct_source_candidate_set")
53*7dc08ffcSJunyu Lai@mock.patch("scapy.arch.windows.get_if_list")
54*7dc08ffcSJunyu Lai@mock.patch("scapy.arch.windows.dev_from_index")
55*7dc08ffcSJunyu Lai@mock.patch("scapy.arch.windows.POWERSHELL_PROCESS.query")
56*7dc08ffcSJunyu Laidef test_read_routes6_windows(mock_comm, mock_dev_from_index, mock_winpcapylist, mock_utils6cset):
57*7dc08ffcSJunyu Lai    """Test read_routes6() on Windows"""
58*7dc08ffcSJunyu Lai    # 'Get-NetRoute -AddressFamily IPV6 | select ifIndex, DestinationPrefix, NextHop'
59*7dc08ffcSJunyu Lai    get_net_route_output = """
60*7dc08ffcSJunyu LaiifIndex           : 3
61*7dc08ffcSJunyu LaiDestinationPrefix : ff00::/8
62*7dc08ffcSJunyu LaiNextHop           : ::
63*7dc08ffcSJunyu LaiRouteMetric       : 0
64*7dc08ffcSJunyu LaiInterfaceMetric   : 1
65*7dc08ffcSJunyu Lai
66*7dc08ffcSJunyu LaiifIndex           : 16
67*7dc08ffcSJunyu LaiDestinationPrefix : ff00::/8
68*7dc08ffcSJunyu LaiNextHop           : ::
69*7dc08ffcSJunyu LaiRouteMetric       : 0
70*7dc08ffcSJunyu LaiInterfaceMetric   : 1
71*7dc08ffcSJunyu Lai
72*7dc08ffcSJunyu LaiifIndex           : 13
73*7dc08ffcSJunyu LaiDestinationPrefix : ff00::/8
74*7dc08ffcSJunyu LaiNextHop           : ::
75*7dc08ffcSJunyu LaiRouteMetric       : 0
76*7dc08ffcSJunyu LaiInterfaceMetric   : 1
77*7dc08ffcSJunyu Lai
78*7dc08ffcSJunyu LaiifIndex           : 1
79*7dc08ffcSJunyu LaiDestinationPrefix : ff00::/8
80*7dc08ffcSJunyu LaiNextHop           : ::
81*7dc08ffcSJunyu LaiRouteMetric       : 0
82*7dc08ffcSJunyu LaiInterfaceMetric   : 1
83*7dc08ffcSJunyu Lai
84*7dc08ffcSJunyu LaiifIndex           : 13
85*7dc08ffcSJunyu LaiDestinationPrefix : fe80::dc1d:24e8:af00:125e/128
86*7dc08ffcSJunyu LaiNextHop           : ::
87*7dc08ffcSJunyu LaiRouteMetric       : 20
88*7dc08ffcSJunyu LaiInterfaceMetric   : 256
89*7dc08ffcSJunyu Lai
90*7dc08ffcSJunyu LaiifIndex           : 3
91*7dc08ffcSJunyu LaiDestinationPrefix : fe80::9402:5804:cb16:fb3b/128
92*7dc08ffcSJunyu LaiNextHop           : ::
93*7dc08ffcSJunyu LaiRouteMetric       : 1
94*7dc08ffcSJunyu LaiInterfaceMetric   : 0
95*7dc08ffcSJunyu Lai
96*7dc08ffcSJunyu LaiifIndex           : 16
97*7dc08ffcSJunyu LaiDestinationPrefix : fe80::100:7f:fffe/128
98*7dc08ffcSJunyu LaiNextHop           : ::
99*7dc08ffcSJunyu LaiRouteMetric       : 1
100*7dc08ffcSJunyu LaiInterfaceMetric   : 0
101*7dc08ffcSJunyu Lai
102*7dc08ffcSJunyu LaiifIndex           : 3
103*7dc08ffcSJunyu LaiDestinationPrefix : fe80::/64
104*7dc08ffcSJunyu LaiNextHop           : ::
105*7dc08ffcSJunyu LaiRouteMetric       : 0
106*7dc08ffcSJunyu LaiInterfaceMetric   : 1
107*7dc08ffcSJunyu Lai
108*7dc08ffcSJunyu LaiifIndex           : 16
109*7dc08ffcSJunyu LaiDestinationPrefix : fe80::/64
110*7dc08ffcSJunyu LaiNextHop           : ::
111*7dc08ffcSJunyu LaiRouteMetric       : 0
112*7dc08ffcSJunyu LaiInterfaceMetric   : 1
113*7dc08ffcSJunyu Lai
114*7dc08ffcSJunyu LaiifIndex           : 13
115*7dc08ffcSJunyu LaiDestinationPrefix : fe80::/64
116*7dc08ffcSJunyu LaiNextHop           : ::
117*7dc08ffcSJunyu LaiRouteMetric       : 0
118*7dc08ffcSJunyu LaiInterfaceMetric   : 1
119*7dc08ffcSJunyu Lai
120*7dc08ffcSJunyu LaiifIndex           : 13
121*7dc08ffcSJunyu LaiDestinationPrefix : 2a01:e35:2f17:fe60:dc1d:24e8:af00:125e/128
122*7dc08ffcSJunyu LaiNextHop           : ::
123*7dc08ffcSJunyu LaiRouteMetric       : 20
124*7dc08ffcSJunyu LaiInterfaceMetric   : 256
125*7dc08ffcSJunyu Lai
126*7dc08ffcSJunyu LaiifIndex           : 13
127*7dc08ffcSJunyu LaiDestinationPrefix : 2a01:e35:2f17:fe60::/64
128*7dc08ffcSJunyu LaiNextHop           : ::
129*7dc08ffcSJunyu LaiRouteMetric       : 30
130*7dc08ffcSJunyu LaiInterfaceMetric   : 256
131*7dc08ffcSJunyu Lai
132*7dc08ffcSJunyu LaiifIndex           : 1
133*7dc08ffcSJunyu LaiDestinationPrefix : ::1/128
134*7dc08ffcSJunyu LaiNextHop           : ::
135*7dc08ffcSJunyu LaiRouteMetric       : 0
136*7dc08ffcSJunyu LaiInterfaceMetric   : 256
137*7dc08ffcSJunyu Lai
138*7dc08ffcSJunyu LaiifIndex           : 13
139*7dc08ffcSJunyu LaiDestinationPrefix : ::/0
140*7dc08ffcSJunyu LaiNextHop           : fe80::224:d4ff:fea0:a6d7
141*7dc08ffcSJunyu LaiRouteMetric       : 0
142*7dc08ffcSJunyu LaiInterfaceMetric   : 256
143*7dc08ffcSJunyu Lai"""
144*7dc08ffcSJunyu Lai    mock_comm.return_value = get_net_route_output.split("\n")
145*7dc08ffcSJunyu Lai    mock_winpcapylist.return_value = [u'\\Device\\NPF_{0EC72537-B662-4F5D-B34E-48BFAE799BBE}', u'\\Device\\NPF_{C56DFFB3-992C-4964-B000-3E7C0F76E8BA}']
146*7dc08ffcSJunyu Lai    # Mocked in6_getifaddr() output
147*7dc08ffcSJunyu Lai    mock_dev_from_index.side_effect = dev_from_index_custom
148*7dc08ffcSJunyu Lai    # Random
149*7dc08ffcSJunyu Lai    mock_utils6cset.side_effect = lambda x,y,z: ["::1"] if x=="::" else ["fdbb:d995:ddd8:51fc::"]
150*7dc08ffcSJunyu Lai    # Test the function
151*7dc08ffcSJunyu Lai    routes = _read_routes6_post2008()
152*7dc08ffcSJunyu Lai    for r in routes:
153*7dc08ffcSJunyu Lai        print(r)
154*7dc08ffcSJunyu Lai    print(len(routes))
155*7dc08ffcSJunyu Lai    assert(len(routes) == 9)
156*7dc08ffcSJunyu Lai    assert(check_mandatory_ipv6_routes(routes))
157*7dc08ffcSJunyu Lai
158*7dc08ffcSJunyu Lai
159*7dc08ffcSJunyu Laitest_read_routes6_windows()
160*7dc08ffcSJunyu Lai
161*7dc08ffcSJunyu Lai= Test _read_routes_post2008 with missing InterfaceMetric
162*7dc08ffcSJunyu Lai
163*7dc08ffcSJunyu Laifrom scapy.arch.windows import _read_routes_post2008
164*7dc08ffcSJunyu Lai
165*7dc08ffcSJunyu Lai@mock.patch("scapy.arch.windows._get_metrics")
166*7dc08ffcSJunyu Lai@mock.patch("scapy.arch.windows.POWERSHELL_PROCESS.query")
167*7dc08ffcSJunyu Lai@mock.patch("scapy.arch.windows.get_if_list")
168*7dc08ffcSJunyu Lai@mock.patch("scapy.arch.windows.dev_from_index")
169*7dc08ffcSJunyu Laidef test_missing_ifacemetric(mock_dev_from_index, mock_winpcapylist, mock_exec_query, mock_get_metrics):
170*7dc08ffcSJunyu Lai    exc_query_output = """ifIndex           : 3
171*7dc08ffcSJunyu LaiDestinationPrefix : 255.255.255.255/0
172*7dc08ffcSJunyu LaiNextHop           : 192.168.103.1
173*7dc08ffcSJunyu LaiRouteMetric       : 10
174*7dc08ffcSJunyu LaiInterfaceMetric   : 256
175*7dc08ffcSJunyu Lai
176*7dc08ffcSJunyu LaiifIndex           : 13
177*7dc08ffcSJunyu LaiDestinationPrefix : 255.255.255.255/32
178*7dc08ffcSJunyu LaiNextHop           : 0.0.0.0
179*7dc08ffcSJunyu LaiRouteMetric       : 20
180*7dc08ffcSJunyu LaiInterfaceMetric   :
181*7dc08ffcSJunyu Lai"""
182*7dc08ffcSJunyu Lai    mock_exec_query.side_effect = lambda *args, **kargs: exc_query_output.split("\n")
183*7dc08ffcSJunyu Lai    mock_winpcapylist.return_value = [u'\\Device\\NPF_{0EC72537-B662-4F5D-B34E-48BFAE799BBE}', u'\\Device\\NPF_{C56DFFB3-992C-4964-B000-3E7C0F76E8BA}']
184*7dc08ffcSJunyu Lai    mock_dev_from_index.side_effect = dev_from_index_custom
185*7dc08ffcSJunyu Lai    mock_get_metrics.side_effect = lambda: {'16': 0, '13': 123}
186*7dc08ffcSJunyu Lai    routes = _read_routes_post2008()
187*7dc08ffcSJunyu Lai    for r in routes:
188*7dc08ffcSJunyu Lai        print(r)
189*7dc08ffcSJunyu Lai    assert len(routes) == 2
190*7dc08ffcSJunyu Lai    # Test if metrics were correctly read/guessed
191*7dc08ffcSJunyu Lai    assert routes[0][5] == 266
192*7dc08ffcSJunyu Lai    assert routes[1][5] == 143
193*7dc08ffcSJunyu Lai
194*7dc08ffcSJunyu Laitest_missing_ifacemetric()
195*7dc08ffcSJunyu Lai
196*7dc08ffcSJunyu Lai= Test _get_metrics with weird netsh length
197*7dc08ffcSJunyu Lai
198*7dc08ffcSJunyu Laifrom scapy.arch.windows import _get_metrics
199*7dc08ffcSJunyu Lai
200*7dc08ffcSJunyu Lai@mock.patch("scapy.arch.windows.POWERSHELL_PROCESS.query")
201*7dc08ffcSJunyu Laidef test_get_metrics(mock_exec_query):
202*7dc08ffcSJunyu Lai    exc_query_output = """Interface Loopback Pseudo-Interface 1 Parameters
203*7dc08ffcSJunyu Lai-------------------------------
204*7dc08ffcSJunyu LaiIfLuid : loopback_0
205*7dc08ffcSJunyu LaiIfIndex : 1
206*7dc08ffcSJunyu LaiState : connected
207*7dc08ffcSJunyu LaiMetric : 75
208*7dc08ffcSJunyu LaiLink MTU : 4294967295 byt
209*7dc08ffcSJunyu LaiReachable Time : 40500 ms
210*7dc08ffcSJunyu LaiBase Reachable Time : 30000 ms
211*7dc08ffcSJunyu LaiRetransmission Interval : 1000 ms
212*7dc08ffcSJunyu LaiDAD Transmits : 0
213*7dc08ffcSJunyu LaiSite Prefix Length : 64
214*7dc08ffcSJunyu LaiSite Id : 1
215*7dc08ffcSJunyu LaiForwarding : disabled
216*7dc08ffcSJunyu LaiAdvertising : disabled
217*7dc08ffcSJunyu LaiNeighbor Discovery : disabled
218*7dc08ffcSJunyu LaiNeighbor Unreachability Detection : disabled
219*7dc08ffcSJunyu LaiRouter Discovery : dhcp
220*7dc08ffcSJunyu LaiManaged Address Configuration : enabled
221*7dc08ffcSJunyu LaiOther Stateful Configuration : enabled
222*7dc08ffcSJunyu LaiWeak Host Sends : disabled
223*7dc08ffcSJunyu LaiWeak Host Receives : disabled
224*7dc08ffcSJunyu LaiUse Automatic Metric : enabled
225*7dc08ffcSJunyu LaiIgnore Default Routes : disabled
226*7dc08ffcSJunyu LaiAdvertised Router Lifetime : 1800 seconds
227*7dc08ffcSJunyu LaiAdvertise Default Route : disabled
228*7dc08ffcSJunyu LaiCurrent Hop Limit : 0
229*7dc08ffcSJunyu LaiForce ARPND Wake up patterns : disabled
230*7dc08ffcSJunyu LaiDirected MAC Wake up patterns : disabled
231*7dc08ffcSJunyu LaiECN capability : application
232*7dc08ffcSJunyu Lai
233*7dc08ffcSJunyu LaiInterface Wi-Fi Parameters
234*7dc08ffcSJunyu Lai-------------------------------
235*7dc08ffcSJunyu LaiIfLuid : wireless_32768
236*7dc08ffcSJunyu LaiIfIndex : 7
237*7dc08ffcSJunyu LaiState : connected
238*7dc08ffcSJunyu LaiMetric : 55
239*7dc08ffcSJunyu LaiLink MTU : 1500 bytes
240*7dc08ffcSJunyu LaiReachable Time : 43500 ms
241*7dc08ffcSJunyu LaiBase Reachable Time : 30000 ms
242*7dc08ffcSJunyu LaiRetransmission Interval : 1000 ms
243*7dc08ffcSJunyu LaiDAD Transmits : 3
244*7dc08ffcSJunyu LaiSite Prefix Length : 64
245*7dc08ffcSJunyu LaiSite Id : 1
246*7dc08ffcSJunyu LaiForwarding : disabled
247*7dc08ffcSJunyu LaiAdvertising : disabled
248*7dc08ffcSJunyu LaiNeighbor Discovery : enabled
249*7dc08ffcSJunyu LaiNeighbor Unreachability Detection : enabled
250*7dc08ffcSJunyu LaiRouter Discovery : dhcp
251*7dc08ffcSJunyu LaiManaged Address Configuration : enabled
252*7dc08ffcSJunyu LaiOther Stateful Configuration : enabled
253*7dc08ffcSJunyu LaiWeak Host Sends : disabled
254*7dc08ffcSJunyu LaiWeak Host Receives : disabled
255*7dc08ffcSJunyu LaiUse Automatic Metric : enabled
256*7dc08ffcSJunyu LaiIgnore Default Routes : disabled
257*7dc08ffcSJunyu LaiAdvertised Router Lifetime : 1800 seconds
258*7dc08ffcSJunyu LaiAdvertise Default Route : disabled
259*7dc08ffcSJunyu LaiCurrent Hop Limit : 0
260*7dc08ffcSJunyu LaiForce ARPND Wake up patterns : disabled
261*7dc08ffcSJunyu LaiDirected MAC Wake up patterns : disabled
262*7dc08ffcSJunyu LaiECN capability : application
263*7dc08ffcSJunyu Lai"""
264*7dc08ffcSJunyu Lai    mock_exec_query.side_effect = lambda *args, **kargs: exc_query_output.split("\n")
265*7dc08ffcSJunyu Lai    metrics = _get_metrics()
266*7dc08ffcSJunyu Lai    print(metrics)
267*7dc08ffcSJunyu Lai    assert metrics == {'1': 75, '7': 55}
268*7dc08ffcSJunyu Lai
269*7dc08ffcSJunyu Laitest_get_metrics()
270*7dc08ffcSJunyu Lai
271*7dc08ffcSJunyu Lai############
272*7dc08ffcSJunyu Lai############
273*7dc08ffcSJunyu Lai+ Windows arch unit tests
274*7dc08ffcSJunyu Lai
275*7dc08ffcSJunyu Lai= Test PowerShell availability
276*7dc08ffcSJunyu Laifrom scapy.config import conf
277*7dc08ffcSJunyu Laiassert conf.prog.powershell != None
278*7dc08ffcSJunyu Lai
279*7dc08ffcSJunyu Lai= Store powershell results
280*7dc08ffcSJunyu Laiimport mock
281*7dc08ffcSJunyu Laifrom scapy.config import conf
282*7dc08ffcSJunyu Lai
283*7dc08ffcSJunyu Laips_ip = get_ip_from_name(conf.iface.name)
284*7dc08ffcSJunyu Laips_if_list = get_windows_if_list()
285*7dc08ffcSJunyu Laips_read_routes = read_routes()
286*7dc08ffcSJunyu Lai
287*7dc08ffcSJunyu Lai# Turn on VBS mode
288*7dc08ffcSJunyu Laiconf.prog.powershell = None
289*7dc08ffcSJunyu Lai
290*7dc08ffcSJunyu Lai= Test get_ip_from_name with VBS
291*7dc08ffcSJunyu Laips_ip
292*7dc08ffcSJunyu Lai
293*7dc08ffcSJunyu Laiassert get_ip_from_name(conf.iface.name) == ps_ip
294*7dc08ffcSJunyu Lai
295*7dc08ffcSJunyu Lai= Test get_windows_if_list with VBS
296*7dc08ffcSJunyu Laips_if_list
297*7dc08ffcSJunyu Lai
298*7dc08ffcSJunyu Laidef is_in_if_list(i, list):
299*7dc08ffcSJunyu Lai    if not i["mac"]:
300*7dc08ffcSJunyu Lai        return True
301*7dc08ffcSJunyu Lai    for j in list:
302*7dc08ffcSJunyu Lai        if j["guid"] == i["guid"] and j["name"] == i["name"]:
303*7dc08ffcSJunyu Lai            return True
304*7dc08ffcSJunyu Lai    return False
305*7dc08ffcSJunyu Lai
306*7dc08ffcSJunyu Laivbs_if_list = get_windows_if_list()
307*7dc08ffcSJunyu Laivbs_if_list
308*7dc08ffcSJunyu Lai_correct = True
309*7dc08ffcSJunyu Laifor i in vbs_if_list:
310*7dc08ffcSJunyu Lai    if not is_in_if_list(i, ps_if_list):
311*7dc08ffcSJunyu Lai        _correct = False
312*7dc08ffcSJunyu Lai        break
313*7dc08ffcSJunyu Lai
314*7dc08ffcSJunyu Laiassert _correct
315*7dc08ffcSJunyu Lai
316*7dc08ffcSJunyu Lai= Test read_routes with VBS
317*7dc08ffcSJunyu Laips_read_routes
318*7dc08ffcSJunyu Lai
319*7dc08ffcSJunyu Laidef is_in_route_list(i, list):
320*7dc08ffcSJunyu Lai    # Ignore all empty IP or macs
321*7dc08ffcSJunyu Lai    if i[4] == '':
322*7dc08ffcSJunyu Lai        return True
323*7dc08ffcSJunyu Lai    if i[3].mac == '' or i[3].guid == '' or i[3].ip == '':
324*7dc08ffcSJunyu Lai        return True
325*7dc08ffcSJunyu Lai    for j in list:
326*7dc08ffcSJunyu Lai        if j[2] == i[2] and j[4] == i[4] and j[3].guid == i[3].guid:
327*7dc08ffcSJunyu Lai            return True
328*7dc08ffcSJunyu Lai    return False
329*7dc08ffcSJunyu Lai
330*7dc08ffcSJunyu Laivbs_read_routes = read_routes()
331*7dc08ffcSJunyu Laivbs_if_list
332*7dc08ffcSJunyu Lai_correct = True
333*7dc08ffcSJunyu Laifor i in vbs_read_routes:
334*7dc08ffcSJunyu Lai    if not is_in_route_list(i, ps_read_routes):
335*7dc08ffcSJunyu Lai        _correct = False
336*7dc08ffcSJunyu Lai        break
337*7dc08ffcSJunyu Lai
338*7dc08ffcSJunyu Laiassert _correct
339*7dc08ffcSJunyu Lai
340*7dc08ffcSJunyu Laiconf.prog._reload()
341*7dc08ffcSJunyu Lai
342*7dc08ffcSJunyu Lai= show_interfaces
343*7dc08ffcSJunyu Lai
344*7dc08ffcSJunyu Laifrom scapy.arch import show_interfaces
345*7dc08ffcSJunyu Lai
346*7dc08ffcSJunyu Laiwith ContextManagerCaptureOutput() as cmco:
347*7dc08ffcSJunyu Lai    show_interfaces()
348*7dc08ffcSJunyu Lai    lines = cmco.get_output().split("\n")[1:]
349*7dc08ffcSJunyu Lai    for l in lines:
350*7dc08ffcSJunyu Lai        if not l.strip():
351*7dc08ffcSJunyu Lai            continue
352*7dc08ffcSJunyu Lai        int(l[:2])
353*7dc08ffcSJunyu Lai
354*7dc08ffcSJunyu Lai= dev_from_pcapname
355*7dc08ffcSJunyu Lai
356*7dc08ffcSJunyu Laifrom scapy.config import conf
357*7dc08ffcSJunyu Lai
358*7dc08ffcSJunyu Laiassert dev_from_pcapname(conf.iface.pcap_name).guid == conf.iface.guid
359*7dc08ffcSJunyu Lai
360*7dc08ffcSJunyu Lai= test pcap_service_status
361*7dc08ffcSJunyu Lai
362*7dc08ffcSJunyu Laistatus = pcap_service_status()
363*7dc08ffcSJunyu Laistatus
364*7dc08ffcSJunyu Laiassert status[0] in ["npcap", "npf"]
365*7dc08ffcSJunyu Laiassert status[2] == True
366*7dc08ffcSJunyu Lai
367*7dc08ffcSJunyu Lai= test pcap_service_stop
368*7dc08ffcSJunyu Lai
369*7dc08ffcSJunyu Laipcap_service_stop()
370*7dc08ffcSJunyu Laiassert pcap_service_status()[2] == False
371*7dc08ffcSJunyu Lai
372*7dc08ffcSJunyu Lai= test pcap_service_start
373*7dc08ffcSJunyu Lai
374*7dc08ffcSJunyu Laipcap_service_start()
375*7dc08ffcSJunyu Laiassert pcap_service_status()[2] == True
376*7dc08ffcSJunyu Lai
377*7dc08ffcSJunyu Lai= Test auto-pcap start UI
378*7dc08ffcSJunyu Lai
379*7dc08ffcSJunyu Laiold_ifaces = IFACES.data
380*7dc08ffcSJunyu Lai
381*7dc08ffcSJunyu Lai@mock.patch("scapy.arch.windows.get_if_list")
382*7dc08ffcSJunyu Laidef _test_autostart_ui(mocked_getiflist):
383*7dc08ffcSJunyu Lai    mocked_getiflist.side_effect = lambda: []
384*7dc08ffcSJunyu Lai    IFACES.reload()
385*7dc08ffcSJunyu Lai    assert IFACES.data == {}
386*7dc08ffcSJunyu Lai
387*7dc08ffcSJunyu Lai_test_autostart_ui()
388*7dc08ffcSJunyu Lai
389*7dc08ffcSJunyu LaiIFACES.data = old_ifaces