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