[tor-commits] [stem/master] get_pid_by_port() unavailable on Mac OSX

atagar at torproject.org atagar at torproject.org
Mon Jun 25 01:45:02 UTC 2012


commit 2fc1c420818bff19437a2b74713223a410d9898e
Author: Damian Johnson <atagar at torproject.org>
Date:   Sat Jun 23 11:47:24 2012 -0700

    get_pid_by_port() unavailable on Mac OSX
    
    Tests for get_pid_by_port() are failing on Mac OSX 10.5.8 because sockstat is
    unavailable and lsof neither provides ports nor accepts the flags we need.
    Noting this in the pydocs/comments, and skipping its integ tests when on a mac.
---
 stem/util/system.py       |   16 +++++++++++++++-
 test/integ/util/system.py |    6 ++++++
 2 files changed, 21 insertions(+), 1 deletions(-)

diff --git a/stem/util/system.py b/stem/util/system.py
index 73fd47e..b4c326f 100644
--- a/stem/util/system.py
+++ b/stem/util/system.py
@@ -8,6 +8,7 @@ best-effort, providing None if the lookup fails.
 ::
 
   is_windows - checks if we're running on windows
+  is_mac - checks if we're running on a mac
   is_bsd - checks if we're running on the bsd family of operating systems
   is_available - determines if a command is availabe on this system
   is_running - determines if a given process is running
@@ -58,6 +59,15 @@ def is_windows():
   
   return platform.system() == "Windows"
 
+def is_mac():
+  """
+  Checks if we are running on Mac OSX.
+  
+  :returns: bool to indicate if we're on a Mac
+  """
+  
+  return platform.system() == "Darwin"
+
 def is_bsd():
   """
   Checks if we are within the BSD family of operating systems. This presently
@@ -260,7 +270,8 @@ def get_pid_by_port(port):
     2. sockstat -4l -P tcp -p <port>
     3. lsof -wnP -iTCP -sTCP:LISTEN | grep ":<port>"
   
-  Most queries limit results to listening TCP connections.
+  Most queries limit results to listening TCP connections. This function likely
+  won't work on Mac OSX.
   
   :param int port: port where the process we're looking for is listening
   
@@ -301,6 +312,7 @@ def get_pid_by_port(port):
   
   # attempts to resolve using sockstat, failing if:
   # - sockstat doesn't accept the -4 flag (BSD only)
+  # - sockstat isn't available (encountered with OSX 10.5.8)
   # - there are multiple instances using the same port on different addresses
   #
   # flags:
@@ -334,6 +346,8 @@ def get_pid_by_port(port):
   
   # resolves using lsof which works on both Linux and BSD, only failing if:
   # - lsof is unavailable (not included by default on OpenBSD)
+  # - lsof doesn't provide the port ip/port, nor accept the -i and -s args
+  #   (encountered with OSX 10.5.8)
   # - the process being run as a different user due to permissions
   # - there are multiple instances using the same port on different addresses
   #
diff --git a/test/integ/util/system.py b/test/integ/util/system.py
index 174357e..7999cbb 100644
--- a/test/integ/util/system.py
+++ b/test/integ/util/system.py
@@ -201,6 +201,9 @@ class TestSystem(unittest.TestCase):
     if not _has_port():
       test.runner.skip(self, "(test instance has no port)")
       return
+    elif stem.util.system.is_mac():
+      test.runner.skip(self, "(resolvers unavailable)")
+      return
     elif not runner.is_ptraceable():
       test.runner.skip(self, "(DisableDebuggerAttachment is set)")
       return
@@ -271,6 +274,9 @@ class TestSystem(unittest.TestCase):
     elif not stem.util.system.is_available("lsof"):
       test.runner.skip(self, "(lsof unavailable)")
       return
+    elif stem.util.system.is_mac():
+      test.runner.skip(self, "(resolvers unavailable)")
+      return
     elif not runner.is_ptraceable():
       test.runner.skip(self, "(DisableDebuggerAttachment is set)")
       return





More information about the tor-commits mailing list