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:
parent
63d6a7037c
commit
fee5c7e1c2
@ -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 {};
|
||||
|
18
nixos/tests/replace-dependencies/default.nix
Normal file
18
nixos/tests/replace-dependencies/default.nix
Normal 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")
|
||||
'';
|
||||
}
|
||||
)
|
132
nixos/tests/replace-dependencies/guest.nix
Normal file
132
nixos/tests/replace-dependencies/guest.nix
Normal 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'';
|
||||
}
|
Loading…
Reference in New Issue
Block a user