summaryrefslogtreecommitdiffstats
path: root/tests/lib.nix
blob: b98be6905f4efd34124943449ee8e03c7838b3ab (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
{ pkgs ? (import <nixpkgs> {})
, makeTest ? import <nixpkgs/nixos/tests/make-test-python.nix>
, ...
}:
{
  makeDiskoTest = {
    disko-config,
    extraTestScript,
    extraConfig ? {}
  }:
  let
    lib = pkgs.lib;
    makeTest' = args:
      makeTest args {
        inherit pkgs;
        inherit (pkgs) system;
      };
    tsp-create = pkgs.writeScript "create" ((pkgs.callPackage ../. {}).create disko-config);
    tsp-mount = pkgs.writeScript "mount" ((pkgs.callPackage ../. {}).mount disko-config);
    num-disks = builtins.length (builtins.filter (x: builtins.match "vd." x == []) (lib.attrNames disko-config.content));
  in makeTest' {
    name = "disko";

    nodes.machine =
      { config, pkgs, modulesPath, ... }:

      {
        imports = [
          (modulesPath + "/profiles/installation-device.nix")
          (modulesPath + "/profiles/base.nix")
        ];

        # speed-up eval
        documentation.enable = false;

        virtualisation.emptyDiskImages = builtins.genList (_: 512) num-disks;
      } // extraConfig;

    testScript = ''
      machine.succeed("echo 'secret' > /tmp/secret.key");
      machine.succeed("${tsp-create}");
      machine.succeed("${tsp-mount}");
      machine.succeed("${tsp-mount}"); # verify that the command is idempotent
      ${extraTestScript}
    '';
  };
}