| Index: third_party/psutil/test/_windows.py
|
| diff --git a/third_party/psutil/test/_windows.py b/third_party/psutil/test/_windows.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..95a45b6f2544d198010649f257f3b8654258a98a
|
| --- /dev/null
|
| +++ b/third_party/psutil/test/_windows.py
|
| @@ -0,0 +1,162 @@
|
| +#!/usr/bin/env python
|
| +#
|
| +# $Id: _windows.py 798 2010-11-12 20:52:57Z g.rodola $
|
| +#
|
| +
|
| +
|
| +import os
|
| +import unittest
|
| +import platform
|
| +import subprocess
|
| +import signal
|
| +import time
|
| +import warnings
|
| +import atexit
|
| +
|
| +import psutil
|
| +from test_psutil import reap_children, get_test_subprocess, wait_for_pid
|
| +try:
|
| + import wmi
|
| +except ImportError, err:
|
| + atexit.register(warnings.warn, "Couldn't run wmi tests: %s" % str(err),
|
| + RuntimeWarning)
|
| + wmi = None
|
| +
|
| +WIN2000 = platform.win32_ver()[0] == '2000'
|
| +
|
| +
|
| +class WindowsSpecificTestCase(unittest.TestCase):
|
| +
|
| + def setUp(self):
|
| + sproc = get_test_subprocess()
|
| + wait_for_pid(sproc.pid)
|
| + self.pid = sproc.pid
|
| +
|
| + def tearDown(self):
|
| + reap_children()
|
| +
|
| + def test_issue_24(self):
|
| + p = psutil.Process(0)
|
| + self.assertRaises(psutil.AccessDenied, p.kill)
|
| +
|
| + def test_special_pid(self):
|
| + if not WIN2000:
|
| + p = psutil.Process(4)
|
| + else:
|
| + p = psutil.Process(8)
|
| + self.assertEqual(p.name, 'System')
|
| + # use __str__ to access all common Process properties to check
|
| + # that nothing strange happens
|
| + str(p)
|
| + p.username
|
| + self.assertTrue(p.create_time >= 0.0)
|
| + try:
|
| + rss, vms = p.get_memory_info()
|
| + except psutil.AccessDenied:
|
| + # expected on Windows Vista and Windows 7
|
| + if not platform.uname()[1] in ('vista', 'win-7', 'win7'):
|
| + raise
|
| + else:
|
| + self.assertTrue(rss > 0)
|
| + if not WIN2000:
|
| + self.assertEqual(vms, 0)
|
| +
|
| + def test_signal(self):
|
| + p = psutil.Process(self.pid)
|
| + self.assertRaises(ValueError, p.send_signal, signal.SIGINT)
|
| +
|
| + if wmi is not None:
|
| +
|
| + # --- Process class tests
|
| +
|
| + def test_process_name(self):
|
| + w = wmi.WMI().Win32_Process(ProcessId=self.pid)[0]
|
| + p = psutil.Process(self.pid)
|
| + self.assertEqual(p.name, w.Caption)
|
| +
|
| + def test_process_path(self):
|
| + w = wmi.WMI().Win32_Process(ProcessId=self.pid)[0]
|
| + p = psutil.Process(self.pid)
|
| + self.assertEqual(p.exe, w.ExecutablePath)
|
| +
|
| + if not WIN2000:
|
| + def test_process_cmdline(self):
|
| + w = wmi.WMI().Win32_Process(ProcessId=self.pid)[0]
|
| + p = psutil.Process(self.pid)
|
| + self.assertEqual(' '.join(p.cmdline), w.CommandLine.replace('"', ''))
|
| +
|
| + def test_process_username(self):
|
| + w = wmi.WMI().Win32_Process(ProcessId=self.pid)[0]
|
| + p = psutil.Process(self.pid)
|
| + domain, _, username = w.GetOwner()
|
| + username = "%s\\%s" %(domain, username)
|
| + self.assertEqual(p.username, username)
|
| +
|
| + def test_process_rss_memory(self):
|
| + time.sleep(0.1)
|
| + w = wmi.WMI().Win32_Process(ProcessId=self.pid)[0]
|
| + p = psutil.Process(self.pid)
|
| + rss = p.get_memory_info().rss
|
| + self.assertEqual(rss, int(w.WorkingSetSize))
|
| +
|
| + def test_process_vms_memory(self):
|
| + time.sleep(0.1)
|
| + w = wmi.WMI().Win32_Process(ProcessId=self.pid)[0]
|
| + p = psutil.Process(self.pid)
|
| + vms = p.get_memory_info().vms
|
| + # http://msdn.microsoft.com/en-us/library/aa394372(VS.85).aspx
|
| + # ...claims that PageFileUsage is represented in Kilo
|
| + # bytes but funnily enough on certain platforms bytes are
|
| + # returned instead.
|
| + wmi_usage = int(w.PageFileUsage)
|
| + if (vms != wmi_usage) and (vms != wmi_usage * 1024):
|
| + self.fail("wmi=%s, psutil=%s" % (wmi_usage, vms))
|
| +
|
| + def test_process_create_time(self):
|
| + w = wmi.WMI().Win32_Process(ProcessId=self.pid)[0]
|
| + p = psutil.Process(self.pid)
|
| + wmic_create = str(w.CreationDate.split('.')[0])
|
| + psutil_create = time.strftime("%Y%m%d%H%M%S",
|
| + time.localtime(p.create_time))
|
| + self.assertEqual(wmic_create, psutil_create)
|
| +
|
| +
|
| + # --- psutil namespace functions and constants tests
|
| +
|
| + def test_NUM_CPUS(self):
|
| + num_cpus = int(os.environ['NUMBER_OF_PROCESSORS'])
|
| + self.assertEqual(num_cpus, psutil.NUM_CPUS)
|
| +
|
| + def test_TOTAL_PHYMEM(self):
|
| + w = wmi.WMI().Win32_ComputerSystem()[0]
|
| + self.assertEqual(int(w.TotalPhysicalMemory), psutil.TOTAL_PHYMEM)
|
| +
|
| + def test__UPTIME(self):
|
| + # _UPTIME constant is not public but it is used internally
|
| + # as value to return for pid 0 creation time.
|
| + # WMI behaves the same.
|
| + w = wmi.WMI().Win32_Process(ProcessId=self.pid)[0]
|
| + p = psutil.Process(0)
|
| + wmic_create = str(w.CreationDate.split('.')[0])
|
| + psutil_create = time.strftime("%Y%m%d%H%M%S",
|
| + time.localtime(p.create_time))
|
| +
|
| + def test_get_pids(self):
|
| + # Note: this test might fail if the OS is starting/killing
|
| + # other processes in the meantime
|
| + w = wmi.WMI().Win32_Process()
|
| + wmi_pids = [x.ProcessId for x in w]
|
| + wmi_pids.sort()
|
| + psutil_pids = psutil.get_pid_list()
|
| + psutil_pids.sort()
|
| + if wmi_pids != psutil_pids:
|
| + difference = filter(lambda x:x not in wmi_pids, psutil_pids) + \
|
| + filter(lambda x:x not in psutil_pids, wmi_pids)
|
| + self.fail("difference: " + str(difference))
|
| +
|
| +
|
| +if __name__ == '__main__':
|
| + test_suite = unittest.TestSuite()
|
| + test_suite.addTest(unittest.makeSuite(WindowsSpecificTestCase))
|
| + unittest.TextTestRunner(verbosity=2).run(test_suite)
|
| +
|
|
|