|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| """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
|
|
|