|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
"""AIX specific tests.""" |
|
|
|
import re |
|
|
|
import psutil |
|
from psutil import AIX |
|
from psutil.tests import PsutilTestCase |
|
from psutil.tests import pytest |
|
from psutil.tests import sh |
|
|
|
|
|
@pytest.mark.skipif(not AIX, reason="AIX only") |
|
class AIXSpecificTestCase(PsutilTestCase): |
|
def test_virtual_memory(self): |
|
out = sh('/usr/bin/svmon -O unit=KB') |
|
re_pattern = r"memory\s*" |
|
for field in [ |
|
"size", |
|
"inuse", |
|
"free", |
|
"pin", |
|
"virtual", |
|
"available", |
|
"mmode", |
|
]: |
|
re_pattern += rf"(?P<{field}>\S+)\s+" |
|
matchobj = re.search(re_pattern, out) |
|
|
|
assert matchobj is not None |
|
|
|
KB = 1024 |
|
total = int(matchobj.group("size")) * KB |
|
available = int(matchobj.group("available")) * KB |
|
used = int(matchobj.group("inuse")) * KB |
|
free = int(matchobj.group("free")) * KB |
|
|
|
psutil_result = psutil.virtual_memory() |
|
|
|
|
|
|
|
|
|
TOLERANCE_SYS_MEM = 2 * KB * KB |
|
assert psutil_result.total == total |
|
assert abs(psutil_result.used - used) < TOLERANCE_SYS_MEM |
|
assert abs(psutil_result.available - available) < TOLERANCE_SYS_MEM |
|
assert abs(psutil_result.free - free) < TOLERANCE_SYS_MEM |
|
|
|
def test_swap_memory(self): |
|
out = sh('/usr/sbin/lsps -a') |
|
|
|
|
|
|
|
|
|
matchobj = re.search( |
|
r"(?P<space>\S+)\s+" |
|
r"(?P<vol>\S+)\s+" |
|
r"(?P<vg>\S+)\s+" |
|
r"(?P<size>\d+)MB", |
|
out, |
|
) |
|
|
|
assert matchobj is not None |
|
|
|
total_mb = int(matchobj.group("size")) |
|
MB = 1024**2 |
|
psutil_result = psutil.swap_memory() |
|
|
|
|
|
assert int(psutil_result.total / MB) == total_mb |
|
|
|
def test_cpu_stats(self): |
|
out = sh('/usr/bin/mpstat -a') |
|
|
|
re_pattern = r"ALL\s*" |
|
for field in [ |
|
"min", |
|
"maj", |
|
"mpcs", |
|
"mpcr", |
|
"dev", |
|
"soft", |
|
"dec", |
|
"ph", |
|
"cs", |
|
"ics", |
|
"bound", |
|
"rq", |
|
"push", |
|
"S3pull", |
|
"S3grd", |
|
"S0rd", |
|
"S1rd", |
|
"S2rd", |
|
"S3rd", |
|
"S4rd", |
|
"S5rd", |
|
"sysc", |
|
]: |
|
re_pattern += rf"(?P<{field}>\S+)\s+" |
|
matchobj = re.search(re_pattern, out) |
|
|
|
assert matchobj is not None |
|
|
|
|
|
CPU_STATS_TOLERANCE = 1000 |
|
psutil_result = psutil.cpu_stats() |
|
assert ( |
|
abs(psutil_result.ctx_switches - int(matchobj.group("cs"))) |
|
< CPU_STATS_TOLERANCE |
|
) |
|
assert ( |
|
abs(psutil_result.syscalls - int(matchobj.group("sysc"))) |
|
< CPU_STATS_TOLERANCE |
|
) |
|
assert ( |
|
abs(psutil_result.interrupts - int(matchobj.group("dev"))) |
|
< CPU_STATS_TOLERANCE |
|
) |
|
assert ( |
|
abs(psutil_result.soft_interrupts - int(matchobj.group("soft"))) |
|
< CPU_STATS_TOLERANCE |
|
) |
|
|
|
def test_cpu_count_logical(self): |
|
out = sh('/usr/bin/mpstat -a') |
|
mpstat_lcpu = int(re.search(r"lcpu=(\d+)", out).group(1)) |
|
psutil_lcpu = psutil.cpu_count(logical=True) |
|
assert mpstat_lcpu == psutil_lcpu |
|
|
|
def test_net_if_addrs_names(self): |
|
out = sh('/etc/ifconfig -l') |
|
ifconfig_names = set(out.split()) |
|
psutil_names = set(psutil.net_if_addrs().keys()) |
|
assert ifconfig_names == psutil_names |
|
|