aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2026-11-13 14:01:28 +0000
committertv <tv@krebsco.de>2026-11-13 15:07:23 +0100
commitafdb3ee5fe6e6ce2447f4838ca88108525b0ee4b (patch)
treef88feea397764c8bd86bce7e9141b1eb1790f100 /tests
parent36cfd6b9fa8d729172f90e8fdd507349905d4f11 (diff)
krops: add allocateTTY to writeDeploy
With allocateTTY, nixos-rebuild runs with a terminal, so it shows colours and progress: on remote targets, ssh gets -t, which allocates a terminal if its own input is one, and on the local target, expect's unbuffer provides one. The nixos-rebuild stand-in records whether its output is a terminal.
Diffstat (limited to 'tests')
-rwxr-xr-xtests/nixos-rebuild.sh6
-rw-r--r--tests/scenarios.nix23
2 files changed, 26 insertions, 3 deletions
diff --git a/tests/nixos-rebuild.sh b/tests/nixos-rebuild.sh
index 9e2e47e..ec0c85c 100755
--- a/tests/nixos-rebuild.sh
+++ b/tests/nixos-rebuild.sh
@@ -1,8 +1,10 @@
#! /bin/sh
-# Stands in for nixos-rebuild: records the user it runs as, NIX_PATH, and its
-# arguments in /tmp/nixos-rebuild.log.
+# Stands in for nixos-rebuild: records the user it runs as, NIX_PATH, its
+# arguments, and whether its output is a terminal in /tmp/nixos-rebuild.log.
+if test -t 1; then terminal=terminal; else terminal='no terminal'; fi
{
id -u
printf '%s\n' "${NIX_PATH-}"
printf '%s\n' "$*"
+ echo "$terminal"
} > /tmp/nixos-rebuild.log
diff --git a/tests/scenarios.nix b/tests/scenarios.nix
index e618fcd..2fc1bd7 100644
--- a/tests/scenarios.nix
+++ b/tests/scenarios.nix
@@ -786,7 +786,28 @@ assert !(krops.isLocalTarget (targets.remote "/"));
expect_eq arguments "$(sed -n 3p /tmp/nixos-rebuild.log)" "$expected"
'';
};
- });
+ })
+
+ # writeDeploy with allocateTTY: nixos-rebuild's output is a terminal on
+ # the local target. ssh allocates one on remote targets only if its own
+ # input is a terminal, which the tests' isn't.
+ ++ map (targetKind: scenario {
+ name = "deploy-${targetKind}-allocateTTY";
+ inherit targetKind;
+ prepare = ''
+ rm -f /tmp/nixos-rebuild.log /etc/nixos/flake.nix
+ '';
+ phases = [{
+ sources.x.file = "/fixtures/alt";
+ deploy.allocateTTY = true;
+ check = ''
+ expect_eq arguments "$(sed -n 3p /tmp/nixos-rebuild.log)" switch
+ expect_eq terminal "$(sed -n 4p /tmp/nixos-rebuild.log)" ${
+ if targetKind == "local" then "terminal" else "'no terminal'"
+ }
+ '';
+ }];
+ }) targetKinds;
# Features spanning several sources.
features = concatMap (targetKind: let