summary refs log tree commit diff
path: root/nixos/tests/systemd-timesyncd.nix
blob: f38d06be1516e6b6f6371fe01a65d2db2ab8afaa (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# Regression test for systemd-timesync having moved the state directory without
# upstream providing a migration path. https://github.com/systemd/systemd/issues/12131

import ./make-test-python.nix (let
  common = { lib, ... }: {
    # override the `false` value from the qemu-vm base profile
    services.timesyncd.enable = lib.mkForce true;
  };
  mkVM = conf: { imports = [ conf common ]; };
in {
  name = "systemd-timesyncd";
  nodes = {
    current = mkVM {};
    pre1909 = mkVM ({lib, ... }: {
      # create the path that should be migrated by our activation script when
      # upgrading to a newer nixos version
      system.stateVersion = "19.03";
      systemd.tmpfiles.rules = [
        "r /var/lib/systemd/timesync -"
        "d /var/lib/systemd -"
        "d /var/lib/private/systemd/timesync -"
        "L /var/lib/systemd/timesync - - - - /var/lib/private/systemd/timesync"
        "d /var/lib/private/systemd/timesync - systemd-timesync systemd-timesync -"
      ];
    });
  };

  testScript = ''
    start_all()
    current.succeed("systemctl status systemd-timesyncd.service")
    # on a new install with a recent systemd there should not be any
    # leftovers from the dynamic user mess
    current.succeed("test -e /var/lib/systemd/timesync")
    current.succeed("test ! -L /var/lib/systemd/timesync")

    # timesyncd should be running on the upgrading system since we fixed the
    # file bits in the activation script
    pre1909.succeed("systemctl status systemd-timesyncd.service")

    # the path should be gone after the migration
    pre1909.succeed("test ! -e /var/lib/private/systemd/timesync")

    # and the new path should no longer be a symlink
    pre1909.succeed("test -e /var/lib/systemd/timesync")
    pre1909.succeed("test ! -L /var/lib/systemd/timesync")

    # after a restart things should still work and not fail in the activation
    # scripts and cause the boot to fail..
    pre1909.shutdown()
    pre1909.start()
    pre1909.succeed("systemctl status systemd-timesyncd.service")
  '';
})