# 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 { }; }