2
0
Fork 0
genodepkgs/tests/driver-linux.nix

129 lines
3.6 KiB
Nix

# SPDX-License-Identifier: CC0-1.0
{ apps, testPkgs, hostPkgs, lib, depot }:
let
testDriver = with hostPkgs;
stdenv.mkDerivation {
name = "genode-test-driver";
preferLocalBuild = true;
buildInputs = [ makeWrapper expect ];
dontUnpack = true;
installPhase = ''
install -Dm555 ${./test-driver.exp} $out/bin/genode-test-driver
wrapProgram $out/bin/genode-test-driver \
--prefix PATH : "${lib.makeBinPath [ expect coreutils ]}"
'';
};
runTests = driver:
hostPkgs.stdenv.mkDerivation {
name = "linux-" + driver.testName;
preferLocalBuild = true;
buildCommand = ''
mkdir -p $out/nix-support
${driver}/bin/genode-test-driver | tee $out/log
touch $out/nix-support
echo "report testlog $out log" >> $out/nix-support/hydra-build-products
'';
};
mkTest = { name ? "unamed", testScript, testConfig, testInputs ? [ ]
, env ? { }, ... }:
with testPkgs;
let
env' = {
DHALL_PRELUDE = "${testPkgs.dhallPrelude}/package.dhall";
DHALL_GENODE = "${testPkgs.dhallGenode}/package.dhall";
MANIFEST = lib.mergeManifests (with testPkgs;
[ genode.base-linux genode.os ] ++ testInputs);
} // env;
toExports = env:
with builtins;
let
keys = attrNames env;
f = key: ''set env(${key}) "${getAttr key env}"'';
exports = map f keys;
in concatStringsSep "\n" exports;
baseSetup = ''
${toExports env'}
proc run_genode_until {{wait_for_re forever} {timeout_value 0} {running_spawn_id -1}} {
#
# If a running_spawn_id is specified, wait for the expected output
#
if {$running_spawn_id != -1} {
wait_for_output $wait_for_re $timeout_value $running_spawn_id
return
}
global image_dir spawn_id
global env
set env(XDG_CACHE_HOME) /tmp
exec ${apps.linux-image.program} \
${./driver-linux-config.dhall} ${testConfig}
spawn ./core-linux
wait_for_output $wait_for_re $timeout_value $spawn_id
}
'';
driver = with hostPkgs;
runCommand "genode-test-driver-${name}" {
buildInputs = [ makeWrapper expect ];
inherit baseSetup testConfig testScript;
preferLocalBuild = true;
testName = name;
} ''
mkdir -p $out/bin
echo "$testScript" > $out/test-script
echo "$baseSetup" > $out/base-setup
ln -s ${testDriver}/bin/genode-test-driver $out/bin/
wrapProgram $out/bin/genode-test-driver \
--run "export testScript=\"\$(cat $out/test-script)\"" \
--run "export baseSetup=\"\$(cat $out/base-setup)\"" \
'';
test = runTests driver;
in test // {
inherit driver test;
config = hostPkgs.runCommand (name + ".dhall") env' ''
${apps.dhall.program} <<< \
"(${./driver-linux-config.dhall} ${testConfig})" > $out
'';
xml = hostPkgs.runCommand (name + ".config") env' ''
${apps.render-init.program} \
"(${./driver-linux-config.dhall} ${testConfig}).config" > $out
'';
image = hostPkgs.runCommand (name + ".config") env' ''
mkdir -p $out
pushd $out
${apps.linux-image.program} \
"${./driver-linux-config.dhall} ${testConfig}"
'';
};
in {
callTest = path: args:
(import path ({
testEnv = {
inherit mkTest lib;
isLinux = true;
isNova = false;
};
pkgs = testPkgs;
inherit depot;
} // args));
}