summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGiampaolo Rodola <g.rodola@gmail.com>2015-06-04 03:37:02 +0200
committerGiampaolo Rodola <g.rodola@gmail.com>2015-06-04 03:37:02 +0200
commitd9f580538224d63f1a1273854293e2c87b0144dd (patch)
tree3ac91964e1702c19d984771e74d5e652e3e6fcd9
parent82da82a6bb94ed5c6faf9d762ef4ad0fec18f01b (diff)
downloadpsutil-d9f580538224d63f1a1273854293e2c87b0144dd.tar.gz
#629: 'skip' platorm specific tests if we're on another platform (instead of failing); rename test_main to main otherwise pytest / nose will execute it as a test case
-rw-r--r--HISTORY.rst1
-rw-r--r--test/_bsd.py7
-rw-r--r--test/_linux.py7
-rw-r--r--test/_osx.py9
-rw-r--r--test/_posix.py7
-rw-r--r--test/_sunos.py7
-rw-r--r--test/_windows.py18
-rw-r--r--test/test_memory_leaks.py4
8 files changed, 35 insertions, 25 deletions
diff --git a/HISTORY.rst b/HISTORY.rst
index 683b7d09..faeb0c9e 100644
--- a/HISTORY.rst
+++ b/HISTORY.rst
@@ -21,6 +21,7 @@ Bug tracker at https://github.com/giampaolo/psutil/issues
- #599: [Windows] process name() can now be determined for all processes even
when running as a limited user.
- #602: pre-commit GIT hook.
+- #629: enhanced support for py.test and nose test discovery and tests run.
**Bug fixes**
diff --git a/test/_bsd.py b/test/_bsd.py
index 9dfeb493..76f12442 100644
--- a/test/_bsd.py
+++ b/test/_bsd.py
@@ -16,7 +16,7 @@ import time
import psutil
from psutil._compat import PY3
-from test_psutil import (TOLERANCE, sh, get_test_subprocess, which,
+from test_psutil import (TOLERANCE, BSD, sh, get_test_subprocess, which,
retry_before_failing, reap_children, unittest)
@@ -50,6 +50,7 @@ def muse(field):
return int(line.split()[1])
+@unittest.skipUnless(BSD, "not a BSD system")
class BSDSpecificTestCase(unittest.TestCase):
@classmethod
@@ -236,12 +237,12 @@ class BSDSpecificTestCase(unittest.TestCase):
delta=TOLERANCE)
-def test_main():
+def main():
test_suite = unittest.TestSuite()
test_suite.addTest(unittest.makeSuite(BSDSpecificTestCase))
result = unittest.TextTestRunner(verbosity=2).run(test_suite)
return result.wasSuccessful()
if __name__ == '__main__':
- if not test_main():
+ if not main():
sys.exit(1)
diff --git a/test/_linux.py b/test/_linux.py
index 97a5493e..5d7f0521 100644
--- a/test/_linux.py
+++ b/test/_linux.py
@@ -23,7 +23,7 @@ try:
except ImportError:
import mock # requires "pip install mock"
-from test_psutil import POSIX, TOLERANCE, TRAVIS
+from test_psutil import POSIX, TOLERANCE, TRAVIS, LINUX
from test_psutil import (skip_on_not_implemented, sh, get_test_subprocess,
retry_before_failing, get_kernel_version, unittest,
which)
@@ -67,6 +67,7 @@ def get_mac_address(ifname):
return ''.join(['%02x:' % ord(char) for char in info[18:24]])[:-1]
+@unittest.skipUnless(LINUX, "not a Linux system")
class LinuxSpecificTestCase(unittest.TestCase):
@unittest.skipIf(
@@ -356,12 +357,12 @@ class LinuxSpecificTestCase(unittest.TestCase):
self.assertTrue(hasattr(psutil, "RLIMIT_SIGPENDING"))
-def test_main():
+def main():
test_suite = unittest.TestSuite()
test_suite.addTest(unittest.makeSuite(LinuxSpecificTestCase))
result = unittest.TextTestRunner(verbosity=2).run(test_suite)
return result.wasSuccessful()
if __name__ == '__main__':
- if not test_main():
+ if not main():
sys.exit(1)
diff --git a/test/_osx.py b/test/_osx.py
index 784f00e0..6e6e4380 100644
--- a/test/_osx.py
+++ b/test/_osx.py
@@ -15,8 +15,8 @@ import time
import psutil
from psutil._compat import PY3
-from test_psutil import (TOLERANCE, sh, get_test_subprocess, reap_children,
- retry_before_failing, unittest)
+from test_psutil import (TOLERANCE, OSX, sh, get_test_subprocess,
+ reap_children, retry_before_failing, unittest)
PAGESIZE = os.sysconf("SC_PAGE_SIZE")
@@ -47,6 +47,7 @@ def vm_stat(field):
return int(re.search('\d+', line).group(0)) * PAGESIZE
+@unittest.skipUnless(OSX, "not an OSX system")
class OSXSpecificTestCase(unittest.TestCase):
@classmethod
@@ -148,12 +149,12 @@ class OSXSpecificTestCase(unittest.TestCase):
self.assertEqual(tot1, tot2)
-def test_main():
+def main():
test_suite = unittest.TestSuite()
test_suite.addTest(unittest.makeSuite(OSXSpecificTestCase))
result = unittest.TextTestRunner(verbosity=2).run(test_suite)
return result.wasSuccessful()
if __name__ == '__main__':
- if not test_main():
+ if not main():
sys.exit(1)
diff --git a/test/_posix.py b/test/_posix.py
index 4439f2c7..2a263a3f 100644
--- a/test/_posix.py
+++ b/test/_posix.py
@@ -15,7 +15,7 @@ import time
import psutil
from psutil._compat import PY3, callable
-from test_psutil import LINUX, SUNOS, OSX, BSD, PYTHON
+from test_psutil import LINUX, SUNOS, OSX, BSD, PYTHON, POSIX
from test_psutil import (get_test_subprocess, skip_on_access_denied,
retry_before_failing, reap_children, sh, unittest,
get_kernel_version, wait_for_pid)
@@ -42,6 +42,7 @@ def ps(cmd):
return output
+@unittest.skipUnless(POSIX, "not a POSIX system")
class PosixSpecificTestCase(unittest.TestCase):
"""Compare psutil results against 'ps' command line utility."""
@@ -243,12 +244,12 @@ class PosixSpecificTestCase(unittest.TestCase):
self.fail('\n' + '\n'.join(failures))
-def test_main():
+def main():
test_suite = unittest.TestSuite()
test_suite.addTest(unittest.makeSuite(PosixSpecificTestCase))
result = unittest.TextTestRunner(verbosity=2).run(test_suite)
return result.wasSuccessful()
if __name__ == '__main__':
- if not test_main():
+ if not main():
sys.exit(1)
diff --git a/test/_sunos.py b/test/_sunos.py
index b1943373..3d54ccd8 100644
--- a/test/_sunos.py
+++ b/test/_sunos.py
@@ -9,10 +9,11 @@
import sys
import os
-from test_psutil import sh, unittest
+from test_psutil import SUNOS, sh, unittest
import psutil
+@unittest.skipUnless(SUNOS, "not a SunOS system")
class SunOSSpecificTestCase(unittest.TestCase):
def test_swap_memory(self):
@@ -36,12 +37,12 @@ class SunOSSpecificTestCase(unittest.TestCase):
self.assertEqual(psutil_swap.free, free)
-def test_main():
+def main():
test_suite = unittest.TestSuite()
test_suite.addTest(unittest.makeSuite(SunOSSpecificTestCase))
result = unittest.TextTestRunner(verbosity=2).run(test_suite)
return result.wasSuccessful()
if __name__ == '__main__':
- if not test_main():
+ if not main():
sys.exit(1)
diff --git a/test/_windows.py b/test/_windows.py
index a3699398..a0a22052 100644
--- a/test/_windows.py
+++ b/test/_windows.py
@@ -15,7 +15,7 @@ import sys
import time
import traceback
-from test_psutil import (get_test_subprocess, reap_children, unittest)
+from test_psutil import WINDOWS, get_test_subprocess, reap_children, unittest
try:
import wmi
@@ -28,16 +28,18 @@ except ImportError:
win32api = win32con = None
from psutil._compat import PY3, callable, long
-from psutil._pswindows import ACCESS_DENIED_SET
-import psutil._psutil_windows as _psutil_windows
import psutil
+cext = psutil._psplatform.cext
+
+
def wrap_exceptions(fun):
def wrapper(self, *args, **kwargs):
try:
return fun(self, *args, **kwargs)
except OSError as err:
+ from psutil._pswindows import ACCESS_DENIED_SET
if err.errno in ACCESS_DENIED_SET:
raise psutil.AccessDenied(None, None)
if err.errno == errno.ESRCH:
@@ -46,6 +48,7 @@ def wrap_exceptions(fun):
return wrapper
+@unittest.skipUnless(WINDOWS, "not a Windows system")
class WindowsSpecificTestCase(unittest.TestCase):
@classmethod
@@ -281,6 +284,7 @@ class WindowsSpecificTestCase(unittest.TestCase):
self.fail('\n' + '\n'.join(failures))
+@unittest.skipUnless(WINDOWS, "not a Windows system")
class TestDualProcessImplementation(unittest.TestCase):
fun_names = [
# function name, tolerance
@@ -324,7 +328,7 @@ class TestDualProcessImplementation(unittest.TestCase):
failures = []
for p in psutil.process_iter():
try:
- nt = ntpinfo(*_psutil_windows.proc_info(p.pid))
+ nt = ntpinfo(*cext.proc_info(p.pid))
except psutil.NoSuchProcess:
continue
assert_ge_0(nt)
@@ -334,7 +338,7 @@ class TestDualProcessImplementation(unittest.TestCase):
continue
if name == 'proc_create_time' and p.pid in (0, 4):
continue
- meth = wrap_exceptions(getattr(_psutil_windows, name))
+ meth = wrap_exceptions(getattr(cext, name))
try:
ret = meth(p.pid)
except (psutil.NoSuchProcess, psutil.AccessDenied):
@@ -356,7 +360,7 @@ class TestDualProcessImplementation(unittest.TestCase):
compare_with_tolerance(ret[3], nt.io_wbytes, tolerance)
elif name == 'proc_memory_info':
try:
- rawtupl = _psutil_windows.proc_memory_info_2(p.pid)
+ rawtupl = cext.proc_memory_info_2(p.pid)
except psutil.NoSuchProcess:
continue
compare_with_tolerance(ret, rawtupl, tolerance)
@@ -385,7 +389,7 @@ class TestDualProcessImplementation(unittest.TestCase):
# process no longer exists
ZOMBIE_PID = max(psutil.pids()) + 5000
for name, _ in self.fun_names:
- meth = wrap_exceptions(getattr(_psutil_windows, name))
+ meth = wrap_exceptions(getattr(cext, name))
self.assertRaises(psutil.NoSuchProcess, meth, ZOMBIE_PID)
diff --git a/test/test_memory_leaks.py b/test/test_memory_leaks.py
index 5a31ac1f..802e20ab 100644
--- a/test/test_memory_leaks.py
+++ b/test/test_memory_leaks.py
@@ -417,7 +417,7 @@ class TestModuleFunctionsLeaks(Base):
self.execute('net_if_stats')
-def test_main():
+def main():
test_suite = unittest.TestSuite()
tests = [TestProcessObjectLeaksZombie,
TestProcessObjectLeaks,
@@ -428,5 +428,5 @@ def test_main():
return result.wasSuccessful()
if __name__ == '__main__':
- if not test_main():
+ if not main():
sys.exit(1)