blob: 3c663c450b715ef4cf3ad6b3fbeb57f57a68f57a (
plain) (
tree)
|
|
{
lib,
testers,
nix,
callPackage,
}:
let
dsl = callPackage ./dsl.nix { inherit 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
transitive.dag = {
nodes.a = {
goal = true;
inputs.b = { };
};
nodes.b.inputs.c = { };
nodes.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
];
};
transitive-unbuilt-3 = {
imports = [
{
dag = {
test.unconstrained.builds = 3;
constraints.builds = 2;
test.constrained.builds = 0;
nodes = {
a.test.needed = true;
b.test.needed = true;
c.test.needed = true;
};
};
}
transitive
];
};
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
];
};
}
|