2020-01-17 01:24:34 +01:00
|
|
|
# SPDX-License-Identifier: CC0-1.0
|
2019-10-05 19:42:08 +02:00
|
|
|
|
2020-05-08 06:02:23 +02:00
|
|
|
{ addManifest, apps, buildPackages, lib, nixpkgs, testPkgs }:
|
2019-10-05 19:42:08 +02:00
|
|
|
|
|
|
|
let
|
2020-04-05 19:54:03 +02:00
|
|
|
testDriver = with buildPackages;
|
2019-10-05 19:42:08 +02:00
|
|
|
stdenv.mkDerivation {
|
|
|
|
name = "genode-test-driver";
|
2019-10-28 07:23:13 +01:00
|
|
|
preferLocalBuild = true;
|
2019-10-05 19:42:08 +02:00
|
|
|
|
|
|
|
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:
|
2020-04-05 19:54:03 +02:00
|
|
|
buildPackages.stdenv.mkDerivation {
|
2020-01-17 19:27:04 +01:00
|
|
|
name = "linux-" + driver.testName;
|
2019-10-28 07:23:13 +01:00
|
|
|
preferLocalBuild = true;
|
2019-10-05 19:42:08 +02:00
|
|
|
|
|
|
|
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
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
|
2020-01-25 00:17:33 +01:00
|
|
|
mkTest = { name ? "unamed", testScript, testConfig, testInputs ? [ ]
|
|
|
|
, env ? { }, ... }:
|
2019-10-10 10:28:19 +02:00
|
|
|
with testPkgs;
|
2019-10-05 19:42:08 +02:00
|
|
|
let
|
2020-03-26 16:24:27 +01:00
|
|
|
manifest = lib.mergeManifests (map addManifest
|
|
|
|
((with testPkgs; [ base-linux init sotest-producer ] ++ testInputs)));
|
2020-03-10 13:33:53 +01:00
|
|
|
testConfig' = "${./test-wrapper.dhall} ${testConfig} (toMap ${manifest})";
|
2020-01-17 19:27:04 +01:00
|
|
|
env' = {
|
2020-03-18 12:57:00 +01:00
|
|
|
DHALL_GENODE = "${testPkgs.dhallGenode}/source.dhall";
|
2020-04-13 20:26:01 +02:00
|
|
|
DHALL_GENODE_TEST = "${./test.dhall}";
|
2020-01-17 19:27:04 +01:00
|
|
|
} // env;
|
|
|
|
|
2020-04-05 10:01:11 +02:00
|
|
|
build = lib.linuxScript name env' testConfig';
|
|
|
|
|
2020-01-17 19:27:04 +01:00
|
|
|
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
|
|
|
|
|
2020-04-05 10:01:11 +02:00
|
|
|
exec sh ${build}/script
|
2020-01-21 15:35:16 +01:00
|
|
|
|
|
|
|
spawn ./core-linux
|
2020-01-17 19:27:04 +01:00
|
|
|
wait_for_output $wait_for_re $timeout_value $spawn_id
|
|
|
|
}
|
|
|
|
'';
|
2019-10-05 19:42:08 +02:00
|
|
|
|
2020-04-05 19:54:03 +02:00
|
|
|
driver = with buildPackages;
|
2019-10-07 17:05:37 +02:00
|
|
|
runCommand "genode-test-driver-${name}" {
|
|
|
|
buildInputs = [ makeWrapper expect ];
|
2020-02-21 22:55:50 +01:00
|
|
|
inherit baseSetup testScript;
|
2019-10-07 17:05:37 +02:00
|
|
|
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)\"" \
|
|
|
|
'';
|
2019-10-05 19:42:08 +02:00
|
|
|
|
2020-01-17 19:27:04 +01:00
|
|
|
test = runTests driver;
|
2019-10-05 19:42:08 +02:00
|
|
|
|
2020-01-17 19:27:04 +01:00
|
|
|
in test // {
|
2020-04-05 10:01:11 +02:00
|
|
|
inherit build driver test;
|
2020-04-13 20:26:01 +02:00
|
|
|
config = lib.runDhallCommand (name + ".dhall") env' ''
|
2020-02-21 22:55:50 +01:00
|
|
|
${apps.dhall.program} <<< "(${testConfig'}).config" > $out
|
2020-01-17 19:27:04 +01:00
|
|
|
'';
|
2020-04-13 20:26:01 +02:00
|
|
|
xml = lib.runDhallCommand (name + ".config") env' ''
|
2020-03-07 13:32:58 +01:00
|
|
|
${apps.render-init.program} <<< "(${testConfig'}).config" > $out
|
2020-01-17 19:27:04 +01:00
|
|
|
'';
|
2020-04-13 20:26:01 +02:00
|
|
|
image = lib.runDhallCommand (name + ".image.elf") env' ''
|
2020-01-21 15:35:16 +01:00
|
|
|
mkdir -p $out
|
|
|
|
pushd $out
|
2020-04-05 10:01:11 +02:00
|
|
|
. ${build}/script
|
2020-01-21 15:35:16 +01:00
|
|
|
'';
|
2020-01-17 19:27:04 +01:00
|
|
|
};
|
2019-10-05 19:42:08 +02:00
|
|
|
|
|
|
|
in {
|
2019-10-07 17:05:37 +02:00
|
|
|
callTest = path: args:
|
2019-10-22 19:24:02 +02:00
|
|
|
(import path ({
|
|
|
|
testEnv = {
|
|
|
|
inherit mkTest lib;
|
|
|
|
isLinux = true;
|
|
|
|
isNova = false;
|
|
|
|
};
|
2019-10-07 17:05:37 +02:00
|
|
|
pkgs = testPkgs;
|
2020-05-08 06:02:23 +02:00
|
|
|
inherit nixpkgs buildPackages;
|
2019-10-07 17:05:37 +02:00
|
|
|
} // args));
|
2019-10-05 19:42:08 +02:00
|
|
|
}
|