[PATCH V3] tests: make run-tests.py invokes tests with needed variables only (issue5069)
liscju
piotr.listkiewicz at gmail.com
Tue Apr 26 17:12:02 UTC 2016
# HG changeset patch
# User liscju <piotr.listkiewicz at gmail.com>
# Date 1459165803 -7200
# Mon Mar 28 13:50:03 2016 +0200
# Branch stable
# Node ID 32d476e8526d460da85af3ae6f0415d5e94de67c
# Parent 38292b227debf6393dc1e2c6ff886f85f6673646
tests: make run-tests.py invokes tests with needed variables only (issue5069)
It introduces usedenvvariables list which contains all used environment
variables used in run-tests.py and in tests directory. It gives third
party extension option to include additional environment variables by
setting them with HGTEST_ prefix.
diff -r 38292b227deb -r 32d476e8526d tests/run-tests.py
--- a/tests/run-tests.py Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/run-tests.py Mon Mar 28 13:50:03 2016 +0200
@@ -69,6 +69,42 @@ except ImportError:
from xml.dom import minidom
import unittest
+usedenvvariables = set([
+ 'BINDIR',
+ 'CHGHG',
+ 'CHGSOCKNAME',
+ 'COLUMNS',
+ 'COVERAGE_DIR',
+ 'COVERAGE_PROCESS_START',
+ 'DAEMON_PIDS',
+ 'EMAIL',
+ 'HGEDITOR',
+ 'HGENCODING',
+ 'HGENCODINGMODE',
+ 'HGMERGE',
+ 'HGRCPATH',
+ 'HGTEST_RUN_TESTS_PURE',
+ 'HGTEST_SLOW',
+ 'HGTMP',
+ 'HGUSER',
+ 'HOME',
+ 'LANG',
+ 'LANGUAGE',
+ 'LC_ALL',
+ 'MSYSTEM',
+ 'PATH',
+ 'PYTHON',
+ 'PYTHON3',
+ 'PYTHONHASHSEED',
+ 'RUNTESTDIR',
+ 'TERM',
+ 'TESTDIR',
+ 'TESTTMP',
+ 'TMP',
+ 'TZ',
+ 'PYTHONPATH'
+])
+
osenvironb = getattr(os, 'environb', os.environ)
processlock = threading.Lock()
@@ -471,6 +507,16 @@ def killdaemons(pidfile):
return killmod.killdaemons(pidfile, tryhard=False, remove=True,
logfn=vlog)
+def copyusedenviron(environ):
+ env = dict()
+ for key in usedenvvariables:
+ if key in environ:
+ env[key] = environ[key]
+ for key in environ:
+ if key.startswith("HGTEST_"):
+ env[key] = environ[key]
+ return env
+
class Test(unittest.TestCase):
"""Encapsulates a single, runnable test.
@@ -803,7 +849,7 @@ class Test(unittest.TestCase):
def defineport(i):
offset = '' if i == 0 else '%s' % i
env["HGPORT%s" % offset] = '%s' % (self._startport + i)
- env = os.environ.copy()
+ env = copyusedenviron(os.environ)
env['TESTTMP'] = self._testtmp
env['HOME'] = self._testtmp
# This number should match portneeded in _getport
@@ -827,16 +873,6 @@ class Test(unittest.TestCase):
env['COLUMNS'] = '80'
env['TERM'] = 'xterm'
- for k in ('HG HGPROF CDPATH GREP_OPTIONS http_proxy no_proxy ' +
- 'NO_PROXY').split():
- if k in env:
- del env[k]
-
- # unset env related to hooks
- for k in env.keys():
- if k.startswith('HG_'):
- del env[k]
-
if self._usechg:
env['CHGSOCKNAME'] = os.path.join(self._chgsockdir, b'server')
diff -r 38292b227deb -r 32d476e8526d tests/test-run-tests.t
--- a/tests/test-run-tests.t Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-run-tests.t Mon Mar 28 13:50:03 2016 +0200
@@ -73,6 +73,28 @@ a succesful test
.
# Ran 1 tests, 0 skipped, 0 warned, 0 failed.
+tests environment has only fixed set of variables,
+all others except ones with 'HGTEST_' prefix are not
+copied to test environment
+==================
+
+ $ cat > test-read-env-variables.t << EOF
+ > $ echo "\$HGTEST_VAR_TO_ENV"
+ > variables read succesfully
+ > $ echo "\$OTHER_VAR_NOT_USED_IN_TEST"
+ >
+ > EOF
+ $ HGTEST_VAR_TO_ENV='variables read succesfully'
+ $ export HGTEST_VAR_TO_ENV
+ $ OTHER_VAR_NOT_USED_IN_TEST='should not be read'
+ $ export OTHER_VAR_NOT_USED_IN_TEST
+ $ rt test-read-env-variables.t
+ .
+ # Ran 1 tests, 0 skipped, 0 warned, 0 failed.
+ $ rm test-read-env-variables.t
+ $ unset HGTEST_VAR_TO_ENV
+ $ unset OTHER_VAR_NOT_USED_IN_TEST
+
failing test
==================
More information about the Mercurial-devel
mailing list