vuls: init at 0.27.0
[NixPkgs.git] / nixos / tests / systemd-sysupdate.nix
blob6592764c9ff461c7866698a40b6720ac8383257a
1 # Tests downloading a signed update aritfact from a server to a target machine.
2 # This test does not rely on the `systemd.timer` units provided by the
3 # `systemd-sysupdate` module but triggers the `systemd-sysupdate` service
4 # manually to make the test more robust.
6 { lib, pkgs, ... }:
8 let
9   gpgKeyring = import ./common/gpg-keyring.nix { inherit pkgs; };
12   name = "systemd-sysupdate";
14   meta.maintainers = with lib.maintainers; [ nikstur ];
16   nodes = {
17     server = { pkgs, ... }: {
18       networking.firewall.enable = false;
19       services.nginx = {
20         enable = true;
21         virtualHosts."server" = {
22           root = pkgs.runCommand "sysupdate-artifacts" { buildInputs = [ pkgs.gnupg ]; } ''
23             mkdir -p $out
24             cd $out
26             echo "nixos" > nixos_1.txt
27             sha256sum nixos_1.txt > SHA256SUMS
29             export GNUPGHOME="$(mktemp -d)"
30             cp -R ${gpgKeyring}/* $GNUPGHOME
32             gpg --batch --sign --detach-sign --output SHA256SUMS.gpg SHA256SUMS
33           '';
34         };
35       };
36     };
38     target = {
39       systemd.sysupdate = {
40         enable = true;
41         transfers = {
42           "text-file" = {
43             Source = {
44               Type = "url-file";
45               Path = "http://server/";
46               MatchPattern = "nixos_@v.txt";
47             };
48             Target = {
49               Path = "/";
50               MatchPattern = [ "nixos_@v.txt" ];
51             };
52           };
53         };
54       };
56       environment.etc."systemd/import-pubring.gpg".source = "${gpgKeyring}/pubkey.gpg";
57     };
58   };
60   testScript = ''
61     server.wait_for_unit("nginx.service")
63     target.succeed("systemctl start systemd-sysupdate")
64     assert "nixos" in target.wait_until_succeeds("cat /nixos_1.txt", timeout=5)
65   '';