diff options
| author | Benedikt Peetz <benedikt.peetz@b-peetz.de> | 2026-10-30 15:15:04 +0100 |
|---|---|---|
| committer | Benedikt Peetz <benedikt.peetz@b-peetz.de> | 2026-10-30 15:15:04 +0100 |
| commit | 43dac390967e2e85da0b3fcd84043a77cfaddfd0 (patch) | |
| tree | 93f09b804bcded8b59db6f619e18ec4b6265b8c2 /tests/infrastructure | |
| parent | treewide: Align files with the same files in the `nixos-server` repo (diff) | |
| download | nixos-config-43dac390967e2e85da0b3fcd84043a77cfaddfd0.zip | |
treewide: Align the rest of the files with the server repository
Diffstat (limited to 'tests/infrastructure')
| -rw-r--r-- | tests/infrastructure/clean.awk | 23 | ||||
| -rw-r--r-- | tests/infrastructure/default.nix | 177 | ||||
| -rw-r--r-- | tests/infrastructure/driver.sh | 176 | ||||
| -rw-r--r-- | tests/infrastructure/run.nix | 54 |
4 files changed, 0 insertions, 430 deletions
diff --git a/tests/infrastructure/clean.awk b/tests/infrastructure/clean.awk deleted file mode 100644 index 0362d38b..00000000 --- a/tests/infrastructure/clean.awk +++ /dev/null @@ -1,23 +0,0 @@ -# nixos-config - My current NixOS configuration -# -# Copyright (C) 2025 Benedikt Peetz <benedikt.peetz@b-peetz.de> -# SPDX-License-Identifier: GPL-3.0-or-later -# -# This file is part of my nixos-config. -# -# You should have received a copy of the License along with this program. -# If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>. - -{ - # Shell like comments - gsub(/^#.*$/, "", $0) - - # Strip leading and trailing white space - gsub(/^[[:blank:]]*/, "", $0) - gsub(/[[:blank:]]*$/, "", $0) - - # Only accept the line, if it contains something - if (NF) { - print $0 - } -} diff --git a/tests/infrastructure/default.nix b/tests/infrastructure/default.nix deleted file mode 100644 index cd21198c..00000000 --- a/tests/infrastructure/default.nix +++ /dev/null @@ -1,177 +0,0 @@ -# nixos-config - My current NixOS configuration -# -# Copyright (C) 2025 Benedikt Peetz <benedikt.peetz@b-peetz.de> -# SPDX-License-Identifier: GPL-3.0-or-later -# -# This file is part of my nixos-config. -# -# You should have received a copy of the License along with this program. -# If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>. -{ - pkgs, - myPkgs, - lib, - nixos-lib, - extraModules, - sysLib, - nixpkgs_open_prs, - system, -}: { - name, - configuration, - description, - hash, - testData, - testShell ? pkgs.dash, - alternateScreen ? false, -}: -nixos-lib.runTest { - hostPkgs = pkgs; # the Nixpkgs package set used outside the VMs - - inherit name; - - node = { - specialArgs = { - inherit - myPkgs - sysLib - nixpkgs_open_prs - system - ; - }; - # Use the nixpkgs as constructed by the `nixpkgs.*` options - pkgs = null; - }; - - nodes = { - machine = {config, ...}: { - imports = - [ - extraModules.home-manager - ../../modules/by-name/us/users/module.nix - ] - ++ configuration.imports; - - config = lib.modules.mkMerge [ - { - soispha = { - users = { - enable = true; - - # The password is 'test'. - hashedPassword = "$y$j9T$yYYUpE9OaxmEO8MaPI2jr0$WGpYYWaLySakI.Mwqz4sljGSOetAp4s5CIUa1VUU1l2"; - }; - }; - home-manager.users.soispha.home.stateVersion = "24.11"; - } - configuration.config - ]; - }; - }; - - testScript = {nodes, ...}: let - testDir = "${nodes.machine.home-manager.users.soispha.home.homeDirectory}/test"; - goldenFile = "${testDir}/__test_golden"; - logFile = "${testDir}/__test_log"; - testTmux = lib.getExe pkgs.tmux; - in - /* - python - */ - '' - start_all() - - __TEST_TMUX="${testTmux}" - - machine.succeed("sudo -u soispha ${pkgs.writeShellScript "mkTestEnvironment" '' - set -e - - mkdir --parents "${testDir}" - cd "${testDir}" - - ${ - lib.strings.concatStringsSep "\n\n" ( - builtins.attrValues - (builtins.mapAttrs - (name: value: '' - mkdir --parents "$(dirname '${name}')" - cp --recursive '${value}' '${name}' - '') - testData) - ) - } - ''}") - - machine.succeed("sudo -u soispha ${pkgs.writeShellScript "mkGoldenRecord" '' - set -e - - # HACK: Prevent zsh from complaining about missing configuration. - # TODO: These tests should probably just run under bash. <2024-11-22> - touch ~soispha/.zshrc - - cd "${testDir}" - - __TEST_TMUX="${testTmux}" - __TEST_SHELL="${lib.getExe testShell}" - __TEST_TMUX_PANE="__TEST_TMUX_PANE" - - __TEST_EVAL_USE_ALTERNATE_SCREEN="${ - if alternateScreen - then "true" - else "false" - }" - __TEST_EVAL_AWK_CLEAN_FILE="${./clean.awk}" - __TEST_EVAL_LOG_FILE="${logFile}" - __TEST_EVAL_GOLDEN_FILE="$(mktemp)" - printf "%s" "${goldenFile}" >"$__TEST_EVAL_GOLDEN_FILE" - - . ${./driver.sh} - - "$__TEST_TMUX" new-session -d -s "$__TEST_TMUX_PANE" "$__TEST_SHELL" - - # Warm up the shell in the tmux sesssion - "$__TEST_TMUX" send-keys -t "$__TEST_TMUX_PANE" "echo hi" "Enter" "clear" "Enter" - sleep 2 - - "$__TEST_TMUX" pipe-pane -t "$__TEST_TMUX_PANE" -o 'cat >>${goldenFile}' - - __test_eval "${description}" - - # Remove the pipe - "$__TEST_TMUX" pipe-pane -t "$__TEST_TMUX_PANE" - - # Check if the golden file was changed. - if [ "$(cat "$__TEST_EVAL_GOLDEN_FILE")" != "${goldenFile}" ]; then - mv "$(cat "$__TEST_EVAL_GOLDEN_FILE")" "${goldenFile}" - fi - - rm "$__TEST_EVAL_GOLDEN_FILE" - ''}") - - machine.succeed("sudo -u soispha ${pkgs.writeShellScript "testHashOfGolden" ('' - set -e - - cd "${testDir}" - '' - + lib.optionalString (hash != null) - /* - bash - */ - '' - golden_hash="$(sha256sum ${goldenFile} | awk '{print $1}')" - - if [ "$golden_hash" != "${hash}" ]; then - echo "Hash mismatch." - echo "Expected '${hash}'," - echo "but got '$golden_hash'" - exit 1 - else - echo "Hash was successfully checked." - fi - '')}") - - - machine.copy_from_vm("${goldenFile}", "golden") - machine.copy_from_vm("${logFile}", "log") - ''; -} diff --git a/tests/infrastructure/driver.sh b/tests/infrastructure/driver.sh deleted file mode 100644 index a8b241d2..00000000 --- a/tests/infrastructure/driver.sh +++ /dev/null @@ -1,176 +0,0 @@ -#! /usr/bin/env bash - -# nixos-config - My current NixOS configuration -# -# Copyright (C) 2025 Benedikt Peetz <benedikt.peetz@b-peetz.de> -# SPDX-License-Identifier: GPL-3.0-or-later -# -# This file is part of my nixos-config. -# -# You should have received a copy of the License along with this program. -# If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>. - -set -e - -msg() { - if [ "$#" -ne 0 ]; then - echo "$@" | tee --append "$__TEST_EVAL_LOG_FILE" >&2 - else - cat | tee --append "$__TEST_EVAL_LOG_FILE" >&2 - fi -} - -# Use bash built-ins to trim a string -# source: https://stackoverflow.com/a/3352015 -trim() { - local var="$*" - # remove leading whitespace characters - var="${var#"${var%%[![:space:]]*}"}" - # remove trailing whitespace characters - var="${var%"${var##*[![:space:]]}"}" - printf '%s' "$var" -} - -# contains(string, substring) -# -# Returns 0 if the specified string contains the specified substring, -# otherwise returns 1. -contains() { - string="$1" - substring="$2" - if [ "${string#*"$substring"}" != "$string" ]; then - return 0 # $substring is in $string - else - return 1 # $substring is not in $string - fi -} - -__test_wait_for_pid() { - local pre_pids_file="$1" - - exec_pids="$(mktemp)" - ps -eo tty,pid | awk "--assign=tmuxTty=$tmux_tty" '{if ($1 == tmuxTty) {print $2}}' >"$exec_pids" - - while read -r pid; do - sed --in-place "s/$pid//" "$exec_pids" - done <"$pre_pids_file" - - gawk --include inplace '{if (NF) {print $0}}' "$exec_pids" - - if [ "$(wc -l <"$exec_pids")" -eq 0 ]; then - # No further spawned processes left - return 0 - else - # Some other program is still running - pid="$(tail -n 1 "$exec_pids")" - rm "$exec_pids" - name="$(trim "$(tr '\0' ' ' <"/proc/$pid/cmdline")")" - - msg "Waiting until command ('$name') finishes (has pid: $pid).." - - # This allows waiting for non-children of the current shell - # source: https://stackoverflow.com/a/76046235 - tail --pid "$pid" --follow /dev/null & - wait $! - - # Give the `testShell` some time, to process the next command from a chained command. - sleep 0.2 - __test_wait_for_pid "$pre_pids_file" - fi -} - -__test_eval() { - tmux="$__TEST_TMUX" - tpane="$__TEST_TMUX_PANE" - file="$1" - - awk --file "$__TEST_EVAL_AWK_CLEAN_FILE" "$file" | while read -r cmd args; do - case "$cmd" in - "Type") - msg "Sending keys to application '$args'.." - "$tmux" send-keys -t "$tpane": "$args" - ;; - "Sleep") - msg "Sleeping for '$args' seconds.." - sleep "$args" - ;; - "Exec") - local pre_exec_pids - local tmux_tty - - msg "Executing command '$args'.." - tmux_tty="$("$tmux" list-panes -t "$tpane" -F "#{pane_tty}" | sed 's|/dev/||')" - - pre_exec_pids="$(mktemp)" - ps -eo tty,pid | awk "--assign=tmuxTty=$tmux_tty" '{if ($1 == tmuxTty) {print $2}}' >"$pre_exec_pids" - - "$tmux" send-keys -t "$tpane": "$args" "Enter" - sleep 1 - - __test_wait_for_pid "$pre_exec_pids" - - rm "$pre_exec_pids" - msg "Finished command '$args'." - ;; - "Expect" | "ExpectNot") - msg "Trying to match regex ('$args') for currently visible content.." - - get_plane_text() { - alternate="" - [ "$__TEST_EVAL_USE_ALTERNATE_SCREEN" = "true" ] && alternate="-a" - - "$tmux" capture-pane -t "$tpane" -p $alternate -S 0 -E - - } - - matched="" - if get_plane_text | grep "$args"; then - matched=true - else - matched=false - fi - - case "$cmd" in - "Expect") - if [ "$matched" = true ]; then - msg "Regex matched." - else - msg "Failed to find string, matched by regex '$args' on the screen" - msg current screen: - get_plane_text | msg - - exit 1 - fi - ;; - "ExpectNot") - if [ "$matched" = false ]; then - msg "Regex successfully not matched." - else - msg "Found to find string, matched by regex '$args' on the screen. But expected none" - msg current screen: - get_plane_text | msg - - exit 1 - fi - ;; - *) - msg "Entered unrechable code. This is a bug." - exit 1 - ;; - esac - ;; - "SetGolden") - msg "Trying to set '$args' as golden file." - [ -f "$args" ] || { - msg "Argument is not a file!" - exit 1 - } - printf "%s" "$args" >"$__TEST_EVAL_GOLDEN_FILE" - msg "Set golden file to: '$args'" - ;; - *) - msg "Unrecognized command: '$cmd'" - exit 1 - ;; - esac - done -} diff --git a/tests/infrastructure/run.nix b/tests/infrastructure/run.nix deleted file mode 100644 index 3148a2d9..00000000 --- a/tests/infrastructure/run.nix +++ /dev/null @@ -1,54 +0,0 @@ -# nixos-config - My current NixOS configuration -# -# Copyright (C) 2025 Benedikt Peetz <benedikt.peetz@b-peetz.de> -# SPDX-License-Identifier: GPL-3.0-or-later -# -# This file is part of my nixos-config. -# -# You should have received a copy of the License along with this program. -# If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>. -{ - pkgs, - lib, -}: -pkgs.writeShellScriptBin "run_test_description" '' - set -eu - - [ "$#" -ne 1 ] && { - echo "Usage: $0 <Test description file>"; - exit 2 - } - description="$(realpath "$1")" - - base="$(mktemp -d)" - cd "$base" - - __TEST_TMUX="${lib.getExe pkgs.tmux}" - __TEST_SHELL="${lib.getExe pkgs.dash}" - __TEST_TMUX_PANE="__TEST_TMUX_PANE" - - __TEST_EVAL_USE_ALTERNATE_SCREEN="false" - __TEST_EVAL_AWK_CLEAN_FILE="${./clean.awk}" - __TEST_EVAL_LOG_FILE="__test_log" - __TEST_EVAL_GOLDEN_FILE="$(mktemp)" - printf "%s" "__test_golden" >"$__TEST_EVAL_GOLDEN_FILE" - - . ${./driver.sh} - - echo "Setting up a session.." - if "$__TEST_TMUX" has-session -t "$__TEST_TMUX_PANE"; then - echo "Killing old '$__TEST_TMUX_PANE' session." - "$__TEST_TMUX" kill-session -t "$__TEST_TMUX_PANE" - fi - "$__TEST_TMUX" new-session -d -s "$__TEST_TMUX_PANE" - - echo "Initializing pipe.." - "$__TEST_TMUX" pipe-pane -t "$__TEST_TMUX_PANE" -o 'cat >>./test.golden' - - echo "Evaluating description.." - __test_eval "$description" - - "$__TEST_TMUX" pipe-pane -t "$__TEST_TMUX_PANE" - - echo "Base dir: $base" -'' |
