feat(clan/services): init test-suite for eval test

This commit is contained in:
Johannes Kirschbauer
2025-03-26 17:29:40 +01:00
parent a5a06dc086
commit 69b7c9602f
3 changed files with 116 additions and 0 deletions

View File

@@ -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.<attrName>
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
'';
};
};
}

View File

@@ -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;
};
}

View File

@@ -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;