From e1a8e856316f3498176923ace906591a0e420845 Mon Sep 17 00:00:00 2001 From: Paul Schyska Date: Fri, 21 May 2021 23:11:20 +0200 Subject: [PATCH] nixos/atop: Wait for conditions I had intermittent test failures due to timing issues. This patch seems to have fixed them. --- nixos/tests/atop.nix | 37 ++++++++++++++++++++++++++++++------- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/nixos/tests/atop.nix b/nixos/tests/atop.nix index a2565e610ae1..1f8b005041f0 100644 --- a/nixos/tests/atop.nix +++ b/nixos/tests/atop.nix @@ -14,7 +14,10 @@ let assertions = rec { ''; unit = name: state: '' with subtest("Unit ${name} should be ${state}"): - machine.require_unit_state("${name}", "${state}") + if "${state}" == "active": + machine.wait_for_unit("${name}") + else: + machine.require_unit_state("${name}", "${state}") ''; version = '' import re @@ -44,9 +47,19 @@ let assertions = rec { if present then unit "atop.service" "active" + '' - with subtest("atop.service should have written some data to /var/log/atop"): - files = int(machine.succeed("ls -1 /var/log/atop | wc -l")) - assert files > 0, "Expected at least 1 data file" + with subtest("atop.service should write some data to /var/log/atop"): + + def has_data_files(last: bool) -> bool: + files = int(machine.succeed("ls -1 /var/log/atop | wc -l")) + if files == 0: + machine.log("Did not find at least one 1 data file") + if not last: + machine.log("Will retry...") + return False + return True + + with machine.nested("Waiting for data files"): + retry(has_data_files) '' else unit "atop.service" "inactive"; atopRotateTimer = present: unit "atop-rotate.timer" (if present then "active" else "inactive"); @@ -55,11 +68,21 @@ let assertions = rec { unit "atopacct.service" "active" + '' with subtest("atopacct.service should enable process accounting"): - machine.succeed("test -f /run/pacct_source") + machine.wait_until_succeeds("test -f /run/pacct_source") with subtest("atopacct.service should write data to /run/pacct_shadow.d"): - files = int(machine.succeed("ls -1 /run/pacct_shadow.d | wc -l")) - assert files >= 1, "Expected at least 1 pacct_shadow.d file" + + def has_data_files(last: bool) -> bool: + files = int(machine.succeed("ls -1 /run/pacct_shadow.d | wc -l")) + if files == 0: + machine.log("Did not find at least one 1 data file") + if not last: + machine.log("Will retry...") + return False + return True + + with machine.nested("Waiting for data files"): + retry(has_data_files) '' else unit "atopacct.service" "inactive"; netatop = present: if present then