forked from wireshark/wireshark
-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsuite_nameres.py
134 lines (116 loc) · 5.75 KB
/
suite_nameres.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#
# Wireshark tests
# By Gerald Combs <gerald@wireshark.org>
#
# Ported from a set of Bash scripts which were copyright 2005 Ulf Lamping
#
# SPDX-License-Identifier: GPL-2.0-or-later
#
'''Name resolution tests'''
import os.path
import shutil
import subprocess
from subprocesstest import grep_output
import pytest
tf_str = { True: 'TRUE', False: 'FALSE' }
custom_profile_name = 'Custom Profile'
@pytest.fixture
def nameres_setup(program_path, conf_path):
bundle_path = os.path.join(program_path, 'Wireshark.app', 'Contents', 'MacOS')
if os.path.isdir(bundle_path):
# Don't modify our application bundle.
global_path = None
else:
global_path = program_path
custom_profile_path = os.path.join(conf_path, 'profiles', custom_profile_name)
os.makedirs(custom_profile_path)
this_dir = os.path.dirname(__file__)
hosts_path_pfx = os.path.join(this_dir, 'hosts.')
if global_path is not None:
shutil.copyfile(hosts_path_pfx + 'global', os.path.join(global_path, 'hosts'))
shutil.copyfile(hosts_path_pfx + 'personal', os.path.join(conf_path, 'hosts'))
shutil.copyfile(hosts_path_pfx + 'custom', os.path.join(custom_profile_path, 'hosts'))
return global_path is not None
@pytest.fixture
def check_name_resolution(cmd_tshark, capture_file, nameres_setup, test_env):
def check_name_resolution_real(o_net_name, o_external_name_res, o_hosts_file, custom_profile, grep_str, fail_on_match=False):
if grep_str.startswith('global') and not nameres_setup:
pytest.skip('Global name resolution tests would require modifying the application bundle')
tshark_cmd = (cmd_tshark,
'-r', capture_file('dns+icmp.pcapng.gz'),
'-o', 'nameres.network_name: ' + tf_str[o_net_name],
'-o', 'nameres.use_external_name_resolver: ' + tf_str[o_external_name_res],
'-o', 'nameres.hosts_file_handling: ' + tf_str[o_hosts_file],
)
if custom_profile:
tshark_cmd += ('-C', custom_profile_name)
proc = subprocess.run(tshark_cmd, check=True, capture_output=True, encoding='utf-8', env=test_env)
if fail_on_match:
assert not grep_output(proc.stdout, grep_str)
else:
assert grep_output(proc.stdout, grep_str)
return check_name_resolution_real
class TestNameResolution:
def test_name_resolution_net_t_ext_f_hosts_f_global(self, check_name_resolution):
'''Name resolution, no external, no profile hosts, global profile.'''
# nameres.network_name: True
# nameres.use_external_name_resolver: False
# nameres.hosts_file_handling: False
# Profile: Default
check_name_resolution(True, False, False, False, 'global-8-8-8-8')
def test_name_resolution_net_t_ext_f_hosts_f_personal(self, check_name_resolution):
'''Name resolution, no external, no profile hosts, personal profile.'''
# nameres.network_name: True
# nameres.use_external_name_resolver: False
# nameres.hosts_file_handling: False
# Profile: Default
check_name_resolution(True, False, False, False, 'personal-8-8-4-4')
def test_name_resolution_net_t_ext_f_hosts_f_custom(self, check_name_resolution):
'''Name resolution, no external, no profile hosts, custom profile.'''
# nameres.network_name: True
# nameres_use_external_name_resolver: False
# nameres.hosts_file_handling: False
# Profile: Custom
check_name_resolution(True, False, False, True, 'custom-4-2-2-2')
def test_name_resolution_net_t_ext_f_hosts_t_global(self, check_name_resolution):
'''Name resolution, no external, profile hosts, global profile.'''
# nameres.network_name: True
# nameres.use_external_name_resolver: False
# nameres.hosts_file_handling: True
# Profile: Default
check_name_resolution(True, False, True, False, 'global-8-8-8-8', True)
def test_name_resolution_net_t_ext_f_hosts_t_personal(self, check_name_resolution):
'''Name resolution, no external, profile hosts, personal profile.'''
# nameres.network_name: True
# nameres.use_external_name_resolver: False
# nameres.hosts_file_handling: True
# Profile: Default
check_name_resolution(True, False, True, False, 'personal-8-8-4-4')
def test_name_resolution_net_t_ext_f_hosts_t_custom(self, check_name_resolution):
'''Name resolution, no external, profile hosts, custom profile.'''
# nameres.network_name: True
# nameres_use_external_name_resolver: False
# nameres.hosts_file_handling: True
# Profile: Custom
check_name_resolution(True, False, True, True, 'custom-4-2-2-2')
def test_hosts_any(self, cmd_tshark, capture_file):
stdout = subprocess.check_output((cmd_tshark,
'-r', capture_file('dns+icmp.pcapng.gz'),
'-qz', 'hosts',
), encoding='utf-8')
assert '174.137.42.65\twww.wireshark.org' in stdout
assert 'fe80::6233:4bff:fe13:c558\tCrunch.local' in stdout
def test_hosts_ipv4(self, cmd_tshark, capture_file):
stdout = subprocess.check_output((cmd_tshark,
'-r', capture_file('dns+icmp.pcapng.gz'),
'-qz', 'hosts,ipv4',
), encoding='utf-8')
assert '174.137.42.65\twww.wireshark.org' in stdout
assert 'fe80::6233:4bff:fe13:c558\tCrunch.local' not in stdout
def test_hosts_ipv6(self, cmd_tshark, capture_file):
stdout = subprocess.check_output((cmd_tshark,
'-r', capture_file('dns+icmp.pcapng.gz'),
'-qz', 'hosts,ipv6',
), encoding='utf-8')
assert '174.137.42.65\twww.wireshark.org' not in stdout
assert 'fe80::6233:4bff:fe13:c558\tCrunch.local' in stdout