[tor-commits] [stem/master] Support additional test torrc options
atagar at torproject.org
atagar at torproject.org
Fri Jun 7 23:21:58 UTC 2019
commit 394852cf08e7eb65904918591b503696bcac86de
Author: Damian Johnson <atagar at torproject.org>
Date: Fri Jun 7 15:42:47 2019 -0700
Support additional test torrc options
Teor would like to run stem's integ tests against a Chutnet network...
https://trac.torproject.org/projects/tor/ticket/30702
Highly unusual use case, but making it possible. Stem now accepts a
STEM_TEST_CONFIG environment variable that overwrites any internal
testing configuration values (see test/settings.cfg), along with
a 'integ.extra_torrc' option.
So to use this...
1. Write a file that overwrites our integ.extra_torrc
configuration. Available macros include...
[DATA_DIR]
[OR_PORT]
[SOCKS_PORT]
2. Set STEM_TEST_CONFIG to the path of that file.
3. Run our integ tests, and check the beginning of the output where it says
'writing torrc' to confirm that the torrc looks as you expect.
For example...
% cat /home/atagar/Desktop/stem/my_test_config
integ.extra_torrc
|Nickname Demo[OR_PORT]
|FetchUselessDescriptors 1
% export STEM_TEST_CONFIG=/home/atagar/Desktop/stem/my_test_config
% ./run_tests.py --integ
...
Setting up a test instance...
making test directory (/home/atagar/Desktop/stem/test/data)... done
configuring logger (/home/atagar/Desktop/stem/test/data/log)... done
writing torrc (/home/atagar/Desktop/stem/test/data/torrc)... done
# Configuration for stem's integration tests
DataDirectory /home/atagar/Desktop/stem/test/data
SocksPort 1112
ORPort 1113
ExitRelay 0
PublishServerDescriptor 0
AssumeReachable 1
DownloadExtraInfo 1
Log notice stdout
Log debug file /home/atagar/Desktop/stem/test/data/tor_log
# Torrc options for the RUN_OPEN target
ControlPort 1111
# Torrc options from /home/atagar/Desktop/stem/my_test_config
Nickname Demo1113
FetchUselessDescriptors 1
---
run_tests.py | 3 +++
test/runner.py | 36 ++++++++++++++++++------------------
test/settings.cfg | 25 +++++++++++++++++++++++++
3 files changed, 46 insertions(+), 18 deletions(-)
diff --git a/run_tests.py b/run_tests.py
index ef31a05e..77db73b5 100755
--- a/run_tests.py
+++ b/run_tests.py
@@ -187,6 +187,9 @@ def main():
test_config = stem.util.conf.get_config('test')
test_config.load(os.path.join(test.STEM_BASE, 'test', 'settings.cfg'))
+ if 'STEM_TEST_CONFIG' in os.environ:
+ test_config.load(os.environ['STEM_TEST_CONFIG'])
+
try:
args = test.arguments.parse(sys.argv[1:])
test.task.TOR_VERSION.args = (args.tor_path,)
diff --git a/test/runner.py b/test/runner.py
index b7da06a4..c343ed57 100644
--- a/test/runner.py
+++ b/test/runner.py
@@ -52,6 +52,8 @@ import test
from test.output import println, STATUS, ERROR, SUBSTATUS, NO_NL
CONFIG = stem.util.conf.config_dict('test', {
+ 'integ.torrc': '',
+ 'integ.extra_torrc': '',
'integ.test_directory': './test/data',
'integ.log': './test/data/log',
'target.torrc': {},
@@ -60,18 +62,6 @@ CONFIG = stem.util.conf.config_dict('test', {
SOCKS_PORT = 1112
ORPORT = 1113
-BASE_TORRC = """# configuration for stem integration tests
-DataDirectory %%s
-SocksPort %i
-ORPort %i
-ExitRelay 0
-PublishServerDescriptor 0
-AssumeReachable 1
-DownloadExtraInfo 1
-Log notice stdout
-Log debug file %%s/tor_log
-""" % (SOCKS_PORT, ORPORT)
-
# singleton Runner instance
INTEG_RUNNER = None
@@ -221,22 +211,32 @@ class Runner(object):
data_dir_path = './%s' % os.path.basename(self._test_dir)
config_csv = CONFIG['target.torrc'].get(config_target)
- extra_torrc_opts = []
+ target_torrc_opts = []
if config_csv:
for opt in config_csv.split(','):
opt = opt.strip()
if opt in Torrc.keys():
- extra_torrc_opts.append(Torrc[opt])
+ target_torrc_opts.append(Torrc[opt])
else:
raise ValueError("'%s' isn't a test.runner.Torrc enumeration" % opt)
- self._custom_opts = extra_torrc_opts
- self._torrc_contents = BASE_TORRC % (data_dir_path, data_dir_path)
+ self._custom_opts = target_torrc_opts
+
+ self._torrc_contents = CONFIG['integ.torrc']
+
+ if target_torrc_opts:
+ self._torrc_contents += '\n\n# Torrc options for the %s target\n\n' % config_target
+ self._torrc_contents += '\n'.join(target_torrc_opts)
+
+ if CONFIG['integ.extra_torrc']:
+ self._torrc_contents += '\n\n# Torrc options from %s\n\n' % os.environ['STEM_TEST_CONFIG']
+ self._torrc_contents += CONFIG['integ.extra_torrc']
- if extra_torrc_opts:
- self._torrc_contents += '\n'.join(extra_torrc_opts) + '\n'
+ self._torrc_contents = self._torrc_contents.replace('[DATA_DIR]', data_dir_path)
+ self._torrc_contents = self._torrc_contents.replace('[SOCKS_PORT]', str(SOCKS_PORT))
+ self._torrc_contents = self._torrc_contents.replace('[OR_PORT]', str(ORPORT))
try:
self._tor_cwd = os.getcwd()
diff --git a/test/settings.cfg b/test/settings.cfg
index 5b4feb60..6a2f5914 100644
--- a/test/settings.cfg
+++ b/test/settings.cfg
@@ -19,6 +19,31 @@ integ.test_directory ./test/data
exclude_paths .*/stem/test/data/.*
integ.log ./test/data/log
+integ.torrc
+|# Configuration for stem's integration tests
+|
+|DataDirectory [DATA_DIR]
+|SocksPort [SOCKS_PORT]
+|ORPort [OR_PORT]
+|ExitRelay 0
+|PublishServerDescriptor 0
+|AssumeReachable 1
+|DownloadExtraInfo 1
+|Log notice stdout
+|Log debug file [DATA_DIR]/tor_log
+
+# To append additional torrc options you can overwrite the following. For
+# example...
+#
+# % cat /home/atagar/Desktop/stem/my_test_config
+# integ.extra_torrc
+# |Nickname StemTestDemo
+# |FetchUselessDescriptors 1
+#
+# % export STEM_TEST_CONFIG=/home/atagar/Desktop/stem
+
+integ.extra_torrc
+
# The following are less testing framework attributes that aren't as commonly
# reconfigured.
#
More information about the tor-commits
mailing list