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 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212
|
# Testing Configuration
#
# The following contains customizable configuration information for stem's
# testing framework.
#
# integ.test_directory
# Path used for our data directory and any temporary test resources. Relative
# paths are expanded in reference to the location of 'run_tests.py'.
#
# If set then the directory's contents are reused for future tests (so we
# have a faster startup and lower load on authorities). If set to an empty
# value then this makes a fresh data directory for each test run.
#
# integ.log
# Path runtime logs are placed. Relative paths are expanded in reference to
# 'run_tests.py'. Logging is disabled if set ot an empty value.
integ.test_directory ./test/data
exclude_paths .*/stem/test/data/.*
integ.log ./test/data/log
# The following are less testing framework attributes that aren't as commonly
# reconfigured.
#
# msg.*
# Rendered text.
#
# target.*
# Attributes of the integration testing targets. This helps determine what is
# ran when the user runs with '--target'.
msg.help
|Usage runTests.py [OPTION]
|Runs tests for the stem library.
|
| -a, --all runs unit, integ, and style checks (same as '-uis')
| -u, --unit runs unit tests
| -i, --integ runs integration tests
| -t, --target TARGET comma separated list of extra targets for integ tests
| --test TEST_NAME only run tests modules containing the given name
| --python3 runs tests against a 2to3 conversion of the codebase
| -l, --log RUNLEVEL includes logging output with test results, runlevels:
| TRACE, DEBUG, INFO, NOTICE, WARN, ERROR
| --tor PATH custom tor binary to run testing against
| -v, --verbose provides additional test output
| -h, --help presents this help
|
| Examples:
| run_tests.py --unit --integ
| Run unit and integraiton tests.
|
| run_tests.py --integ --target RUN_ALL
| Run integraion tests against all tor configurations.
|
| run_tests.py --integ --test test.integ.util
| Only run integration tests for the util modules.
|
| Integration targets:
##################
# CATEGORY: TARGET #
##################
# The '--help' description of the target.
target.description ONLINE => Includes tests that require network activity.
target.description RELATIVE => Uses a relative path for tor's data directory.
target.description CHROOT => Simulates a chroot setup.
target.description RUN_NONE => Configuration without a way for controllers to connect.
target.description RUN_OPEN => Configuration with an open control port (default).
target.description RUN_PASSWORD => Configuration with password authentication.
target.description RUN_COOKIE => Configuration with an authentication cookie.
target.description RUN_MULTIPLE => Configuration with both password and cookie authentication.
target.description RUN_SOCKET => Configuration with a control socket.
target.description RUN_SCOOKIE => Configuration with a control socket and authentication cookie.
target.description RUN_PTRACE => Configuration with an open control port and 'DisableDebuggerAttachment 0'
target.description RUN_ALL => Runs integration tests for all connection configurations.
# Version that we need to run the target. These need to match an enumeration of
# stem.version.Requirement.
target.prereq RUN_PTRACE => TORRC_DISABLE_DEBUGGER_ATTACHMENT
# Torrc configuration options included with the target. Having this option set
# means that each of these targets will have a dedicated integration test run.
target.torrc RUN_NONE =>
target.torrc RUN_OPEN => PORT
target.torrc RUN_PASSWORD => PORT, PASSWORD
target.torrc RUN_COOKIE => PORT, COOKIE
target.torrc RUN_MULTIPLE => PORT, PASSWORD, COOKIE
target.torrc RUN_SOCKET => SOCKET
target.torrc RUN_SCOOKIE => SOCKET, COOKIE
target.torrc RUN_PTRACE => PORT, PTRACE
# PEP8 compliance issues that we're ignoreing...
#
# * E251 no spaces around keyword / parameter equals
#
# This one I dislike a great deal. It makes keyword arguments different
# from assignments which looks... aweful. I'm not sure what PEP8's author
# was on when he wrote this one but it's stupid.
#
# Someone else can change this if they really care.
#
# * E501 line is over 79 characters
#
# We're no longer on TTY terminals. Overly constraining line length makes
# things far less readable, encouraging bad practices like abbreviated
# variable names.
#
# If the code fits on my tiny netbook screen then it's narrow enough.
#
# * E111 and E121 four space indentations
#
# Ahhh, indentation. The holy war that'll never die. Sticking with two
# space indentations since it leads to shorter lines.
#
# * E127 continuation line over-indented for visual indent
#
# Pep8 only works with this one if we have four space indents (its
# detection is based on multiples of four).
pep8.ignore E111
pep8.ignore E121
pep8.ignore E501
pep8.ignore E251
pep8.ignore E127
# False positives from pyflakes. These are mappings between the path and the
# issue.
pyflakes.ignore run_tests.py => 'unittest' imported but unused
pyflakes.ignore stem/control.py => undefined name 'controller'
pyflakes.ignore stem/prereq.py => 'RSA' imported but unused
pyflakes.ignore stem/prereq.py => 'asn1' imported but unused
pyflakes.ignore stem/prereq.py => 'unittest' imported but unused
pyflakes.ignore stem/prereq.py => 'long_to_bytes' imported but unused
pyflakes.ignore stem/util/test_tools.py => 'pyflakes' imported but unused
pyflakes.ignore stem/util/test_tools.py => 'pep8' imported but unused
pyflakes.ignore test/mocking.py => undefined name 'test'
pyflakes.ignore test/unit/response/events.py => 'from stem import *' used; unable to detect undefined names
# Test modules we want to run. Modules are roughly ordered by the dependencies
# so the lowest level tests come first. This is because a problem in say,
# controller message parsing, will cause all higher level tests to fail too.
# Hence we want the test that most narrowly exhibits problems to come first.
test.unit_tests
|test.unit.util.enum.TestEnum
|test.unit.util.connection.TestConnection
|test.unit.util.conf.TestConf
|test.unit.util.proc.TestProc
|test.unit.util.str_tools.TestStrTools
|test.unit.util.system.TestSystem
|test.unit.util.tor_tools.TestTorTools
|test.unit.descriptor.export.TestExport
|test.unit.descriptor.reader.TestDescriptorReader
|test.unit.descriptor.remote.TestDescriptorDownloader
|test.unit.descriptor.server_descriptor.TestServerDescriptor
|test.unit.descriptor.extrainfo_descriptor.TestExtraInfoDescriptor
|test.unit.descriptor.microdescriptor.TestMicrodescriptor
|test.unit.descriptor.router_status_entry.TestRouterStatusEntry
|test.unit.descriptor.tordnsel.TestTorDNSELDescriptor
|test.unit.descriptor.networkstatus.directory_authority.TestDirectoryAuthority
|test.unit.descriptor.networkstatus.key_certificate.TestKeyCertificate
|test.unit.descriptor.networkstatus.document_v2.TestNetworkStatusDocument
|test.unit.descriptor.networkstatus.document_v3.TestNetworkStatusDocument
|test.unit.descriptor.networkstatus.bridge_document.TestBridgeNetworkStatusDocument
|test.unit.exit_policy.rule.TestExitPolicyRule
|test.unit.exit_policy.policy.TestExitPolicy
|test.unit.version.TestVersion
|test.unit.tutorial.TestTutorial
|test.unit.response.control_message.TestControlMessage
|test.unit.response.control_line.TestControlLine
|test.unit.response.events.TestEvents
|test.unit.response.getinfo.TestGetInfoResponse
|test.unit.response.getconf.TestGetConfResponse
|test.unit.response.singleline.TestSingleLineResponse
|test.unit.response.authchallenge.TestAuthChallengeResponse
|test.unit.response.protocolinfo.TestProtocolInfoResponse
|test.unit.response.mapaddress.TestMapAddressResponse
|test.unit.connection.authentication.TestAuthenticate
|test.unit.connection.connect.TestConnect
|test.unit.control.controller.TestControl
|test.unit.interpreter.arguments.TestArgumentParsing
|test.unit.interpreter.autocomplete.TestAutocompletion
|test.unit.interpreter.help.TestHelpResponses
|test.unit.interpreter.commands.TestInterpretorCommands
|test.unit.doctest.TestDocumentation
test.integ_tests
|test.integ.util.conf.TestConf
|test.integ.util.connection.TestConnection
|test.integ.util.proc.TestProc
|test.integ.util.system.TestSystem
|test.integ.descriptor.reader.TestDescriptorReader
|test.integ.descriptor.remote.TestDescriptorDownloader
|test.integ.descriptor.server_descriptor.TestServerDescriptor
|test.integ.descriptor.extrainfo_descriptor.TestExtraInfoDescriptor
|test.integ.descriptor.microdescriptor.TestMicrodescriptor
|test.integ.descriptor.networkstatus.TestNetworkStatus
|test.integ.version.TestVersion
|test.integ.response.protocolinfo.TestProtocolInfo
|test.integ.process.TestProcess
|test.integ.socket.control_socket.TestControlSocket
|test.integ.socket.control_message.TestControlMessage
|test.integ.connection.authentication.TestAuthenticate
|test.integ.connection.connect.TestConnect
|test.integ.control.base_controller.TestBaseController
|test.integ.control.controller.TestController
|