summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGiampaolo Rodola <g.rodola@gmail.com>2017-05-17 00:12:33 +0200
committerGiampaolo Rodola <g.rodola@gmail.com>2017-05-17 00:12:33 +0200
commit3a8fc3f5b8cf0589dccf519ace25f70f88b914d0 (patch)
tree04534868a78fe26e9081b82d56bf71b371fab327
parent2899b4ca814aea82f9190a8a40837dfda897d854 (diff)
parent0a19931c05b9fdcd42bcd47cf1e1c5028116efeb (diff)
downloadpsutil-3a8fc3f5b8cf0589dccf519ace25f70f88b914d0.tar.gz
Merge branch 'master' of https://github.com/giampaolo/psutil
-rw-r--r--appveyor.yml2
-rw-r--r--psutil/_common.py1
-rw-r--r--psutil/tests/__init__.py2
-rwxr-xr-xpsutil/tests/test_connections.py49
-rwxr-xr-xpsutil/tests/test_misc.py10
5 files changed, 41 insertions, 23 deletions
diff --git a/appveyor.yml b/appveyor.yml
index 2e6735bb..1390f962 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -91,7 +91,7 @@ build: off
test_script:
- "%WITH_COMPILER% %PYTHON%/python -V"
- - "%WITH_COMPILER% %PYTHON%/python -Wa psutil/tests/__main__.py"
+ - "%WITH_COMPILER% %PYTHON%/python psutil/tests/__main__.py"
after_test:
- "%WITH_COMPILER% %PYTHON%/python setup.py bdist_wheel"
diff --git a/psutil/_common.py b/psutil/_common.py
index d58dac6b..c08c60c1 100644
--- a/psutil/_common.py
+++ b/psutil/_common.py
@@ -384,6 +384,7 @@ def path_exists_strict(path):
return True
+@memoize
def supports_ipv6():
"""Return True if IPv6 is supported on this platform."""
if not socket.has_ipv6 or not hasattr(socket, "AF_INET6"):
diff --git a/psutil/tests/__init__.py b/psutil/tests/__init__.py
index 58391986..4aae1980 100644
--- a/psutil/tests/__init__.py
+++ b/psutil/tests/__init__.py
@@ -36,6 +36,7 @@ from socket import SOCK_STREAM
import psutil
from psutil import POSIX
+from psutil import SUNOS
from psutil import WINDOWS
from psutil._common import supports_ipv6
from psutil._compat import PY3
@@ -145,6 +146,7 @@ SCRIPTS_DIR = os.path.join(ROOT_DIR, 'scripts')
HAS_CPU_AFFINITY = hasattr(psutil.Process, "cpu_affinity")
HAS_CPU_FREQ = hasattr(psutil, "cpu_freq")
+HAS_CONNECTIONS_UNIX = POSIX and not SUNOS
HAS_ENVIRON = hasattr(psutil.Process, "environ")
HAS_PROC_IO_COUNTERS = hasattr(psutil.Process, "io_counters")
HAS_IONICE = hasattr(psutil.Process, "ionice")
diff --git a/psutil/tests/test_connections.py b/psutil/tests/test_connections.py
index 00d94a6a..f7dd2ec2 100755
--- a/psutil/tests/test_connections.py
+++ b/psutil/tests/test_connections.py
@@ -33,6 +33,7 @@ from psutil.tests import bind_unix_socket
from psutil.tests import check_connection_ntuple
from psutil.tests import create_sockets
from psutil.tests import get_free_port
+from psutil.tests import HAS_CONNECTIONS_UNIX
from psutil.tests import pyrun
from psutil.tests import reap_children
from psutil.tests import run_test_module_by_name
@@ -110,7 +111,7 @@ class Base(object):
self.assertEqual(conn.laddr, laddr)
# XXX Solaris can't retrieve system-wide UNIX sockets
- if not (SUNOS and sock.family == AF_UNIX):
+ if sock.family == AF_UNIX and HAS_CONNECTIONS_UNIX:
cons = thisproc.connections(kind='all')
self.compare_procsys_connections(os.getpid(), cons)
return conn
@@ -170,8 +171,8 @@ class TestUnconnectedSockets(Base, unittest.TestCase):
self.assertEqual(conn.status, psutil.CONN_NONE)
def test_udp_v6(self):
- addr = ("127.0.0.1", get_free_port())
- with closing(bind_socket(AF_INET, SOCK_DGRAM, addr=addr)) as sock:
+ addr = ("::1", get_free_port())
+ with closing(bind_socket(AF_INET6, SOCK_DGRAM, addr=addr)) as sock:
conn = self.check_socket(sock)
assert not conn.raddr
self.assertEqual(conn.status, psutil.CONN_NONE)
@@ -275,7 +276,7 @@ class TestConnectedSocketPairs(Base, unittest.TestCase):
# compare against system-wide connections
# XXX Solaris can't retrieve system-wide UNIX
# sockets.
- if not SUNOS:
+ if HAS_CONNECTIONS_UNIX:
self.compare_procsys_connections(proc.pid, [conn])
tcp_template = textwrap.dedent("""
@@ -359,7 +360,7 @@ class TestConnectedSocketPairs(Base, unittest.TestCase):
self.assertEqual(len(socks), len(cons))
# tcp
cons = thisproc.connections(kind='tcp')
- self.assertEqual(len(cons), 2)
+ self.assertEqual(len(cons), 2 if supports_ipv6() else 1)
for conn in cons:
self.assertIn(conn.family, (AF_INET, AF_INET6))
self.assertEqual(conn.type, SOCK_STREAM)
@@ -369,13 +370,14 @@ class TestConnectedSocketPairs(Base, unittest.TestCase):
self.assertEqual(cons[0].family, AF_INET)
self.assertEqual(cons[0].type, SOCK_STREAM)
# tcp6
- cons = thisproc.connections(kind='tcp6')
- self.assertEqual(len(cons), 1)
- self.assertEqual(cons[0].family, AF_INET6)
- self.assertEqual(cons[0].type, SOCK_STREAM)
+ if supports_ipv6():
+ cons = thisproc.connections(kind='tcp6')
+ self.assertEqual(len(cons), 1)
+ self.assertEqual(cons[0].family, AF_INET6)
+ self.assertEqual(cons[0].type, SOCK_STREAM)
# udp
cons = thisproc.connections(kind='udp')
- self.assertEqual(len(cons), 2)
+ self.assertEqual(len(cons), 2 if supports_ipv6() else 1)
for conn in cons:
self.assertIn(conn.family, (AF_INET, AF_INET6))
self.assertEqual(conn.type, SOCK_DGRAM)
@@ -385,24 +387,26 @@ class TestConnectedSocketPairs(Base, unittest.TestCase):
self.assertEqual(cons[0].family, AF_INET)
self.assertEqual(cons[0].type, SOCK_DGRAM)
# udp6
- cons = thisproc.connections(kind='udp6')
- self.assertEqual(len(cons), 1)
- self.assertEqual(cons[0].family, AF_INET6)
- self.assertEqual(cons[0].type, SOCK_DGRAM)
+ if supports_ipv6():
+ cons = thisproc.connections(kind='udp6')
+ self.assertEqual(len(cons), 1)
+ self.assertEqual(cons[0].family, AF_INET6)
+ self.assertEqual(cons[0].type, SOCK_DGRAM)
# inet
cons = thisproc.connections(kind='inet')
- self.assertEqual(len(cons), 4)
+ self.assertEqual(len(cons), 4 if supports_ipv6() else 2)
for conn in cons:
self.assertIn(conn.family, (AF_INET, AF_INET6))
self.assertIn(conn.type, (SOCK_STREAM, SOCK_DGRAM))
# inet6
- cons = thisproc.connections(kind='inet6')
- self.assertEqual(len(cons), 2)
- for conn in cons:
- self.assertEqual(conn.family, AF_INET6)
- self.assertIn(conn.type, (SOCK_STREAM, SOCK_DGRAM))
+ if supports_ipv6():
+ cons = thisproc.connections(kind='inet6')
+ self.assertEqual(len(cons), 2)
+ for conn in cons:
+ self.assertEqual(conn.family, AF_INET6)
+ self.assertIn(conn.type, (SOCK_STREAM, SOCK_DGRAM))
# unix
- if POSIX and not SUNOS:
+ if HAS_CONNECTIONS_UNIX:
cons = thisproc.connections(kind='unix')
self.assertEqual(len(cons), 3)
for conn in cons:
@@ -431,7 +435,8 @@ class TestSystemWideConnections(unittest.TestCase):
with create_sockets():
from psutil._common import conn_tmap
for kind, groups in conn_tmap.items():
- if SUNOS and kind == 'unix':
+ # XXX: SunOS does not retrieve UNIX sockets.
+ if kind == 'unix' and not HAS_CONNECTIONS_UNIX:
continue
families, types_ = groups
cons = psutil.net_connections(kind)
diff --git a/psutil/tests/test_misc.py b/psutil/tests/test_misc.py
index 2cb4dbb1..57423dd8 100755
--- a/psutil/tests/test_misc.py
+++ b/psutil/tests/test_misc.py
@@ -290,21 +290,31 @@ class TestMisc(unittest.TestCase):
self.assertEqual(parse_environ_block("a=1\0b=2"), {k("a"): "1"})
def test_supports_ipv6(self):
+ self.addCleanup(supports_ipv6.cache_clear)
if supports_ipv6():
with mock.patch('psutil._common.socket') as s:
s.has_ipv6 = False
+ supports_ipv6.cache_clear()
assert not supports_ipv6()
+
+ supports_ipv6.cache_clear()
with mock.patch('psutil._common.socket.socket',
side_effect=socket.error) as s:
assert not supports_ipv6()
assert s.called
+
+ supports_ipv6.cache_clear()
with mock.patch('psutil._common.socket.socket',
side_effect=socket.gaierror) as s:
assert not supports_ipv6()
+ supports_ipv6.cache_clear()
assert s.called
+
+ supports_ipv6.cache_clear()
with mock.patch('psutil._common.socket.socket.bind',
side_effect=socket.gaierror) as s:
assert not supports_ipv6()
+ supports_ipv6.cache_clear()
assert s.called
else:
with self.assertRaises(Exception):