[tor-commits] [stem/master] Making integ account for DisableDebuggerAttachment
atagar at torproject.org
atagar at torproject.org
Thu Jan 12 18:13:56 UTC 2012
commit 27e84652f1bd97747a1360f7632783923cf762b2
Author: Damian Johnson <atagar at torproject.org>
Date: Thu Jan 12 09:51:40 2012 -0800
Making integ account for DisableDebuggerAttachment
Stem's system integration tests failed with tor's new version because
DisableDebuggerAttachment prevents cwd and port lookups. Skipping those tests
when that option is set.
---
test/integ/util/system.py | 35 ++++++++++++++++++++++++++++++-----
test/runner.py | 21 +++++++++++++++++++++
2 files changed, 51 insertions(+), 5 deletions(-)
diff --git a/test/integ/util/system.py b/test/integ/util/system.py
index 4f78099..70d73ae 100644
--- a/test/integ/util/system.py
+++ b/test/integ/util/system.py
@@ -130,10 +130,13 @@ class TestSystem(unittest.TestCase):
Tests the get_pid_by_name function with a lsof response.
"""
+ runner = test.runner.get_runner()
if self.is_extra_tor_running:
self.skipTest("(multiple tor instances)")
elif not stem.util.system.is_available("lsof"):
self.skipTest("(lsof unavailable)")
+ elif runner.is_debugging_prevented():
+ self.skipTest("(DisableDebuggerAttachment is set)")
lsof_prefix = stem.util.system.GET_PID_BY_NAME_LSOF % ""
self._run_pid_test(lsof_prefix, stem.util.system.get_pid_by_name, "tor")
@@ -143,10 +146,13 @@ class TestSystem(unittest.TestCase):
Checks general usage of the stem.util.system.get_pid_by_port function.
"""
+ runner = test.runner.get_runner()
if not self._has_port():
self.skipTest("(test instance has no port)")
+ elif runner.is_debugging_prevented():
+ self.skipTest("(DisableDebuggerAttachment is set)")
- tor_pid, tor_port = test.runner.get_runner().get_pid(), test.runner.CONTROL_PORT
+ tor_pid, tor_port = runner.get_pid(), test.runner.CONTROL_PORT
self.assertEquals(tor_pid, stem.util.system.get_pid_by_port(tor_port))
self.assertEquals(None, stem.util.system.get_pid_by_port(99999))
@@ -155,11 +161,15 @@ class TestSystem(unittest.TestCase):
Tests the get_pid_by_port function with a netstat response.
"""
+ runner = test.runner.get_runner()
if not self._has_port():
self.skipTest("(test instance has no port)")
elif not stem.util.system.is_available("netstat"):
self.skipTest("(netstat unavailable)")
- elif stem.util.system.is_bsd(): self.skipTest("(linux only)")
+ elif stem.util.system.is_bsd():
+ self.skipTest("(linux only)")
+ elif runner.is_debugging_prevented():
+ self.skipTest("(DisableDebuggerAttachment is set)")
netstat_cmd = stem.util.system.GET_PID_BY_PORT_NETSTAT
self._run_pid_test(netstat_cmd, stem.util.system.get_pid_by_port, test.runner.CONTROL_PORT)
@@ -169,11 +179,15 @@ class TestSystem(unittest.TestCase):
Tests the get_pid_by_port function with a sockstat response.
"""
+ runner = test.runner.get_runner()
if not self._has_port():
self.skipTest("(test instance has no port)")
elif not stem.util.system.is_available("sockstat"):
self.skipTest("(sockstat unavailable)")
- elif not stem.util.system.is_bsd(): self.skipTest("(bsd only)")
+ elif not stem.util.system.is_bsd():
+ self.skipTest("(bsd only)")
+ elif runner.is_debugging_prevented():
+ self.skipTest("(DisableDebuggerAttachment is set)")
sockstat_prefix = stem.util.system.GET_PID_BY_PORT_SOCKSTAT % ""
self._run_pid_test(sockstat_prefix, stem.util.system.get_pid_by_port, test.runner.CONTROL_PORT)
@@ -183,10 +197,13 @@ class TestSystem(unittest.TestCase):
Tests the get_pid_by_port function with a lsof response.
"""
+ runner = test.runner.get_runner()
if not self._has_port():
self.skipTest("(test instance has no port)")
elif not stem.util.system.is_available("lsof"):
self.skipTest("(lsof unavailable)")
+ elif runner.is_debugging_prevented():
+ self.skipTest("(DisableDebuggerAttachment is set)")
lsof_cmd = stem.util.system.GET_PID_BY_PORT_LSOF
self._run_pid_test(lsof_cmd, stem.util.system.get_pid_by_port, test.runner.CONTROL_PORT)
@@ -211,6 +228,10 @@ class TestSystem(unittest.TestCase):
"""
runner = test.runner.get_runner()
+
+ if runner.is_debugging_prevented():
+ self.skipTest("(DisableDebuggerAttachment is set)")
+
self.assertEquals(runner.get_tor_cwd(), stem.util.system.get_cwd(runner.get_pid()))
self.assertEquals(None, stem.util.system.get_cwd(99999))
@@ -219,14 +240,16 @@ class TestSystem(unittest.TestCase):
Tests the get_pid_by_cwd function with a pwdx response.
"""
+ runner = test.runner.get_runner()
if not stem.util.system.is_available("pwdx"):
self.skipTest("(pwdx unavailable)")
+ elif runner.is_debugging_prevented():
+ self.skipTest("(DisableDebuggerAttachment is set)")
# filter the call function to only allow this command
pwdx_prefix = stem.util.system.GET_CWD_PWDX % ""
stem.util.system.CALL_MOCKING = lambda cmd: cmd.startswith(pwdx_prefix)
- runner = test.runner.get_runner()
runner_pid, tor_cwd = runner.get_pid(), runner.get_tor_cwd()
self.assertEquals(tor_cwd, stem.util.system.get_cwd(runner_pid))
@@ -235,14 +258,16 @@ class TestSystem(unittest.TestCase):
Tests the get_pid_by_cwd function with a lsof response.
"""
+ runner = test.runner.get_runner()
if not stem.util.system.is_available("lsof"):
self.skipTest("(lsof unavailable)")
+ elif runner.is_debugging_prevented():
+ self.skipTest("(DisableDebuggerAttachment is set)")
# filter the call function to only allow this command
lsof_prefix = "lsof -a -p "
stem.util.system.CALL_MOCKING = lambda cmd: cmd.startswith(lsof_prefix)
- runner = test.runner.get_runner()
runner_pid, tor_cwd = runner.get_pid(), runner.get_tor_cwd()
self.assertEquals(tor_cwd, stem.util.system.get_cwd(runner_pid))
diff --git a/test/runner.py b/test/runner.py
index cfe6dbb..ea2a60c 100644
--- a/test/runner.py
+++ b/test/runner.py
@@ -254,6 +254,27 @@ class Runner:
return is_running
+ def is_debugging_prevented(self):
+ """
+ Checks if tor's 'DisableDebuggerAttachment' option is set. This feature has
+ a lot of adverse side effects as per...
+ https://trac.torproject.org/projects/tor/ticket/3313
+
+ Returns:
+ True if debugger attachment is disallowd, False otherwise, and None if
+ tor can't be checked
+ """
+
+ # TODO: replace higher level GETCONF query when we have a controller class
+ control_socket = self.get_tor_socket()
+ if control_socket == None: return None
+
+ control_socket.send("GETCONF DisableDebuggerAttachment")
+ getconf_response = control_socket.recv()
+ control_socket.close()
+
+ return str(getconf_response) == "DisableDebuggerAttachment=1"
+
def get_test_dir(self):
"""
Provides the absolute path for our testing directory.
More information about the tor-commits
mailing list