[tor-commits] [stem/master] Testing each connection resolver separately

atagar at torproject.org atagar at torproject.org
Sun Dec 7 20:52:30 UTC 2014


commit f3406f8058e6183e5029e309d4b6ecba23e32b2a
Author: Damian Johnson <atagar at 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)





More information about the tor-commits mailing list