depot/third_party/nixpkgs/nixos/tests/systemd-timesyncd.nix

67 lines
2.2 KiB
Nix

# 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.settings.systemd-timesyncd-test = {
"/var/lib/systemd/timesync".R = { };
"/var/lib/systemd/timesync".L.argument = "/var/lib/private/systemd/timesync";
"/var/lib/private/systemd/timesync".d = {
user = "systemd-timesync";
group = "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")
'';
}
)