summaryrefslogtreecommitdiff
path: root/nixos/tests/all-tests.nix
blob: f7e83253ec3398205eb19c0cb9fb4dc73646bfea (plain) (blame)
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
{ lib, testers }:

let
  dsl = ./dsl.nix;
  diamond.dag = {
    nodes.a = { };
    nodes.b.inputs.a = { }; # b->a
    nodes.c.inputs.a = { }; # c->a
    nodes.d.inputs.b = { }; # d->b
    nodes.d.inputs.c = { }; # d->c
  };

  #   A   B   C     D
  #   \   |  /      |
  #     U  V        W
  sunset.dag = {
    nodes =
      let
        goalDependsOn = inputs: {
          goal = true;
          inputs = lib.genAttrs inputs (_: { });
        };
      in
      {
        a = goalDependsOn [ "u" "v" ];
        b = goalDependsOn [ "u" "v" ];
        c = goalDependsOn [ "u" "v" ];
        d = goalDependsOn [ "w" ];

        u = { };
        v = { };
        w = { };
      };
  };
in
builtins.mapAttrs
  (
    name: value:
    testers.runNixOSTest (
      {
        inherit name;
        imports = value.imports ++ [ dsl ];
        testScript =
          value.testScriptPre or ""
          + ''
            start_all()
            substituter.wait_for_unit("nix-serve.service")
            builder.succeed("dag-test")
          ''
          + value.testScriptPost or "";
      }
      // builtins.removeAttrs value [
        "imports"
        "testScriptPre"
        "testScriptPost"
      ]
    )
  )
  {
    diamond-unbuilt-0 = {
      imports = [
        {
          dag.test.unconstrained.builds = 0;
          dag.test.unconstrained.downloads = 0;
        }
        diamond
      ];
    };
    diamond-unbuilt-2 = {
      imports = [
        {
          dag.nodes.a.cache = "remote";
          dag.nodes.b.cache = "remote";
          dag.nodes.d.goal = true;
          dag.test.unconstrained.builds = 2;
          dag.test.unconstrained.downloads = 2;
        }
        diamond
      ];
    };
    diamond-unbuilt-4 = {
      imports = [
        {
          dag.nodes.d.goal = true;
          dag.test.unconstrained.builds = 4;
          dag.test.unconstrained.downloads = 0;
        }
        diamond
      ];
    };

    sunset-unbuilt-7 = {
      imports = [
        {
          dag = {
            test.unconstrained.builds = 7;

            constraints.builds = 5;
            test.constrained.builds = 3;

            nodes = {
              a.test = {
                chosen = true;
                needed = true;
              };
              b.test = {
                chosen = true;
                needed = true;
              };
              c.test = {
                chosen = true;
                needed = true;
              };

              d.test.needed = true;
              u.test.needed = true;
              v.test.needed = true;
              w.test.needed = true;
            };
          };
        }
        sunset
      ];
    };
  }