summary refs log tree commit diff stats
path: root/scripts/lint_missing_tests.sh
diff options
context:
space:
mode:
Diffstat (limited to '')
-rwxr-xr-xscripts/lint_missing_tests.sh66
1 files changed, 66 insertions, 0 deletions
diff --git a/scripts/lint_missing_tests.sh b/scripts/lint_missing_tests.sh
new file mode 100755
index 0000000..dffb86e
--- /dev/null
+++ b/scripts/lint_missing_tests.sh
@@ -0,0 +1,66 @@
+#!/usr/bin/env sh
+
+# Shell library {{{
+die() {
+    echo "$1" >&2
+    exit 1
+}
+warning() {
+    eprintln "\033[1;91m==> WARNING:\033[0m" "\033[1;93m$*\033[0m"
+}
+eprintln() {
+    >&2 println "$@"
+}
+println() {
+    printf "$*\n"
+}
+# }}}
+
+test_template() {
+    test_name="$(basename "$1")"
+    cat <<EOF
+{pkgs}:
+pkgs.testers.runNixOSTest {
+  name = "$test_name";
+
+  nodes.server = { pkgs, ... }: {
+    networking = {
+      firewall = {
+        allowedTCPPorts = [ 80 ];
+      };
+    };
+    services.nginx = {
+      enable = true;
+      virtualHosts."server" = {};
+    };
+  };
+
+  nodes.client = { pkgs, ... }: {
+    environment.systemPackages = with pkgs; [
+      curl
+    ];
+  };
+
+  testScript = ''
+    server.wait_for_unit("default.target")
+    client.wait_for_unit("default.target")
+    client.succeed("curl http://server/ | grep -o \"Welcome to nginx!\"")
+  '';
+}
+EOF
+}
+
+cd "$(dirname "$0")/.." || die "Bug: The root dir does not exist"
+
+fd default.nix ./modules | while IFS= read -r dir; do
+    mkdir --parents "tests/$(dirname "$dir")"
+
+    test_file="$(realpath --relative-to="$(pwd)" "tests/$(dirname "$dir")/test.nix")"
+    dir="$(realpath --relative-to="$(pwd)" "$dir")"
+
+    if [ "$1" = generate ]; then
+        test_template "$dir" >"$test_file"
+    else
+        warning "'$dir' is missing it's test (at '$test_file')!"
+    fi
+done