replaceDependencies: add tests

The tests cannot be directly built by Hydra, because replaceDependencies relies
on IFD. Instead, they are put inside a NixOS test where they are built on the
guest.
This commit is contained in:
Alois Wohlschlager 2023-12-16 19:02:17 +01:00 committed by Yureka
parent 63d6a7037c
commit fee5c7e1c2
3 changed files with 151 additions and 0 deletions

View File

@ -857,6 +857,7 @@ in {
redlib = handleTest ./redlib.nix {};
redmine = handleTest ./redmine.nix {};
renovate = handleTest ./renovate.nix {};
replace-dependencies = handleTest ./replace-dependencies {};
restartByActivationScript = handleTest ./restart-by-activation-script.nix {};
restic-rest-server = handleTest ./restic-rest-server.nix {};
restic = handleTest ./restic.nix {};

View File

@ -0,0 +1,18 @@
import ../make-test-python.nix (
{ pkgs, ... }:
{
name = "replace-dependencies";
meta.maintainers = with pkgs.lib.maintainers; [ alois31 ];
nodes.machine =
{ ... }:
{
system.extraDependencies = [ pkgs.stdenvNoCC ];
};
testScript = ''
start_all()
machine.succeed("nix-build --option substitute false ${pkgs.path}/nixos/tests/replace-dependencies/guest.nix")
'';
}
)

View File

@ -0,0 +1,132 @@
# This needs to be run in a NixOS test, because Hydra cannot do IFD.
let
pkgs = import ../../.. { };
inherit (pkgs)
runCommand
writeShellScriptBin
replaceDependency
replaceDependencies
;
inherit (pkgs.lib) escapeShellArg;
mkCheckOutput =
name: test: output:
runCommand name { } ''
actualOutput="$(${escapeShellArg "${test}/bin/test"})"
if [ "$(${escapeShellArg "${test}/bin/test"})" != ${escapeShellArg output} ]; then
echo >&2 "mismatched output: expected \""${escapeShellArg output}"\", got \"$actualOutput\""
exit 1
fi
touch "$out"
'';
oldDependency = writeShellScriptBin "dependency" ''
echo "got old dependency"
'';
newDependency = writeShellScriptBin "dependency" ''
echo "got new dependency"
'';
basic = writeShellScriptBin "test" ''
${oldDependency}/bin/dependency
'';
transitive = writeShellScriptBin "test" ''
${basic}/bin/test
'';
weirdDependency = writeShellScriptBin "dependency" ''
echo "got weird dependency"
${basic}/bin/test
'';
oldDependency1 = writeShellScriptBin "dependency1" ''
echo "got old dependency 1"
'';
newDependency1 = writeShellScriptBin "dependency1" ''
echo "got new dependency 1"
'';
oldDependency2 = writeShellScriptBin "dependency2" ''
${oldDependency1}/bin/dependency1
echo "got old dependency 2"
'';
newDependency2 = writeShellScriptBin "dependency2" ''
${oldDependency1}/bin/dependency1
echo "got new dependency 2"
'';
deep = writeShellScriptBin "test" ''
${oldDependency2}/bin/dependency2
'';
in
{
replacedependency-basic = mkCheckOutput "replacedependency-basic" (replaceDependency {
drv = basic;
inherit oldDependency newDependency;
}) "got new dependency";
replacedependency-transitive = mkCheckOutput "replacedependency-transitive" (replaceDependency {
drv = transitive;
inherit oldDependency newDependency;
}) "got new dependency";
replacedependency-weird =
mkCheckOutput "replacedependency-weird"
(replaceDependency {
drv = basic;
inherit oldDependency;
newDependency = weirdDependency;
})
''
got weird dependency
got old dependency'';
replacedependencies-precedence = mkCheckOutput "replacedependencies-precedence" (replaceDependencies
{
drv = basic;
replacements = [ { inherit oldDependency newDependency; } ];
cutoffPackages = [ oldDependency ];
}
) "got new dependency";
replacedependencies-self = mkCheckOutput "replacedependencies-self" (replaceDependencies {
drv = basic;
replacements = [
{
inherit oldDependency;
newDependency = oldDependency;
}
];
}) "got old dependency";
replacedependencies-deep-order1 =
mkCheckOutput "replacedependencies-deep-order1"
(replaceDependencies {
drv = deep;
replacements = [
{
oldDependency = oldDependency1;
newDependency = newDependency1;
}
{
oldDependency = oldDependency2;
newDependency = newDependency2;
}
];
})
''
got new dependency 1
got new dependency 2'';
replacedependencies-deep-order2 =
mkCheckOutput "replacedependencies-deep-order2"
(replaceDependencies {
drv = deep;
replacements = [
{
oldDependency = oldDependency2;
newDependency = newDependency2;
}
{
oldDependency = oldDependency1;
newDependency = newDependency1;
}
];
})
''
got new dependency 1
got new dependency 2'';
}