test: reduce further influence from the environment

Some tests used the default home directory which can have side-effects
(such as loading plugins, loading deprecated preferences). These could
cause tests to fail. Always use a sane environment to fix this.

Change getTsharkInfo to use this clean environment as well
(WIRESHARK_CONFIG_DIR does not exist with master-2.6 and would also not
propagate things like ASAN_OPTIONS=detect_leaks=0).

Change-Id: I1674f71972d35de91d191e0c29fdb59b8a0a56ce
Reviewed-on: https://code.wireshark.org/review/30165
Petri-Dish: Peter Wu <peter@lekensteyn.nl>
Tested-by: Petri Dish Buildbot
Reviewed-by: Anders Broman <a.broman58@gmail.com>
This commit is contained in:
Peter Wu 2018-10-12 18:12:01 +02:00 committed by Anders Broman
parent fe9dcc1647
commit 460c26516a
3 changed files with 17 additions and 11 deletions

View File

@ -104,7 +104,7 @@ def getTsharkInfo():
(cmd_tshark, '--version'),
stderr=subprocess.PIPE,
universal_newlines=True,
env={'WIRESHARK_CONFIG_DIR': '/dummy/non/existing'}
env=baseEnv()
).replace('\n', ' ')
except subprocess.CalledProcessError as e:
logging.warning("Failed to detect tshark features: %s", e)
@ -172,8 +172,18 @@ def setProgramPath(path):
setUpHostFiles()
return retval
def testEnvironment():
return test_env
def baseEnv(home=None):
"""A modified environment to ensure reproducible tests."""
env = os.environ.copy()
env['TZ'] = 'UTC'
home_env = 'APPDATA' if sys.platform.startswith('win32') else 'HOME'
if home:
env[home_env] = home
else:
# This directory is supposed not to be written and is used by
# "readonly" tests that do not read any other preferences.
env[home_env] = "/wireshark-tests-unused"
return env
def setUpTestEnvironment():
global home_path
@ -185,10 +195,8 @@ def setUpTestEnvironment():
test_confdir = tempfile.mkdtemp(prefix='wireshark-tests.')
home_path = os.path.join(test_confdir, 'home')
if sys.platform.startswith('win32'):
home_env = 'APPDATA'
conf_path = os.path.join(home_path, 'Wireshark')
else:
home_env = 'HOME'
conf_path = os.path.join(home_path, '.config', 'wireshark')
os.makedirs(conf_path)
# Test spaces while we're here.
@ -209,11 +217,9 @@ def setUpTestEnvironment():
setUpUatFile(uat)
# Set up our environment
test_env = os.environ.copy()
test_env = baseEnv(home=home_path)
test_env['WIRESHARK_RUN_FROM_BUILD_DIRECTORY'] = 'True'
test_env['WIRESHARK_QUIT_AFTER_CAPTURE'] = 'True'
test_env['TZ'] = 'UTC'
test_env[home_env] = home_path
def setUpUatFile(conf_file):
global home_path

View File

@ -178,7 +178,7 @@ class case_tshark_dump_glossaries(subprocesstest.SubprocessTestCase):
def test_tshark_glossary_valid_utf8(self):
for glossary in glossaries:
env = os.environ.copy()
env = config.baseEnv()
env['LANG'] = 'en_US.UTF-8'
g_contents = subprocess.check_output((config.cmd_tshark, '-G', glossary), env=env, stderr=subprocess.PIPE)
decoded = True
@ -189,7 +189,7 @@ class case_tshark_dump_glossaries(subprocesstest.SubprocessTestCase):
self.assertTrue(decoded, '{} is not valid UTF-8'.format(glossary))
def test_tshark_glossary_plugin_count(self):
self.runProcess((config.cmd_tshark, '-G', 'plugins'), env=os.environ.copy())
self.runProcess((config.cmd_tshark, '-G', 'plugins'), env=config.baseEnv())
self.assertGreaterEqual(self.countOutput('dissector'), 10, 'Fewer than 10 dissector plugins found')

View File

@ -129,7 +129,7 @@ def check_text2pcap(self, cap_file, file_type, expected_packets=None, expected_d
cf = cf_path,
of = testin_file,
)
self.assertRun(tshark_cmd, shell=True, env=os.environ.copy())
self.assertRun(tshark_cmd, shell=True, env=config.baseEnv())
testout_fname = file_type_to_testout[file_type]
testout_file = self.filename_from_id(testout_fname)