diff --git a/overlay/default.nix b/overlay/default.nix index a14f8a0..43e6a8c 100644 --- a/overlay/default.nix +++ b/overlay/default.nix @@ -89,6 +89,8 @@ in { "rm $out/bin/c_rehash"; # eliminate the perl runtime dependency }); + rsync = prev.rsync.override { enableACLs = false; }; + solo5-tools = callPackage ./solo5-tools { }; tup = prev.tup.overrideAttrs (attrs: { setupHook = ./tup/setup-hook.sh; }); diff --git a/tests/default.nix b/tests/default.nix index 1a49ee8..75464a4 100644 --- a/tests/default.nix +++ b/tests/default.nix @@ -8,9 +8,14 @@ let inherit nixpkgs localPackages legacyPackages; }; - testFiles = - map callTest [ ./log.nix ./posix.nix ./vmm_arm.nix ./vmm_x86.nix ./x86.nix ] - ++ (callTest ./solo5); + testFiles = map callTest [ + ./log.nix + ./posix.nix + ./rsync.nix + ./vmm_arm.nix + ./vmm_x86.nix + ./x86.nix + ] ++ (callTest ./solo5); testPkgs = genodepkgs; diff --git a/tests/rsync.dhall b/tests/rsync.dhall new file mode 100644 index 0000000..afa7373 --- /dev/null +++ b/tests/rsync.dhall @@ -0,0 +1,121 @@ +let Test = ./test.dhall ? env:DHALL_GENODE_TEST + +let Genode = Test.Genode + +let Prelude = Genode.Prelude + +let XML = Prelude.XML + +let Init = Genode.Init + +let Child = Init.Child + +in λ(params : { bash : Text, coreutils : Text, script : Text }) → + let init = + Init::{ + , verbose = True + , routes = + [ Init.ServiceRoute.parent "Timer" + , Init.ServiceRoute.parent "Rtc" + ] + , children = toMap + { vfs = + Child.flat + Child.Attributes::{ + , binary = "vfs" + , config = Init.Config::{ + , content = + [ Prelude.XML.text + '' + + + + + + + + '' + ] + , defaultPolicy = Some Init.Config.DefaultPolicy::{ + , attributes = toMap { root = "/", writeable = "yes" } + } + } + , provides = [ "File_system" ] + , resources = Genode.Init.Resources::{ + , caps = 256 + , ram = Genode.units.MiB 8 + } + , routes = + Prelude.List.map + Text + Init.ServiceRoute.Type + Init.ServiceRoute.parent + [ "File_system", "Rtc" ] + } + , store_rom = + Child.flat + Child.Attributes::{ + , binary = "cached_fs_rom" + , provides = [ "ROM" ] + , resources = Init.Resources::{ + , caps = 256 + , ram = Genode.units.MiB 4 + } + , routes = + [ Init.ServiceRoute.parentLabel + "File_system" + (None Text) + (Some "nix") + ] + } + , shell = + Child.flat + Child.Attributes::{ + , binary = "bash" + , config = Genode.Init.Config::{ + , content = + [ Prelude.XML.text + '' + + + '' + ] + # Prelude.List.map + Text + XML.Type + ( λ(x : Text) → + XML.leaf + { name = "arg" + , attributes = toMap { value = x } + } + ) + [ "bash", params.script ] + } + , exitPropagate = True + , resources = Genode.Init.Resources::{ + , caps = 1024 + , ram = Genode.units.MiB 32 + } + , routes = + [ Init.ServiceRoute.child "File_system" "vfs" + , { service = + { name = "ROM" + , label = + Init.LabelSelector.Type.Partial + { prefix = Some "/nix/store/" + , suffix = None Text + } + } + , route = + Init.Route.Type.Child + { name = "store_rom" + , label = None Text + , diag = None Bool + } + } + ] + } + } + } + + in Test::{ children = Test.initToChildren init } diff --git a/tests/rsync.nix b/tests/rsync.nix new file mode 100644 index 0000000..3f69fd1 --- /dev/null +++ b/tests/rsync.nix @@ -0,0 +1,30 @@ +{ pkgs, legacyPackages, ... }: +with pkgs; + +let + inherit (legacyPackages) bash coreutils; + script = with legacyPackages; + writeTextFile { + name = "rsync.sh"; + text = '' + export PATH=${ + lib.makeSearchPathOutput "bin" "bin" + (with legacyPackages; [ bash coreutils rsync ]) + } + set -v + rsync --version + rsync -r /nix + ''; + }; +in rec { + name = "rsync"; + machine = { + config = '' + ${ + ./rsync.dhall + } { bash = \"${bash}\", coreutils = \"${coreutils}\", script = \"${script}\" }''; + inputs = map pkgs.genodeSources.depot [ "libc" "posix" "vfs_pipe" "vfs" ] + ++ [ bash ]; + extraPaths = [ script ] ++ (with legacyPackages; [ coreutils rsync ]); + }; +}