diff options
author | Giampaolo Rodola <g.rodola@gmail.com> | 2017-05-17 00:12:33 +0200 |
---|---|---|
committer | Giampaolo Rodola <g.rodola@gmail.com> | 2017-05-17 00:12:33 +0200 |
commit | 3a8fc3f5b8cf0589dccf519ace25f70f88b914d0 (patch) | |
tree | 04534868a78fe26e9081b82d56bf71b371fab327 | |
parent | 2899b4ca814aea82f9190a8a40837dfda897d854 (diff) | |
parent | 0a19931c05b9fdcd42bcd47cf1e1c5028116efeb (diff) | |
download | psutil-3a8fc3f5b8cf0589dccf519ace25f70f88b914d0.tar.gz |
Merge branch 'master' of https://github.com/giampaolo/psutil
-rw-r--r-- | appveyor.yml | 2 | ||||
-rw-r--r-- | psutil/_common.py | 1 | ||||
-rw-r--r-- | psutil/tests/__init__.py | 2 | ||||
-rwxr-xr-x | psutil/tests/test_connections.py | 49 | ||||
-rwxr-xr-x | psutil/tests/test_misc.py | 10 |
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): |