1{ lib, ... }:
2{
3 name = "user-activation-scripts";
4 meta = with lib.maintainers; {
5 maintainers = [ chkno ];
6 };
7
8 nodes.machine = {
9 system.switch.enable = true;
10 system.userActivationScripts.foo = "mktemp ~/user-activation-ran.XXXXXX";
11 users.users.alice = {
12 initialPassword = "pass1";
13 isNormalUser = true;
14 };
15 systemd.user.tmpfiles.users.alice.rules = [ "r %h/file-to-remove" ];
16 };
17
18 testScript = ''
19 def verify_user_activation_run_count(n):
20 machine.succeed(
21 '[[ "$(find /home/alice/ -name user-activation-ran.\\* | wc -l)" == %s ]]' % n
22 )
23
24
25 machine.wait_for_unit("multi-user.target")
26 machine.wait_for_unit("getty@tty1.service")
27 machine.wait_until_tty_matches("1", "login: ")
28 machine.send_chars("alice\n")
29 machine.wait_until_tty_matches("1", "Password: ")
30 machine.send_chars("pass1\n")
31 machine.send_chars("touch login-ok\n")
32 machine.wait_for_file("/home/alice/login-ok")
33 verify_user_activation_run_count(1)
34
35 machine.succeed("touch /home/alice/file-to-remove")
36 machine.succeed("/run/current-system/bin/switch-to-configuration test")
37 verify_user_activation_run_count(2)
38 machine.succeed("[[ ! -f /home/alice/file-to-remove ]] || false")
39 '';
40}