commit f3406f8058e6183e5029e309d4b6ecba23e32b2a Author: Damian Johnson atagar@torproject.org Date: Sun Dec 7 12:19:57 2014 -0800
Testing each connection resolver separately
On Gentoo test_get_connections fails and, while that's all well and good, I can't tell from this single failure if just proc is broken or all linux connection resolvers. Testing each resolver separately so we'll be able to tell in the future. --- test/integ/util/connection.py | 61 +++++++++++++++++++++++++++++++++-------- 1 file changed, 50 insertions(+), 11 deletions(-)
diff --git a/test/integ/util/connection.py b/test/integ/util/connection.py index 589026a..9bc6591 100644 --- a/test/integ/util/connection.py +++ b/test/integ/util/connection.py @@ -7,27 +7,66 @@ import unittest
import test.runner
-from stem.util.connection import get_connections, system_resolvers +from stem.util.connection import Resolver, get_connections, system_resolvers
class TestConnection(unittest.TestCase): - def test_get_connections(self): + def check_resolver(self, resolver): runner = test.runner.get_runner()
if test.runner.Torrc.PORT not in runner.get_options(): test.runner.skip(self, '(no control port)') return - elif not test.runner.get_runner().is_ptraceable(): + elif not runner.is_ptraceable(): test.runner.skip(self, '(DisableDebuggerAttachment is set)') return + elif resolver not in system_resolvers(): + test.runner.skip(self, '(resolver unavailable on this platform)') + return + + with runner.get_tor_socket(): + connections = get_connections(resolver, process_pid = runner.get_pid()) + + for conn in connections: + if conn.local_address == '127.0.0.1' and conn.local_port == test.runner.CONTROL_PORT: + return + + self.fail('Unable to find localhost connection with %s:\n%s' % (resolver, '\n'.join(connections))) + + def test_get_connections_by_proc(self): + self.check_resolver(Resolver.PROC) + + def test_get_connections_by_netstat(self): + self.check_resolver(Resolver.NETSTAT) + + def test_get_connections_by_ss(self): + self.check_resolver(Resolver.SS) + + def test_get_connections_by_lsof(self): + self.check_resolver(Resolver.LSOF) + + def test_get_connections_by_sockstat(self): + self.check_resolver(Resolver.SOCKSTAT) + + def test_get_connections_by_bsd_sockstat(self): + self.check_resolver(Resolver.BSD_SOCKSTAT) + + def test_get_connections_by_bsd_procstat(self): + self.check_resolver(Resolver.BSD_PROCSTAT)
- for resolver in system_resolvers(): - with runner.get_tor_socket(): - tor_pid = test.runner.get_runner().get_pid() - connections = get_connections(resolver, process_pid = tor_pid) + def test_that_we_are_checking_all_resolvers(self): + # Quick check to confirm that if we add a new Resolver, we include a test + # for it here.
- for conn in connections: - if conn.local_address == '127.0.0.1' and conn.local_port == test.runner.CONTROL_PORT: - return + recognized_resolvers = ( + Resolver.PROC, + Resolver.NETSTAT, + Resolver.SS, + Resolver.LSOF, + Resolver.SOCKSTAT, + Resolver.BSD_SOCKSTAT, + Resolver.BSD_PROCSTAT, + )
- self.fail('Unable to find localhost connection with %s:\n%s' % (resolver, '\n'.join(connections))) + for resolver in Resolver: + self.assertTrue(resolver in recognized_resolvers)
tor-commits@lists.torproject.org