From 69b7c9602f65415070080d6c2121cffede4044a8 Mon Sep 17 00:00:00 2001 From: Johannes Kirschbauer Date: Wed, 26 Mar 2025 17:29:40 +0100 Subject: [PATCH] feat(clan/services): init test-suite for eval test --- lib/distributed-service/flake-module.nix | 54 ++++++++++++++++++++ lib/distributed-service/tests/default.nix | 61 +++++++++++++++++++++++ lib/flake-module.nix | 1 + 3 files changed, 116 insertions(+) create mode 100644 lib/distributed-service/flake-module.nix create mode 100644 lib/distributed-service/tests/default.nix diff --git a/lib/distributed-service/flake-module.nix b/lib/distributed-service/flake-module.nix new file mode 100644 index 000000000..c97896e97 --- /dev/null +++ b/lib/distributed-service/flake-module.nix @@ -0,0 +1,54 @@ +{ self, inputs, ... }: +let + inputOverrides = builtins.concatStringsSep " " ( + builtins.map (input: " --override-input ${input} ${inputs.${input}}") (builtins.attrNames inputs) + ); +in +{ + perSystem = + { + pkgs, + lib, + config, + system, + self', + ... + }: + { + devShells.inventory-schema = pkgs.mkShell { + inputsFrom = with config.checks; [ + lib-inventory-eval + self'.devShells.default + ]; + }; + + legacyPackages.schemas = ( + import ./schemas { + inherit + pkgs + self + lib + self' + ; + } + ); + + # Run: nix-unit --extra-experimental-features flakes --flake .#legacyPackages.x86_64-linux. + legacyPackages.evalTest-distributedServices = import ./tests { + inherit lib self; + }; + + checks = { + lib-distributedServices-eval = pkgs.runCommand "tests" { nativeBuildInputs = [ pkgs.nix-unit ]; } '' + export HOME="$(realpath .)" + export NIX_ABORT_ON_WARN=1 + nix-unit --eval-store "$HOME" \ + --extra-experimental-features flakes \ + ${inputOverrides} \ + --flake ${self}#legacyPackages.${system}.distributedServices + + touch $out + ''; + }; + }; +} diff --git a/lib/distributed-service/tests/default.nix b/lib/distributed-service/tests/default.nix new file mode 100644 index 000000000..694b80186 --- /dev/null +++ b/lib/distributed-service/tests/default.nix @@ -0,0 +1,61 @@ +{ + lib, + ... +}: +let + inherit (lib) + evalModules + mkOption + types + ; + + inherit (types) + submodule + attrsOf + str + ; + + evalInventory = + m: + (evalModules { + # Static modules + modules = [ + ../../inventory/build-inventory/interface.nix + { + modules.test = {}; + } + m + ]; + }).config; + + flakeFixture = { inputs = {}; }; + + callInventoryAdapter = inventoryModule: import ../inventory-adapter.nix { inherit lib; flake = flakeFixture; inventory = evalInventory inventoryModule; }; +in +{ + test_simple = + let res = callInventoryAdapter { + # Authored module + # A minimal module looks like this + # It isn't exactly doing anything but it's a valid module that produces an output + modules."simple-module" = { + _class = "clan.service"; + manifest = { + name = "netwitness"; + }; + }; + # User config + instances."instance_foo" = { + module = { + name = "simple-module"; + }; + }; + }; + in + { + # Test that the module is mapped into the output + # We might change the attribute name in the future + expr = res.evals ? "self-simple-module"; + expected = true; + }; +} diff --git a/lib/flake-module.nix b/lib/flake-module.nix index f7b8a71b2..219e1a230 100644 --- a/lib/flake-module.nix +++ b/lib/flake-module.nix @@ -16,6 +16,7 @@ in ./inventory/flake-module.nix ./build-clan/flake-module.nix ./values/flake-module.nix + ./distributed-service/flake-module.nix ]; flake.lib = import ./default.nix { inherit lib inputs;