From f78cb9477ebe6e0707b24b9934f03e16b2cea40f Mon Sep 17 00:00:00 2001 From: Emery Hemingway Date: Wed, 22 Jan 2020 12:48:10 +0100 Subject: [PATCH] Produce Sotest binaries.zip for every NOVA test --- tests/default.nix | 13 ++++---- tests/driver-nova-config.dhall | 53 ++++++++++++++++++++++++++------- tests/driver-nova.nix | 21 +++++++++++++ tests/driver-sotest-nova.nix | 54 ---------------------------------- 4 files changed, 71 insertions(+), 70 deletions(-) delete mode 100644 tests/driver-sotest-nova.nix diff --git a/tests/default.nix b/tests/default.nix index 9f37556..7e00dc1 100644 --- a/tests/default.nix +++ b/tests/default.nix @@ -25,16 +25,17 @@ let inherit apps system testPkgs hostPkgs lib depot; }).callTest; - sotest-nova = (call: ((tests call) // { pci = call ./pci.nix { }; })) - (import ./driver-sotest-nova.nix { - inherit apps system testPkgs hostPkgs lib depot; - }).callTest; - testsToList = tests: map (test: { inherit (test) name; value = test; }) (builtins.attrValues tests); + nova-sotest = map ({ name, value }: { + name = name + "-sotest"; + value = value.sotest; + }) (testsToList nova); + in with builtins; -listToAttrs (concatLists (map (testsToList) [ linux nova sotest-nova ])) +listToAttrs +((concatLists (map (testsToList) [ linux nova ])) ++ nova-sotest) diff --git a/tests/driver-nova-config.dhall b/tests/driver-nova-config.dhall index 78d036e..6753548 100644 --- a/tests/driver-nova-config.dhall +++ b/tests/driver-nova-config.dhall @@ -2,10 +2,6 @@ let Genode = env:DHALL_GENODE -let baseNova = env:BASE_NOVA_MANIFEST - -let os = env:OS_MANIFEST - let Args = { config : Genode.Init.Type, rom : Genode.Prelude.Map.Type Text Text } : Type @@ -31,13 +27,50 @@ in λ(args : Args) , provides = [ "Timer" ] } } - , { mapKey = "init", mapValue = Genode.Init.toStart args.config } + , { mapKey = "harness" + , mapValue = + let child = Genode.Init.toStart args.config + + in Genode.Init.Start::{ + , binary = "sotest-harness" + , exitPropagate = True + , resources = + { caps = child.resources.caps + 128 + , ram = child.resources.ram + Genode.units.MiB 1 + } + , config = + Some + ( Genode.Prelude.XML.element + { name = "config" + , attributes = + Genode.Prelude.XML.emptyAttributes + , content = + [ Genode.Init.Start.toXML "init" child ] + } + ) + , routes = + [ Genode.ServiceRoute.parentLabel + "LOG" + (Some "SOTEST") + (Some "platform") + ] + } + } ] } , rom = - [ { mapKey = "ld.lib.so", mapValue = baseNova.lib.ld-nova.mapValue } - , baseNova.bin.nova_timer_drv - , os.bin.init - ] - # args.rom + let baseNova = env:BASE_NOVA_MANIFEST + + let os = env:OS_MANIFEST + + let sotest = env:SOTEST_PRODUCER_MANIFEST + + in [ { mapKey = "ld.lib.so" + , mapValue = baseNova.lib.ld-nova.mapValue + } + , baseNova.bin.nova_timer_drv + , os.bin.init + , sotest.bin.sotest-harness + ] + # args.rom } diff --git a/tests/driver-nova.nix b/tests/driver-nova.nix index 27e0e52..73805d1 100644 --- a/tests/driver-nova.nix +++ b/tests/driver-nova.nix @@ -41,8 +41,10 @@ let env' = { DHALL_PRELUDE = "${testPkgs.dhallPrelude}/package.dhall"; DHALL_GENODE = "${testPkgs.dhallGenode}/package.dhall"; + BASE_MANIFEST = testPkgs.genode.base.manifest; BASE_NOVA_MANIFEST = testPkgs.genode.base-nova.manifest; OS_MANIFEST = testPkgs.genode.os.manifest; + SOTEST_PRODUCER_MANIFEST = testPkgs.sotest-producer.manifest; } // env; iso = apps.nova-iso.function env' @@ -126,15 +128,34 @@ let in test // { inherit driver iso test; + config = hostPkgs.runCommand (name + ".dhall") env' '' ${apps.dhall.program} <<< "(${ ./driver-nova-config.dhall } ${testConfig})" > $out ''; + xml = hostPkgs.runCommand (name + ".config") env' '' ${apps.render-init.program} "(${ ./driver-nova-config.dhall } ${testConfig}).config" > $out''; + + sotest = hostPkgs.runCommand "nova-${name}-sotest" env' '' + export XDG_CACHE_HOME=${TMPDIR:-/tmp} + ${apps.nova-image.program} image.elf \ + ${./driver-nova-config.dhall} ${testConfig} + cp "${testPkgs.bender}" bender + cp "${testPkgs.NOVA}/hypervisor-x86_64" hypervisor + mkdir -p $out/nix-support + ${hostPkgs.zip}/bin/zip "$out/binaries.zip" \ + bender hypervisor image.elf + ${apps.dhall-to-yaml.program} < ${ + ./sotest_config.dhall + } > "$out/sotest_config.yaml" + echo file zip $out/binaries.zip >> "$out/nix-support/hydra-build-products" + echo file config $out/sotest_config.yaml >> "$out/nix-support/hydra-build-products" + ''; + }; in { diff --git a/tests/driver-sotest-nova.nix b/tests/driver-sotest-nova.nix deleted file mode 100644 index 449aa8c..0000000 --- a/tests/driver-sotest-nova.nix +++ /dev/null @@ -1,54 +0,0 @@ -# SPDX-License-Identifier: CC0-1.0 - -{ system, apps, testPkgs, hostPkgs, lib, depot }: - -let - mkTest = { name ? "unamed", testConfig, env ? { }, ... }: - let - env' = { - DHALL_PRELUDE = "${testPkgs.dhallPrelude}/package.dhall"; - DHALL_GENODE = "${testPkgs.dhallGenode}/package.dhall"; - BASE_NOVA_MANIFEST = testPkgs.genode.base-nova.manifest; - OS_MANIFEST = testPkgs.genode.os.manifest; - SOTEST_PRODUCER_MANIFEST = testPkgs.sotest-producer.manifest; - } // env; - - drv = hostPkgs.runCommand "nova-${name}-sotest" env' '' - ${apps.nova-image.program} image.elf \ - ${./driver-nova-config.dhall} ${testConfig} - cp "${testPkgs.bender}" bender - cp "${testPkgs.NOVA}/hypervisor-x86_64" hypervisor - mkdir -p $out/nix-support - ${hostPkgs.zip}/bin/zip "$out/binaries.zip" \ - bender hypervisor image.elf - ${apps.dhall-to-yaml.program} < ${ - ./sotest_config.dhall - } > "$out/sotest_config.yaml" - echo file zip $out/binaries.zip >> "$out/nix-support/hydra-build-products" - echo file config $out/sotest_config.yaml >> "$out/nix-support/hydra-build-products" - ''; - - in drv // { - config = hostPkgs.runCommand (name + ".dhall") env' '' - ${apps.dhall.program} <<< "(${ - ./driver-nova-config.dhall - } ${testConfig})" > $out - ''; - xml = hostPkgs.runCommand (name + ".config") env' '' - ${apps.render-init.program} "(${ - ./driver-nova-config.dhall - } ${testConfig}).config" > $out''; - }; - -in { - callTest = path: args: - (import path ({ - testEnv = { - inherit mkTest lib; - isLinux = false; - isNova = true; - }; - pkgs = testPkgs; - inherit depot; - } // args)); -}