summaryrefslogtreecommitdiffstats
path: root/tests/lib.nix
blob: 2ec42e6bfe2287fcfe0293fcac9272766ea96683 (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
48
{ 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}
      '';
    };
}