diff options
Diffstat (limited to 'psutil/tests/test_linux.py')
-rwxr-xr-x | psutil/tests/test_linux.py | 100 |
1 files changed, 64 insertions, 36 deletions
diff --git a/psutil/tests/test_linux.py b/psutil/tests/test_linux.py index b8be6ca3..964416b3 100755 --- a/psutil/tests/test_linux.py +++ b/psutil/tests/test_linux.py @@ -250,12 +250,64 @@ def mock_open_exception(for_path, exc): @unittest.skipIf(not LINUX, "LINUX only") -class TestSystemVirtualMemory(PsutilTestCase): +class TestSystemVirtualMemoryAgainstFree(PsutilTestCase): + + def test_total(self): + cli_value = free_physmem().total + psutil_value = psutil.virtual_memory().total + self.assertEqual(cli_value, psutil_value) + + @retry_on_failure() + def test_used(self): + # Older versions of procps used slab memory to calculate used memory. + # This got changed in: + # https://gitlab.com/procps-ng/procps/commit/ + # 05d751c4f076a2f0118b914c5e51cfbb4762ad8e + if get_free_version_info() < (3, 3, 12): + raise self.skipTest("old free version") + cli_value = free_physmem().used + psutil_value = psutil.virtual_memory().used + self.assertAlmostEqual(cli_value, psutil_value, + delta=TOLERANCE_SYS_MEM) + + @retry_on_failure() + def test_free(self): + cli_value = free_physmem().free + psutil_value = psutil.virtual_memory().free + self.assertAlmostEqual(cli_value, psutil_value, + delta=TOLERANCE_SYS_MEM) + + @retry_on_failure() + def test_shared(self): + free = free_physmem() + free_value = free.shared + if free_value == 0: + raise unittest.SkipTest("free does not support 'shared' column") + psutil_value = psutil.virtual_memory().shared + self.assertAlmostEqual( + free_value, psutil_value, delta=TOLERANCE_SYS_MEM, + msg='%s %s \n%s' % (free_value, psutil_value, free.output)) + + @retry_on_failure() + def test_available(self): + # "free" output format has changed at some point: + # https://github.com/giampaolo/psutil/issues/538#issuecomment-147192098 + out = sh(["free", "-b"]) + lines = out.split('\n') + if 'available' not in lines[0]: + raise unittest.SkipTest("free does not support 'available' column") + else: + free_value = int(lines[1].split()[-1]) + psutil_value = psutil.virtual_memory().available + self.assertAlmostEqual( + free_value, psutil_value, delta=TOLERANCE_SYS_MEM, + msg='%s %s \n%s' % (free_value, psutil_value, out)) + + +@unittest.skipIf(not LINUX, "LINUX only") +class TestSystemVirtualMemoryAgainstVmstat(PsutilTestCase): def test_total(self): - # free_value = free_physmem().total - # psutil_value = psutil.virtual_memory().total - # self.assertEqual(free_value, psutil_value) vmstat_value = vmstat('total memory') * 1024 psutil_value = psutil.virtual_memory().total self.assertAlmostEqual( @@ -269,12 +321,10 @@ class TestSystemVirtualMemory(PsutilTestCase): # 05d751c4f076a2f0118b914c5e51cfbb4762ad8e if get_free_version_info() < (3, 3, 12): raise self.skipTest("old free version") - free = free_physmem() - free_value = free.used + vmstat_value = vmstat('used memory') * 1024 psutil_value = psutil.virtual_memory().used self.assertAlmostEqual( - free_value, psutil_value, delta=TOLERANCE_SYS_MEM, - msg='%s %s \n%s' % (free_value, psutil_value, free.output)) + vmstat_value, psutil_value, delta=TOLERANCE_SYS_MEM) @retry_on_failure() def test_free(self): @@ -304,31 +354,9 @@ class TestSystemVirtualMemory(PsutilTestCase): self.assertAlmostEqual( vmstat_value, psutil_value, delta=TOLERANCE_SYS_MEM) - @retry_on_failure() - def test_shared(self): - free = free_physmem() - free_value = free.shared - if free_value == 0: - raise unittest.SkipTest("free does not support 'shared' column") - psutil_value = psutil.virtual_memory().shared - self.assertAlmostEqual( - free_value, psutil_value, delta=TOLERANCE_SYS_MEM, - msg='%s %s \n%s' % (free_value, psutil_value, free.output)) - @retry_on_failure() - def test_available(self): - # "free" output format has changed at some point: - # https://github.com/giampaolo/psutil/issues/538#issuecomment-147192098 - out = sh(["free", "-b"]) - lines = out.split('\n') - if 'available' not in lines[0]: - raise unittest.SkipTest("free does not support 'available' column") - else: - free_value = int(lines[1].split()[-1]) - psutil_value = psutil.virtual_memory().available - self.assertAlmostEqual( - free_value, psutil_value, delta=TOLERANCE_SYS_MEM, - msg='%s %s \n%s' % (free_value, psutil_value, out)) +@unittest.skipIf(not LINUX, "LINUX only") +class TestSystemVirtualMemoryMocks(PsutilTestCase): def test_warnings_on_misses(self): # Emulate a case where /proc/meminfo provides few info. @@ -808,7 +836,7 @@ class TestSystemCPUFrequency(PsutilTestCase): name.startswith("/sys/devices/system/cpu/cpufreq/policy")): return io.BytesIO(b"700000") elif name == '/proc/cpuinfo': - return io.BytesIO(b"cpu MHz : 500") + return io.BytesIO(b"cpu MHz : 500") else: return orig_open(name, *args, **kwargs) @@ -849,8 +877,8 @@ class TestSystemCPUFrequency(PsutilTestCase): n.startswith("/sys/devices/system/cpu/cpufreq/policy1")): return io.BytesIO(b"600000") elif name == '/proc/cpuinfo': - return io.BytesIO(b"cpu MHz : 100\n" - b"cpu MHz : 400") + return io.BytesIO(b"cpu MHz : 100\n" + b"cpu MHz : 400") else: return orig_open(name, *args, **kwargs) @@ -881,7 +909,7 @@ class TestSystemCPUFrequency(PsutilTestCase): elif name.endswith('/cpuinfo_cur_freq'): return io.BytesIO(b"200000") elif name == '/proc/cpuinfo': - return io.BytesIO(b"cpu MHz : 200") + return io.BytesIO(b"cpu MHz : 200") else: return orig_open(name, *args, **kwargs) |