commit f53715ebe6e36327d0bca1c8c9ffe800ffd8c4d5 Author: Damian Johnson atagar@torproject.org Date: Sat Feb 1 15:03:53 2020 -0800
Drop sockstat connection resolution
We disabled sockstat tests a while ago due to unreliability...
https://github.com/torproject/stem/issues/42
We have plently of better resolvers so simply dropping this one. --- stem/util/connection.py | 15 +-------------- test/integ/util/connection.py | 1 - test/unit/util/connection.py | 34 ++-------------------------------- 3 files changed, 3 insertions(+), 47 deletions(-)
diff --git a/stem/util/connection.py b/stem/util/connection.py index 5480f95a..eaeafec4 100644 --- a/stem/util/connection.py +++ b/stem/util/connection.py @@ -36,10 +36,6 @@ Connection and networking based utility functions. .. versionchanged:: 1.6.0 Added **BSD_FSTAT**.
- .. deprecated:: 1.6.0 - The SOCKSTAT connection resolver is proving to be unreliable - (:trac:`23057`), and will be dropped in the 2.0.0 release unless fixed. - ==================== =========== Resolver Description ==================== =========== @@ -48,7 +44,6 @@ Connection and networking based utility functions. **NETSTAT_WINDOWS** netstat command under Windows **SS** ss command **LSOF** lsof command - **SOCKSTAT** sockstat command under \*nix **BSD_SOCKSTAT** sockstat command under FreeBSD **BSD_PROCSTAT** procstat command under FreeBSD **BSD_FSTAT** fstat command under OpenBSD @@ -84,7 +79,6 @@ Resolver = enum.Enum( ('NETSTAT_WINDOWS', 'netstat (windows)'), ('SS', 'ss'), ('LSOF', 'lsof'), - ('SOCKSTAT', 'sockstat'), ('BSD_SOCKSTAT', 'sockstat (bsd)'), ('BSD_PROCSTAT', 'procstat (bsd)'), ('BSD_FSTAT', 'fstat (bsd)') @@ -111,8 +105,6 @@ RESOLVER_COMMAND = { # (lsof provides a '-p <pid>' but oddly in practice it seems to be ~11-28% slower) Resolver.LSOF: 'lsof -wnPi',
- Resolver.SOCKSTAT: 'sockstat', - # -4 = IPv4, -c = connected sockets Resolver.BSD_SOCKSTAT: 'sockstat -4c',
@@ -138,9 +130,6 @@ RESOLVER_FILTER = { # tor 3873 atagar 45u IPv4 40994 0t0 TCP 10.243.55.20:45724->194.154.227.109:9001 (ESTABLISHED) Resolver.LSOF: '^{name}\s+{pid}\s+.*\s+{protocol}\s+{local}->{remote} \(ESTABLISHED\)$',
- # atagar tor 15843 tcp4 192.168.0.20:44092 68.169.35.102:443 ESTABLISHED - Resolver.SOCKSTAT: '^\S+\s+{name}\s+{pid}\s+{protocol}4\s+{local}\s+{remote}\s+ESTABLISHED$', - # _tor tor 4397 12 tcp4 172.27.72.202:54011 127.0.0.1:9001 Resolver.BSD_SOCKSTAT: '^\S+\s+{name}\s+{pid}\s+\S+\s+{protocol}4\s+{local}\s+{remote}$',
@@ -380,9 +369,7 @@ def system_resolvers(system = None):
resolvers = [Resolver.BSD_SOCKSTAT, Resolver.BSD_PROCSTAT, Resolver.LSOF] else: - # Sockstat isn't available by default on ubuntu. - - resolvers = [Resolver.NETSTAT, Resolver.SOCKSTAT, Resolver.LSOF, Resolver.SS] + resolvers = [Resolver.NETSTAT, Resolver.LSOF, Resolver.SS]
# remove any that aren't in the user's PATH
diff --git a/test/integ/util/connection.py b/test/integ/util/connection.py index 861b8ba9..f1745ec0 100644 --- a/test/integ/util/connection.py +++ b/test/integ/util/connection.py @@ -92,7 +92,6 @@ class TestConnection(unittest.TestCase): Resolver.NETSTAT_WINDOWS, Resolver.SS, Resolver.LSOF, - Resolver.SOCKSTAT, Resolver.BSD_SOCKSTAT, Resolver.BSD_PROCSTAT, Resolver.BSD_FSTAT, diff --git a/test/unit/util/connection.py b/test/unit/util/connection.py index d848c40b..6f8d8ab8 100644 --- a/test/unit/util/connection.py +++ b/test/unit/util/connection.py @@ -108,17 +108,6 @@ tor 129 atagar 22u IPv4 0xffffff35c9125500 0t0 TCP 192.168.1.20:9 tor 129 atagar 23u IPv4 0xffffff3236168160 0t0 TCP 192.168.1.20:9090->62.135.16.134:14456 (ESTABLISHED) """
-SOCKSTAT_OUTPUT = """\ -USER PROCESS PID PROTO SOURCE ADDRESS FOREIGN ADDRESS STATE -atagar ubuntu-geoip-pr 2164 tcp4 192.168.0.1:55395 141.18.34.33:80 CLOSE_WAIT -atagar tor 15843 tcp4 127.0.0.1:9050 *:* LISTEN -atagar tor 15843 tcp4 127.0.0.1:9051 *:* LISTEN -atagar tor 15843 tcp4 192.168.0.1:44415 38.229.79.2:443 ESTABLISHED -atagar tor 15843 tcp4 192.168.0.1:44092 68.169.35.102:443 ESTABLISHED -atagar firefox 20586 tcp4 192.168.0.1:47486 213.24.100.160:443 ESTABLISHED -atagar firefox 20586 tcp4 192.168.0.1:43762 32.188.221.72:443 CLOSE_WAIT -""" - # I don't have actual sockstat and procstat output for FreeBSD. Rather, these # are snippets of output from email threads.
@@ -216,10 +205,10 @@ class TestConnection(unittest.TestCase): self.assertEqual([Resolver.LSOF], stem.util.connection.system_resolvers('Darwin')) self.assertEqual([Resolver.BSD_FSTAT], stem.util.connection.system_resolvers('OpenBSD')) self.assertEqual([Resolver.BSD_SOCKSTAT, Resolver.BSD_PROCSTAT, Resolver.LSOF], stem.util.connection.system_resolvers('FreeBSD')) - self.assertEqual([Resolver.NETSTAT, Resolver.SOCKSTAT, Resolver.LSOF, Resolver.SS], stem.util.connection.system_resolvers('Linux')) + self.assertEqual([Resolver.NETSTAT, Resolver.LSOF, Resolver.SS], stem.util.connection.system_resolvers('Linux'))
proc_mock.return_value = True - self.assertEqual([Resolver.PROC, Resolver.NETSTAT, Resolver.SOCKSTAT, Resolver.LSOF, Resolver.SS], stem.util.connection.system_resolvers('Linux')) + self.assertEqual([Resolver.PROC, Resolver.NETSTAT, Resolver.LSOF, Resolver.SS], stem.util.connection.system_resolvers('Linux'))
# check that calling without an argument is equivalent to calling for this # platform @@ -389,25 +378,6 @@ class TestConnection(unittest.TestCase): self.assertEqual(expected, stem.util.connection.get_connections(Resolver.LSOF, process_pid = 129, process_name = 'tor'))
@patch('stem.util.system.call') - def test_get_connections_by_sockstat(self, call_mock): - """ - Checks the get_connections function with the sockstat resolver. - """ - - call_mock.return_value = SOCKSTAT_OUTPUT.split('\n') - expected = [ - Connection('192.168.0.1', 44415, '38.229.79.2', 443, 'tcp', False), - Connection('192.168.0.1', 44092, '68.169.35.102', 443, 'tcp', False), - ] - self.assertEqual(expected, stem.util.connection.get_connections(Resolver.SOCKSTAT, process_pid = 15843, process_name = 'tor')) - - self.assertRaises(IOError, stem.util.connection.get_connections, Resolver.SOCKSTAT, process_pid = 15843, process_name = 'stuff') - self.assertRaises(IOError, stem.util.connection.get_connections, Resolver.SOCKSTAT, process_pid = 1111, process_name = 'tor') - - call_mock.side_effect = OSError('Unable to call sockstat') - self.assertRaises(IOError, stem.util.connection.get_connections, Resolver.SOCKSTAT, process_pid = 1111) - - @patch('stem.util.system.call') def test_get_connections_by_sockstat_for_bsd(self, call_mock): """ Checks the get_connections function with the bsd variant of the sockstat
tor-commits@lists.torproject.org