lazaret/tests/tooling/test_ignored_workspace_benchmark.py

88 lines
3.5 KiB
Python
Raw Normal View History

import importlib.util
import json
from pathlib import Path
import tempfile
import unittest
from unittest import mock
ROOT = Path(__file__).resolve().parents[2]
SPEC = importlib.util.spec_from_file_location(
"ignored_workspace_benchmark",
ROOT / "tools/ignored_workspace_benchmark.py",
)
BENCHMARK = importlib.util.module_from_spec(SPEC)
SPEC.loader.exec_module(BENCHMARK)
class BenchmarkAdmissionTests(unittest.TestCase):
def test_storage_model_accepts_null_and_uses_last_nonblank_ancestor(self) -> None:
blockdevices = {
"blockdevices": [
{
"path": "/dev/nvme0n1",
"type": "disk",
"model": "Reference Storage",
"tran": "nvme",
"children": [
{
"path": "/dev/mapper/benchmark",
"type": "crypt",
"model": None,
"tran": None,
}
],
}
]
}
with (
mock.patch.object(BENCHMARK, "version_output", return_value=json.dumps(blockdevices)),
mock.patch.object(BENCHMARK.os.path, "realpath", side_effect=lambda path: path),
):
information = BENCHMARK.storage_information("/dev/mapper/benchmark")
self.assertEqual(information["storage_model"], "Reference Storage")
self.assertEqual(information["storage_transport"], "nvme")
self.assertEqual(information["storage_stack"], ["disk", "crypt"])
def test_current_cgroup_swap_max_reads_root_and_nested_v2_memberships(self) -> None:
with tempfile.TemporaryDirectory() as temporary:
temporary = Path(temporary)
cgroup = temporary / "cgroup"
cgroup.mkdir()
membership = temporary / "membership"
membership.write_text("0::/\n")
(cgroup / "memory.swap.max").write_text("max\n")
self.assertEqual(BENCHMARK.current_cgroup_swap_max(membership, cgroup), "max")
nested = cgroup / "user.slice/benchmark.scope"
nested.mkdir(parents=True)
(nested / "memory.swap.max").write_text("0\n")
membership.write_text("0::/user.slice/benchmark.scope\n")
self.assertEqual(BENCHMARK.current_cgroup_swap_max(membership, cgroup), "0")
def test_current_cgroup_swap_max_refuses_malformed_and_escaping_paths(self) -> None:
with tempfile.TemporaryDirectory() as temporary:
temporary = Path(temporary)
cgroup = temporary / "cgroup"
cgroup.mkdir()
membership = temporary / "membership"
for value in ("2:memory:/benchmark\n", "0::/../../outside\n", "0::/ok\n1:name:/other\n"):
with self.subTest(value=value):
membership.write_text(value)
with self.assertRaises(AssertionError):
BENCHMARK.current_cgroup_swap_max(membership, cgroup)
outside = temporary / "outside"
outside.mkdir()
(outside / "memory.swap.max").write_text("0\n")
(cgroup / "escape").symlink_to(outside, target_is_directory=True)
membership.write_text("0::/escape\n")
with self.assertRaisesRegex(AssertionError, "escapes cgroup root"):
BENCHMARK.current_cgroup_swap_max(membership, cgroup)
if __name__ == "__main__":
unittest.main()