1
0
Fork 0
mirror of https://github.com/nix-community/home-manager.git synced 2025-12-03 07:31:03 +01:00
home-manager/tests/integration/standalone/rclone/atomic.nix
Jess 3001400e9f rclone: move activation script to systemd service
Fixes #7577
This lets us better express activation order dependencies on secret
provisioners that run as systemd services
2025-08-21 16:02:50 -05:00

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"
'';
}