commit 19491fb8a411a5737ca438b9dc943a13f8eb44b8 Author: Damian Johnson atagar@torproject.org Date: Fri Jan 13 09:15:49 2012 -0800
Integ target for running with ptrace
Integraion target that runs with 'DisableDebuggerAttachment 0'. This allows us to exercise use cases that require ptrace with newer tor versions. If 'DisableDebuggerAttachment' isn't supported then we skip the target. --- run_tests.py | 13 ++++++++++++- stem/version.py | 1 + test/integ/connection/protocolinfo.py | 2 ++ test/runner.py | 4 +++- test/testrc.sample | 5 ++++- 5 files changed, 22 insertions(+), 3 deletions(-)
diff --git a/run_tests.py b/run_tests.py index f458a80..64bde44 100755 --- a/run_tests.py +++ b/run_tests.py @@ -62,7 +62,7 @@ INTEG_TESTS = ( )
# Integration tests above the basic suite. -TARGETS = stem.util.enum.Enum(*[(v, v) for v in ("ONLINE", "RELATIVE", "CONN_NONE", "CONN_OPEN", "CONN_PASSWORD", "CONN_COOKIE", "CONN_MULTIPLE", "CONN_SOCKET", "CONN_SCOOKIE", "CONN_ALL")]) +TARGETS = stem.util.enum.Enum(*[(v, v) for v in ("ONLINE", "RELATIVE", "CONN_NONE", "CONN_OPEN", "CONN_PASSWORD", "CONN_COOKIE", "CONN_MULTIPLE", "CONN_SOCKET", "CONN_SCOOKIE", "CONN_PTRACE", "CONN_ALL")])
TARGET_ATTR = { TARGETS.ONLINE: ("test.integ.target.online", "Includes tests that require network activity."), @@ -74,6 +74,7 @@ TARGET_ATTR = { TARGETS.CONN_MULTIPLE: ("test.integ.target.connection.multiple", "Configuration with both password and cookie authentication."), TARGETS.CONN_SOCKET: ("test.integ.target.connection.socket", "Configuration with a control socket."), TARGETS.CONN_SCOOKIE: ("test.integ.target.connection.scookie", "Configuration with a control socket and authentication cookie."), + TARGETS.CONN_PTRACE: ("test.integ.target.connection.ptrace", "Configuration with an open control port and 'DisableDebuggerAttachment 0'"), TARGETS.CONN_ALL: ("test.integ.target.connection.all", "Runs integration tests for all connection configurations."), }
@@ -256,6 +257,7 @@ if __name__ == '__main__': "multiple": test.runner.TorConnection.MULTIPLE, "socket": test.runner.TorConnection.SOCKET, "scookie": test.runner.TorConnection.SCOOKIE, + "ptrace": test.runner.TorConnection.PTRACE, }
for type_key in conn_type_mappings: @@ -267,6 +269,15 @@ if __name__ == '__main__': connection_types = [test.runner.TorConnection.OPEN]
for connection_type in connection_types: + if connection_type == test.runner.TorConnection.PTRACE: + our_version = stem.version.get_system_tor_version(tor_cmd) + req_version = stem.version.Requirement.DISABLE_DEBUGGER_ATTACHMENT + + if our_version < req_version: + print term.format("Unable to run CONN_PTRACE target: DisableDebuggerAttachment was added in %s" % req_version, term.Color.RED, term.Attr.BOLD) + print + continue + try: integ_runner.start(tor_cmd, connection_type = connection_type)
diff --git a/stem/version.py b/stem/version.py index 0b57301..e5b9997 100644 --- a/stem/version.py +++ b/stem/version.py @@ -143,5 +143,6 @@ class Version: Requirement = stem.util.enum.Enum( ("GETINFO_CONFIG_TEXT", Version("0.2.2.7-alpha")), ("CONTROL_SOCKET", Version("0.2.0.30")), + ("DISABLE_DEBUGGER_ATTACHMENT", Version("0.2.3.9")), )
diff --git a/test/integ/connection/protocolinfo.py b/test/integ/connection/protocolinfo.py index 6f036c8..0214534 100644 --- a/test/integ/connection/protocolinfo.py +++ b/test/integ/connection/protocolinfo.py @@ -161,6 +161,8 @@ class TestProtocolInfo(unittest.TestCase): auth_methods = (stem.connection.AuthMethod.NONE,) elif connection_type == test.runner.TorConnection.SCOOKIE: auth_methods = (stem.connection.AuthMethod.COOKIE,) + elif connection_type == test.runner.TorConnection.PTRACE: + auth_methods = (stem.connection.AuthMethod.NONE,) else: self.fail("Unrecognized connection type: %s" % connection_type)
diff --git a/test/runner.py b/test/runner.py index 36c41ce..4d163bf 100644 --- a/test/runner.py +++ b/test/runner.py @@ -50,7 +50,7 @@ DEFAULT_CONFIG = { # Methods for connecting to tor. General integration tests only run with the # DEFAULT_TOR_CONNECTION, but expanded integ tests will run with all of them.
-TorConnection = stem.util.enum.Enum("NONE", "OPEN", "PASSWORD", "COOKIE", "MULTIPLE", "SOCKET", "SCOOKIE") +TorConnection = stem.util.enum.Enum("NONE", "OPEN", "PASSWORD", "COOKIE", "MULTIPLE", "SOCKET", "SCOOKIE", "PTRACE") DEFAULT_TOR_CONNECTION = TorConnection.OPEN
STATUS_ATTR = (term.Color.BLUE, term.Attr.BOLD) @@ -78,6 +78,7 @@ OPT_PORT = "ControlPort %i" % CONTROL_PORT OPT_COOKIE = "CookieAuthentication 1" OPT_PASSWORD = "HashedControlPassword 16:8C423A41EF4A542C6078985270AE28A4E04D056FB63F9F201505DB8E06" OPT_SOCKET = "ControlSocket %s" % CONTROL_SOCKET_PATH +OPT_PTRACE = "DisableDebuggerAttachment 0"
# mapping of TorConnection to their options
@@ -89,6 +90,7 @@ CONNECTION_OPTS = { TorConnection.MULTIPLE: [OPT_PORT, OPT_PASSWORD, OPT_COOKIE], TorConnection.SOCKET: [OPT_SOCKET], TorConnection.SCOOKIE: [OPT_SOCKET, OPT_COOKIE], + TorConnection.PTRACE: [OPT_PORT, OPT_PTRACE], }
def get_runner(): diff --git a/test/testrc.sample b/test/testrc.sample index f0b917d..d5a9326 100644 --- a/test/testrc.sample +++ b/test/testrc.sample @@ -23,8 +23,10 @@ # test.integ.target.connection.open # test.integ.target.connection.password # test.integ.target.connection.cookie -# test.integ.target.connection.muiltipe +# test.integ.target.connection.multiple # test.integ.target.connection.socket +# test.integ.target.connection.scookie +# test.integ.target.connection.ptrace # test.integ.target.connection.all # Runs the integration test suite for all of the given connection and # authentication configurations. If the 'all' option is set then the other @@ -41,5 +43,6 @@ test.integ.target.connection.cookie false test.integ.target.connection.muiltipe false test.integ.target.connection.socket false test.integ.target.connection.scookie false +test.integ.target.connection.ptrace false test.integ.target.connection.all false
tor-commits@lists.torproject.org