102 lines
3.0 KiB
Nix
102 lines
3.0 KiB
Nix
# SPDX-FileCopyrightText: Emery Hemingway
|
|
#
|
|
# SPDX-License-Identifier: LicenseRef-Hippocratic-1.1
|
|
|
|
{ pkgs ? (import ./.. { }) }:
|
|
|
|
let
|
|
|
|
lib = pkgs.buildPackages.pkgs.lib // {
|
|
|
|
renderDhallInit = path: args:
|
|
pkgs.buildPackages.runCommand "init.xml" {
|
|
buildInputs = with pkgs.buildPackages; [ dhall-text libxml2 ];
|
|
initConfig = path;
|
|
initArgs = args;
|
|
DHALL_PRELUDE = "${pkgs.dhallPackages.prelude}/package.dhall";
|
|
DHALL_GENODE = "${pkgs.dhallPackages.genode}/package.dhall";
|
|
} ''
|
|
echo '(env:DHALL_GENODE).Init.render (env:initConfig initArgs)' \
|
|
| dhall-to-text \
|
|
| xmllint -format - \
|
|
> $out
|
|
'';
|
|
|
|
};
|
|
|
|
testDriver = with pkgs.buildPackages;
|
|
stdenv.mkDerivation {
|
|
name = "genode-test-driver";
|
|
|
|
buildInputs = [ makeWrapper expect ];
|
|
|
|
dontUnpack = true;
|
|
|
|
preferLocalBuild = 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:
|
|
pkgs.stdenv.mkDerivation {
|
|
name = "test-run-${driver.testName}";
|
|
|
|
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
|
|
'';
|
|
};
|
|
|
|
makeTest = { testScript, testConfig, name ? "unamed", ... }@t:
|
|
let
|
|
|
|
baseSetup = with pkgs; ''
|
|
file link -s core ${depot.base-linux}/bin/core
|
|
file link -s timer ${depot.base-linux}/bin/timer
|
|
file link -s ld.lib.so ${depot.base-linux}/lib/ld.lib.so
|
|
file link -s init ${depot.init}/bin/init
|
|
file link -s config ${./driver-config.xml}
|
|
file link -s test.config $env(testConfig)
|
|
'';
|
|
|
|
driver = pkgs.buildPackages.runCommand "genode-test-driver-${name}" {
|
|
buildInputs = with pkgs.buildPackages; [ makeWrapper expect ];
|
|
inherit baseSetup testConfig testScript;
|
|
preferLocalBuild = true;
|
|
testName = name;
|
|
} ''
|
|
mkdir -p $out/bin
|
|
echo "$testConfig" > $out/test.config
|
|
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 testConfig=\"$testConfig\"" \
|
|
--run "export testScript=\"\$(cat $out/test-script)\"" \
|
|
--run "export baseSetup=\"\$(cat $out/base-setup)\"" \
|
|
'';
|
|
|
|
passMeta = drv:
|
|
drv
|
|
// lib.optionalAttrs (t ? meta) { meta = (drv.meta or { }) // t.meta; };
|
|
|
|
test = passMeta (runTests driver);
|
|
|
|
in test // { inherit driver test; };
|
|
|
|
callTest = path: args: makeTest (import path ({ inherit pkgs lib; } // args));
|
|
|
|
in {
|
|
libc = callTest ./libc.nix { };
|
|
log = callTest ./log.nix { };
|
|
signal = callTest ./signal.nix { };
|
|
}
|