From 629e6930c709806e9276272e7e351bb896352ae3 Mon Sep 17 00:00:00 2001 From: Emery Hemingway Date: Thu, 27 Feb 2020 17:54:17 +0100 Subject: [PATCH] Add qemuArgs to tests, invoke tests with testEnv Execute QEMU tests with ${qemuArgs}, rename env to testEnv and merge testEnv into test shell variables. --- tests/driver-hw.nix | 31 +++++++++++++++---------------- tests/driver-nova.nix | 31 +++++++++++++++---------------- 2 files changed, 30 insertions(+), 32 deletions(-) diff --git a/tests/driver-hw.nix b/tests/driver-hw.nix index 28ea7cf..0ec3001 100644 --- a/tests/driver-hw.nix +++ b/tests/driver-hw.nix @@ -37,22 +37,22 @@ let defaultScript = ''run_genode_until {[init] child "harness" exited with exit value 0} 60''; mkTest = { name ? "unamed", testScript ? defaultScript, testConfig, testInputs ? [ ] - , env ? { }, ... # TODO: remove ... + , testEnv ? { }, qemuArgs ? [], ... }@t: let testConfig' = "${./driver-hw-config.dhall} ${testConfig}"; manifest = lib.mergeManifests (with testPkgs; [ base-hw-pc genode.os sotest-producer ] ++ testInputs); - env' = { + testEnv' = { DHALL_PRELUDE = "${testPkgs.dhallPrelude}/package.dhall"; DHALL_GENODE = "${testPkgs.dhallGenode}/package.dhall"; DHALL_WRAP_HARNESS = ./sotest-wrapper.dhall; MANIFEST = manifest; XDG_CACHE_HOME = "/tmp"; - } // env; + } // testEnv; - image = apps.hw-image.function env' testConfig'; + image = apps.hw-image.function testEnv' testConfig'; baseSetup = '' ## @@ -93,12 +93,13 @@ let global env global spawn_id - set TEST_MIB [expr ($env(TEST_RAM) / 1048576) + 16] + set TEST_MIB [expr (([file size ${image}] + $env(TEST_RAM)) >> 20) + 24] spawn ${hostPkgs.qemu_test}/bin/qemu-system-x86_64 \ -machine q35 -serial mon:stdio -nographic \ -m size=$TEST_MIB \ -kernel "${testPkgs.bender}" \ - -initrd "${image}" + -initrd "${image}" \ + ${toString qemuArgs} wait_for_output $wait_for_re $timeout_value $spawn_id } @@ -108,19 +109,17 @@ let ''; driver = with hostPkgs; - buildPackages.runCommand "genode-test-driver-${name}" { + buildPackages.runCommand "genode-test-driver-${name}" ({ buildInputs = [ makeWrapper expect ]; inherit baseSetup testScript; preferLocalBuild = true; testName = name; - DHALL_GENODE = "${testPkgs.dhallGenode}/package.dhall"; - DHALL_WRAP_HARNESS = ./sotest-wrapper.dhall; - MANIFEST = manifest; - } '' + } // testEnv') '' mkdir -p $out/bin echo "$testScript" > $out/test-script echo "$baseSetup" > $out/base-setup - eval $(${apps.dhall-to-bash.program} --declare "TEST_RAM" <<< "${./boot-ram.dhall} (${testConfig'})") + eval $(${apps.dhall-to-bash.program} --declare "TEST_RAM" \ + <<< "${./boot-ram.dhall} (${testConfig'})") ln -s ${testDriver}/bin/genode-test-driver $out/bin/ wrapProgram $out/bin/genode-test-driver \ --set testScript "$testScript" \ @@ -137,16 +136,16 @@ let in test // { inherit driver image test manifest; - config = hostPkgs.runCommand (name + ".dhall") env' '' + config = hostPkgs.runCommand (name + ".dhall") testEnv' '' ${apps.dhall.program} <<< "${testConfig'}" > $out ''; - iso = apps.hw-iso.function env' testConfig'; + iso = apps.hw-iso.function testEnv' testConfig'; - xml = hostPkgs.runCommand (name + ".config") env' '' + xml = hostPkgs.runCommand (name + ".config") testEnv' '' ${apps.render-init.program} "(${testConfig'}).config" > $out''; - sotest = hostPkgs.runCommand "hw-${name}-sotest" env' '' + sotest = hostPkgs.runCommand "hw-${name}-sotest" testEnv' '' cp "${testPkgs.bender}" bender cp ${image} image.elf mkdir -p $out/nix-support diff --git a/tests/driver-nova.nix b/tests/driver-nova.nix index 38ad1c2..e9ea205 100644 --- a/tests/driver-nova.nix +++ b/tests/driver-nova.nix @@ -37,22 +37,22 @@ let defaultScript = ''run_genode_until {[init] child "harness" exited with exit value 0} 60''; mkTest = { name ? "unamed", testScript ? defaultScript, testConfig, testInputs ? [ ] - , env ? { }, ... # TODO: remove ... + , testEnv ? { }, qemuArgs ? [], ... }@t: let testConfig' = "${./driver-nova-config.dhall} ${testConfig}"; manifest = lib.mergeManifests (with testPkgs; [ base-nova genode.os sotest-producer ] ++ testInputs); - env' = { + testEnv' = { DHALL_PRELUDE = "${testPkgs.dhallPrelude}/package.dhall"; DHALL_GENODE = "${testPkgs.dhallGenode}/package.dhall"; DHALL_WRAP_HARNESS = ./sotest-wrapper.dhall; MANIFEST = manifest; XDG_CACHE_HOME = "/tmp"; - } // env; + } // testEnv; - image = apps.nova-image.function env' testConfig'; + image = apps.nova-image.function testEnv' testConfig'; baseSetup = '' ## @@ -93,12 +93,13 @@ let global env global spawn_id - set TEST_MIB [expr ($env(TEST_RAM) / 1048576) + 24] + set TEST_MIB [expr (([file size ${image}] + $env(TEST_RAM)) >> 20) + 24] spawn ${hostPkgs.qemu_test}/bin/qemu-system-x86_64 \ -machine q35 -serial mon:stdio -nographic \ -m size=$TEST_MIB \ -kernel "${testPkgs.bender}" \ - -initrd "${testPkgs.NOVA}/hypervisor-x86_64 arg=iommu novpid serial,${image}" + -initrd "${testPkgs.NOVA}/hypervisor-x86_64 arg=iommu novpid serial,${image}" \ + ${toString qemuArgs} wait_for_output $wait_for_re $timeout_value $spawn_id } @@ -108,19 +109,17 @@ let ''; driver = with hostPkgs; - buildPackages.runCommand "genode-test-driver-${name}" { + buildPackages.runCommand "genode-test-driver-${name}" ({ buildInputs = [ makeWrapper expect ]; inherit baseSetup testScript; preferLocalBuild = true; testName = name; - DHALL_GENODE = "${testPkgs.dhallGenode}/package.dhall"; - DHALL_WRAP_HARNESS = ./sotest-wrapper.dhall; - MANIFEST = manifest; - } '' + } // testEnv') '' mkdir -p $out/bin echo "$testScript" > $out/test-script echo "$baseSetup" > $out/base-setup - eval $(${apps.dhall-to-bash.program} --declare "TEST_RAM" <<< "${./boot-ram.dhall} (${testConfig'})") + eval $(${apps.dhall-to-bash.program} --declare "TEST_RAM" \ + <<< "${./boot-ram.dhall} (${testConfig'})") ln -s ${testDriver}/bin/genode-test-driver $out/bin/ wrapProgram $out/bin/genode-test-driver \ --set testScript "$testScript" \ @@ -137,17 +136,17 @@ let in test // { inherit driver image test manifest; - config = hostPkgs.runCommand (name + ".dhall") env' '' + config = hostPkgs.runCommand (name + ".dhall") testEnv' '' export XDG_CACHE_HOME=''${TMPDIR:-/tmp} ${apps.dhall.program} <<< "${testConfig'}" > $out ''; - iso = apps.nova-iso.function env' "${testConfig'}"; + iso = apps.nova-iso.function testEnv' "${testConfig'}"; - xml = hostPkgs.runCommand (name + ".config") env' '' + xml = hostPkgs.runCommand (name + ".config") testEnv' '' ${apps.render-init.program} "(${testConfig'}).config" > $out''; - sotest = hostPkgs.runCommand "nova-${name}-sotest" env' '' + sotest = hostPkgs.runCommand "nova-${name}-sotest" testEnv' '' cp "${testPkgs.bender}" bender cp "${testPkgs.NOVA}/hypervisor-x86_64" hypervisor cp ${image} image.elf