at master 1.9 kB view raw
1{ lib, ... }: 2{ 3 name = "systemd-capsules"; 4 5 meta.maintainers = with lib.maintainers; [ fpletz ]; 6 7 nodes.machine = 8 { pkgs, ... }: 9 { 10 environment.systemPackages = [ pkgs.hello ]; 11 systemd.user.services.alice-sleep = { 12 wantedBy = [ "capsule@alice.target" ]; 13 serviceConfig = { 14 ExecStart = "${pkgs.coreutils}/bin/sleep 999"; 15 }; 16 }; 17 }; 18 19 testScript = # python 20 '' 21 machine.wait_for_unit("multi-user.target") 22 23 with subtest("capsule setup"): 24 machine.succeed("systemctl start capsule@alice.service") 25 26 with subtest("imperative user service in capsule"): 27 machine.succeed("systemd-run --capsule=alice --unit=sleeptest.service /run/current-system/sw/bin/sleep 999") 28 machine.succeed("systemctl --capsule=alice status sleeptest.service") 29 30 with subtest("declarative user service in capsule"): 31 machine.succeed("systemctl --capsule=alice status alice-sleep.service") 32 machine.succeed("systemctl --capsule=alice stop alice-sleep.service") 33 machine.fail("systemctl --capsule=alice status alice-sleep.service") 34 machine.succeed("systemctl --capsule=alice start alice-sleep.service") 35 machine.succeed("systemctl --capsule=alice status alice-sleep.service") 36 37 with subtest("interactive shell with terminal in capsule"): 38 hello_output = machine.succeed("systemd-run -t --capsule=alice /run/current-system/sw/bin/bash -i -c 'hello | tee ~/hello'") 39 assert hello_output == "Hello, world!\r\n" 40 machine.copy_from_vm("/var/lib/capsules/alice/hello") 41 42 with subtest("capsule cleanup"): 43 machine.succeed("systemctl --capsule=alice stop sleeptest.service") 44 machine.succeed("systemctl stop capsule@alice.service") 45 machine.succeed("systemctl clean --all capsule@alice.service") 46 ''; 47}