mirror of
https://github.com/nix-community/home-manager.git
synced 2025-12-03 07:31:03 +01:00
Fixes #7577 This lets us better express activation order dependencies on secret provisioners that run as systemd services
64 lines
2.4 KiB
Nix
64 lines
2.4 KiB
Nix
{ pkgs, ... }:
|
|
let
|
|
mkBrokenModule =
|
|
passPath:
|
|
pkgs.writeText "atomic-broken-module" ''
|
|
{
|
|
programs.rclone.remotes = {
|
|
alices-broken-test-remote = {
|
|
config = {
|
|
type = "smb";
|
|
host = "smb.alice.com";
|
|
user = "alice";
|
|
port = 1234;
|
|
};
|
|
secrets.pass = "${passPath}";
|
|
};
|
|
};
|
|
}
|
|
'';
|
|
|
|
moduleNoSuchFileDir = mkBrokenModule "/this/path/does/not/exist";
|
|
moduleSecretWithNewlines = mkBrokenModule (
|
|
pkgs.writeText "newline-secret" "\ra\n secret\nwith\r\nnewlines"
|
|
);
|
|
|
|
workingRemote = pkgs.writeText "atomic-working-remote" ''
|
|
[alices-working-remote]
|
|
host=backup-server
|
|
key_file=/key/path/foo
|
|
type=sftp
|
|
user=alice
|
|
'';
|
|
in
|
|
{
|
|
script = ''
|
|
# Test we dont overwrite a working config with a broken/partial one, after and error occurs.
|
|
with subtest("Writing the config is atomic through errors (no such file or directory)"):
|
|
succeed_as_alice("install -m644 ${moduleNoSuchFileDir} /home/alice/.config/home-manager/test-remote.nix")
|
|
succeed_as_alice("install -m644 -D ${workingRemote} /home/alice/.config/rclone/rclone.conf")
|
|
|
|
actual = succeed_as_alice("home-manager switch")
|
|
expected = "rclone-config.service"
|
|
assert "Starting units: " in actual and expected in actual, \
|
|
f"expected home-manager switch to contain {expected}, but got {actual}"
|
|
|
|
succeed_as_alice("diff -u ${workingRemote} /home/alice/.config/rclone/rclone.conf")
|
|
|
|
exit_status = machine.get_unit_property("rclone-config.service", "Result", "alice")
|
|
assert "success" not in exit_status, "rclone-config.service unexpectedly ran successfully"
|
|
|
|
with subtest("Writing the config is atomic through errors (secret with newlines)"):
|
|
succeed_as_alice("install -m644 ${moduleSecretWithNewlines} /home/alice/.config/home-manager/test-remote.nix")
|
|
|
|
actual = succeed_as_alice("home-manager switch")
|
|
expected = "rclone-config.service"
|
|
assert "Starting units: " in actual and expected in actual, \
|
|
f"expected home-manager switch to contain {expected}, but got {actual}"
|
|
|
|
succeed_as_alice("diff -u ${workingRemote} /home/alice/.config/rclone/rclone.conf")
|
|
|
|
exit_status = machine.get_unit_property("rclone-config.service", "Result", "alice")
|
|
assert "success" not in exit_status, "rclone-config.service unexpectedly ran successfully"
|
|
'';
|
|
}
|