summaryrefslogtreecommitdiffstats
path: root/nixos/lib/test-driver/test_driver/machine.py
diff options
context:
space:
mode:
Diffstat (limited to 'nixos/lib/test-driver/test_driver/machine.py')
-rw-r--r--nixos/lib/test-driver/test_driver/machine.py32
1 files changed, 30 insertions, 2 deletions
diff --git a/nixos/lib/test-driver/test_driver/machine.py b/nixos/lib/test-driver/test_driver/machine.py
index f430321bb607..da60b669fa27 100644
--- a/nixos/lib/test-driver/test_driver/machine.py
+++ b/nixos/lib/test-driver/test_driver/machine.py
@@ -447,8 +447,7 @@ class Machine:
"""
def check_active(_: Any) -> bool:
- info = self.get_unit_info(unit, user)
- state = info["ActiveState"]
+ state = self.get_unit_property(unit, "ActiveState", user)
if state == "failed":
raise Exception(f'unit "{unit}" reached state "{state}"')
@@ -491,6 +490,35 @@ class Machine:
if line_pattern.match(line)
)
+ def get_unit_property(
+ self,
+ unit: str,
+ property: str,
+ user: Optional[str] = None,
+ ) -> str:
+ status, lines = self.systemctl(
+ f'--no-pager show "{unit}" --property="{property}"',
+ user,
+ )
+ if status != 0:
+ raise Exception(
+ f'retrieving systemctl property "{property}" for unit "{unit}"'
+ + ("" if user is None else f' under user "{user}"')
+ + f" failed with exit code {status}"
+ )
+
+ invalid_output_message = (
+ f'systemctl show --property "{property}" "{unit}"'
+ f"produced invalid output: {lines}"
+ )
+
+ line_pattern = re.compile(r"^([^=]+)=(.*)$")
+ match = line_pattern.match(lines)
+ assert match is not None, invalid_output_message
+
+ assert match[1] == property, invalid_output_message
+ return match[2]
+
def systemctl(self, q: str, user: Optional[str] = None) -> Tuple[int, str]:
"""
Runs `systemctl` commands with optional support for