summary refs log tree commit diff
diff options
context:
space:
mode:
authorPaul Schyska <paul@schyska.net>2021-05-21 23:11:20 +0200
committerPaul Schyska <paul@schyska.net>2021-05-22 14:11:45 +0200
commite1a8e856316f3498176923ace906591a0e420845 (patch)
tree74cdc131d766476370d455ea4986eff905fc7bd6
parent957272c5ad0d0bd0035b2963a4e7383ef9924467 (diff)
downloadnixpkgs-e1a8e856316f3498176923ace906591a0e420845.tar
nixpkgs-e1a8e856316f3498176923ace906591a0e420845.tar.gz
nixpkgs-e1a8e856316f3498176923ace906591a0e420845.tar.bz2
nixpkgs-e1a8e856316f3498176923ace906591a0e420845.tar.lz
nixpkgs-e1a8e856316f3498176923ace906591a0e420845.tar.xz
nixpkgs-e1a8e856316f3498176923ace906591a0e420845.tar.zst
nixpkgs-e1a8e856316f3498176923ace906591a0e420845.zip
nixos/atop: Wait for conditions
I had intermittent test failures due to timing issues.
This patch seems to have fixed them.
-rw-r--r--nixos/tests/atop.nix37
1 files changed, 30 insertions, 7 deletions
diff --git a/nixos/tests/atop.nix b/nixos/tests/atop.nix
index a2565e610ae..1f8b005041f 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