2
0
Fork 0

Add qemuArgs to tests, invoke tests with testEnv

Execute QEMU tests with ${qemuArgs}, rename env to testEnv and
merge testEnv into test shell variables.
This commit is contained in:
Ehmry - 2020-02-27 17:54:17 +01:00
parent 9349b3acb8
commit 629e6930c7
2 changed files with 30 additions and 32 deletions

View File

@ -37,22 +37,22 @@ let
defaultScript = ''run_genode_until {[init] child "harness" exited with exit value 0} 60''; defaultScript = ''run_genode_until {[init] child "harness" exited with exit value 0} 60'';
mkTest = { name ? "unamed", testScript ? defaultScript, testConfig, testInputs ? [ ] mkTest = { name ? "unamed", testScript ? defaultScript, testConfig, testInputs ? [ ]
, env ? { }, ... # TODO: remove ... , testEnv ? { }, qemuArgs ? [], ...
}@t: }@t:
let let
testConfig' = "${./driver-hw-config.dhall} ${testConfig}"; testConfig' = "${./driver-hw-config.dhall} ${testConfig}";
manifest = lib.mergeManifests (with testPkgs; manifest = lib.mergeManifests (with testPkgs;
[ base-hw-pc genode.os sotest-producer ] [ base-hw-pc genode.os sotest-producer ]
++ testInputs); ++ testInputs);
env' = { testEnv' = {
DHALL_PRELUDE = "${testPkgs.dhallPrelude}/package.dhall"; DHALL_PRELUDE = "${testPkgs.dhallPrelude}/package.dhall";
DHALL_GENODE = "${testPkgs.dhallGenode}/package.dhall"; DHALL_GENODE = "${testPkgs.dhallGenode}/package.dhall";
DHALL_WRAP_HARNESS = ./sotest-wrapper.dhall; DHALL_WRAP_HARNESS = ./sotest-wrapper.dhall;
MANIFEST = manifest; MANIFEST = manifest;
XDG_CACHE_HOME = "/tmp"; XDG_CACHE_HOME = "/tmp";
} // env; } // testEnv;
image = apps.hw-image.function env' testConfig'; image = apps.hw-image.function testEnv' testConfig';
baseSetup = '' baseSetup = ''
## ##
@ -93,12 +93,13 @@ let
global env global env
global spawn_id 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 \ spawn ${hostPkgs.qemu_test}/bin/qemu-system-x86_64 \
-machine q35 -serial mon:stdio -nographic \ -machine q35 -serial mon:stdio -nographic \
-m size=$TEST_MIB \ -m size=$TEST_MIB \
-kernel "${testPkgs.bender}" \ -kernel "${testPkgs.bender}" \
-initrd "${image}" -initrd "${image}" \
${toString qemuArgs}
wait_for_output $wait_for_re $timeout_value $spawn_id wait_for_output $wait_for_re $timeout_value $spawn_id
} }
@ -108,19 +109,17 @@ let
''; '';
driver = with hostPkgs; driver = with hostPkgs;
buildPackages.runCommand "genode-test-driver-${name}" { buildPackages.runCommand "genode-test-driver-${name}" ({
buildInputs = [ makeWrapper expect ]; buildInputs = [ makeWrapper expect ];
inherit baseSetup testScript; inherit baseSetup testScript;
preferLocalBuild = true; preferLocalBuild = true;
testName = name; testName = name;
DHALL_GENODE = "${testPkgs.dhallGenode}/package.dhall"; } // testEnv') ''
DHALL_WRAP_HARNESS = ./sotest-wrapper.dhall;
MANIFEST = manifest;
} ''
mkdir -p $out/bin mkdir -p $out/bin
echo "$testScript" > $out/test-script echo "$testScript" > $out/test-script
echo "$baseSetup" > $out/base-setup 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/ ln -s ${testDriver}/bin/genode-test-driver $out/bin/
wrapProgram $out/bin/genode-test-driver \ wrapProgram $out/bin/genode-test-driver \
--set testScript "$testScript" \ --set testScript "$testScript" \
@ -137,16 +136,16 @@ let
in test // { in test // {
inherit driver image test manifest; inherit driver image test manifest;
config = hostPkgs.runCommand (name + ".dhall") env' '' config = hostPkgs.runCommand (name + ".dhall") testEnv' ''
${apps.dhall.program} <<< "${testConfig'}" > $out ${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''; ${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 "${testPkgs.bender}" bender
cp ${image} image.elf cp ${image} image.elf
mkdir -p $out/nix-support mkdir -p $out/nix-support

View File

@ -37,22 +37,22 @@ let
defaultScript = ''run_genode_until {[init] child "harness" exited with exit value 0} 60''; defaultScript = ''run_genode_until {[init] child "harness" exited with exit value 0} 60'';
mkTest = { name ? "unamed", testScript ? defaultScript, testConfig, testInputs ? [ ] mkTest = { name ? "unamed", testScript ? defaultScript, testConfig, testInputs ? [ ]
, env ? { }, ... # TODO: remove ... , testEnv ? { }, qemuArgs ? [], ...
}@t: }@t:
let let
testConfig' = "${./driver-nova-config.dhall} ${testConfig}"; testConfig' = "${./driver-nova-config.dhall} ${testConfig}";
manifest = lib.mergeManifests (with testPkgs; manifest = lib.mergeManifests (with testPkgs;
[ base-nova genode.os sotest-producer ] [ base-nova genode.os sotest-producer ]
++ testInputs); ++ testInputs);
env' = { testEnv' = {
DHALL_PRELUDE = "${testPkgs.dhallPrelude}/package.dhall"; DHALL_PRELUDE = "${testPkgs.dhallPrelude}/package.dhall";
DHALL_GENODE = "${testPkgs.dhallGenode}/package.dhall"; DHALL_GENODE = "${testPkgs.dhallGenode}/package.dhall";
DHALL_WRAP_HARNESS = ./sotest-wrapper.dhall; DHALL_WRAP_HARNESS = ./sotest-wrapper.dhall;
MANIFEST = manifest; MANIFEST = manifest;
XDG_CACHE_HOME = "/tmp"; XDG_CACHE_HOME = "/tmp";
} // env; } // testEnv;
image = apps.nova-image.function env' testConfig'; image = apps.nova-image.function testEnv' testConfig';
baseSetup = '' baseSetup = ''
## ##
@ -93,12 +93,13 @@ let
global env global env
global spawn_id 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 \ spawn ${hostPkgs.qemu_test}/bin/qemu-system-x86_64 \
-machine q35 -serial mon:stdio -nographic \ -machine q35 -serial mon:stdio -nographic \
-m size=$TEST_MIB \ -m size=$TEST_MIB \
-kernel "${testPkgs.bender}" \ -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 wait_for_output $wait_for_re $timeout_value $spawn_id
} }
@ -108,19 +109,17 @@ let
''; '';
driver = with hostPkgs; driver = with hostPkgs;
buildPackages.runCommand "genode-test-driver-${name}" { buildPackages.runCommand "genode-test-driver-${name}" ({
buildInputs = [ makeWrapper expect ]; buildInputs = [ makeWrapper expect ];
inherit baseSetup testScript; inherit baseSetup testScript;
preferLocalBuild = true; preferLocalBuild = true;
testName = name; testName = name;
DHALL_GENODE = "${testPkgs.dhallGenode}/package.dhall"; } // testEnv') ''
DHALL_WRAP_HARNESS = ./sotest-wrapper.dhall;
MANIFEST = manifest;
} ''
mkdir -p $out/bin mkdir -p $out/bin
echo "$testScript" > $out/test-script echo "$testScript" > $out/test-script
echo "$baseSetup" > $out/base-setup 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/ ln -s ${testDriver}/bin/genode-test-driver $out/bin/
wrapProgram $out/bin/genode-test-driver \ wrapProgram $out/bin/genode-test-driver \
--set testScript "$testScript" \ --set testScript "$testScript" \
@ -137,17 +136,17 @@ let
in test // { in test // {
inherit driver image test manifest; inherit driver image test manifest;
config = hostPkgs.runCommand (name + ".dhall") env' '' config = hostPkgs.runCommand (name + ".dhall") testEnv' ''
export XDG_CACHE_HOME=''${TMPDIR:-/tmp} export XDG_CACHE_HOME=''${TMPDIR:-/tmp}
${apps.dhall.program} <<< "${testConfig'}" > $out ${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''; ${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.bender}" bender
cp "${testPkgs.NOVA}/hypervisor-x86_64" hypervisor cp "${testPkgs.NOVA}/hypervisor-x86_64" hypervisor
cp ${image} image.elf cp ${image} image.elf