[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