summaryrefslogtreecommitdiff
path: root/psutil/tests/test_posix.py
diff options
context:
space:
mode:
Diffstat (limited to 'psutil/tests/test_posix.py')
-rwxr-xr-xpsutil/tests/test_posix.py40
1 files changed, 34 insertions, 6 deletions
diff --git a/psutil/tests/test_posix.py b/psutil/tests/test_posix.py
index 0dc1dfda..a37899fd 100755
--- a/psutil/tests/test_posix.py
+++ b/psutil/tests/test_posix.py
@@ -23,7 +23,6 @@ from psutil import MACOS
from psutil import OPENBSD
from psutil import POSIX
from psutil import SUNOS
-from psutil.tests import CI_TESTING
from psutil.tests import HAS_NET_IO_COUNTERS
from psutil.tests import PYTHON_EXE
from psutil.tests import PsutilTestCase
@@ -334,19 +333,48 @@ class TestSystemAPIs(PsutilTestCase):
"couldn't find %s nic in 'ifconfig -a' output\n%s" % (
nic, output))
- @unittest.skipIf(CI_TESTING and not psutil.users(), "unreliable on CI")
+ # @unittest.skipIf(CI_TESTING and not psutil.users(), "unreliable on CI")
@retry_on_failure()
def test_users(self):
- out = sh("who")
+ out = sh("who -u")
if not out.strip():
raise self.skipTest("no users on this system")
lines = out.split('\n')
users = [x.split()[0] for x in lines]
terminals = [x.split()[1] for x in lines]
self.assertEqual(len(users), len(psutil.users()))
- for u in psutil.users():
- self.assertIn(u.name, users)
- self.assertIn(u.terminal, terminals)
+ with self.subTest(psutil=psutil.users(), who=out):
+ for idx, u in enumerate(psutil.users()):
+ self.assertEqual(u.name, users[idx])
+ self.assertEqual(u.terminal, terminals[idx])
+ p = psutil.Process(u.pid)
+ # on macOS time is off by ~47 secs for some reason, but
+ # the next test against 'who' CLI succeeds
+ delta = 60 if MACOS else 1
+ self.assertAlmostEqual(u.started, p.create_time(), delta=delta)
+
+ @retry_on_failure()
+ def test_users_started(self):
+ out = sh("who -u")
+ if not out.strip():
+ raise self.skipTest("no users on this system")
+ # '2023-04-11 09:31' (Linux)
+ started = re.findall(r"\d\d\d\d-\d\d-\d\d \d\d:\d\d", out)
+ if started:
+ tstamp = "%Y-%m-%d %H:%M"
+ else:
+ # 'Apr 10 22:27' (macOS)
+ started = re.findall(r"[A-Z][a-z][a-z] \d\d \d\d:\d\d", out)
+ if started:
+ tstamp = "%b %d %H:%M"
+ else:
+ raise ValueError(
+ "cannot interpret tstamp in who output\n%s" % (out))
+ with self.subTest(psutil=psutil.users(), who=out):
+ for idx, u in enumerate(psutil.users()):
+ psutil_value = datetime.datetime.fromtimestamp(
+ u.started).strftime(tstamp)
+ self.assertEqual(psutil_value, started[idx])
def test_pid_exists_let_raise(self):
# According to "man 2 kill" possible error values for kill