nix/tests/nixos/nix-copy-closure.nix

81 lines
2.5 KiB
Nix
Raw Permalink Normal View History

# Test nix-copy-closure.
2011-10-11 13:58:47 +00:00
{ lib, config, nixpkgs, ... }:
2011-10-11 13:58:47 +00:00
let
pkgs = config.nodes.client.nixpkgs.pkgs;
2011-10-11 13:58:47 +00:00
pkgA = pkgs.cowsay;
pkgB = pkgs.wget;
pkgC = pkgs.hello;
pkgD = pkgs.tmux;
in {
name = "nix-copy-closure";
2011-10-11 13:58:47 +00:00
nodes =
{ client =
2019-11-05 10:12:25 +00:00
{ config, lib, pkgs, ... }:
2011-10-11 13:58:47 +00:00
{ virtualisation.writableStore = true;
2022-06-07 11:59:36 +00:00
virtualisation.additionalPaths = [ pkgA pkgD.drvPath ];
nix.settings.substituters = lib.mkForce [ ];
2011-10-11 13:58:47 +00:00
};
2011-10-11 13:58:47 +00:00
server =
{ config, pkgs, ... }:
{ services.openssh.enable = true;
virtualisation.writableStore = true;
2022-06-07 11:59:36 +00:00
virtualisation.additionalPaths = [ pkgB pkgC ];
};
2011-10-11 13:58:47 +00:00
};
testScript = { nodes }: ''
# fmt: off
import subprocess
2011-10-11 13:58:47 +00:00
start_all()
2011-10-11 13:58:47 +00:00
# Create an SSH key on the client.
subprocess.run([
"${pkgs.openssh}/bin/ssh-keygen", "-t", "ed25519", "-f", "key", "-N", ""
], capture_output=True, check=True)
2011-10-11 13:58:47 +00:00
client.succeed("mkdir -m 700 /root/.ssh")
client.copy_from_host("key", "/root/.ssh/id_ed25519")
client.succeed("chmod 600 /root/.ssh/id_ed25519")
2011-10-11 13:58:47 +00:00
# Install the SSH key on the server.
server.succeed("mkdir -m 700 /root/.ssh")
server.copy_from_host("key.pub", "/root/.ssh/authorized_keys")
server.wait_for_unit("sshd")
client.wait_for_unit("network.target")
client.succeed(f"ssh -o StrictHostKeyChecking=no {server.name} 'echo hello world'")
2014-07-09 23:50:29 +00:00
# Copy the closure of package A from the client to the server.
server.fail("nix-store --check-validity ${pkgA}")
client.succeed("nix-copy-closure --to server --gzip ${pkgA} >&2")
server.succeed("nix-store --check-validity ${pkgA}")
2011-10-11 13:58:47 +00:00
# Copy the closure of package B from the server to the client.
client.fail("nix-store --check-validity ${pkgB}")
client.succeed("nix-copy-closure --from server --gzip ${pkgB} >&2")
client.succeed("nix-store --check-validity ${pkgB}")
# Copy the closure of package C via the SSH substituter.
client.fail("nix-store -r ${pkgC}")
# Copy the derivation of package D's derivation from the client to the server.
server.fail("nix-store --check-validity ${pkgD.drvPath}")
client.succeed("nix-copy-closure --to server --gzip ${pkgD.drvPath} >&2")
server.succeed("nix-store --check-validity ${pkgD.drvPath}")
# FIXME
# client.succeed(
# "nix-store --option use-ssh-substituter true"
# " --option ssh-substituter-hosts root\@server"
# " -r ${pkgC} >&2"
# )
# client.succeed("nix-store --check-validity ${pkgC}")
'';
}