2020-12-25 13:55:36 +00:00
|
|
|
import ./make-test-python.nix ({ lib, pkgs, ... }:
|
|
|
|
let inherit (import ./ssh-keys.nix pkgs) snakeOilPrivateKey snakeOilPublicKey;
|
|
|
|
in {
|
|
|
|
name = "locate";
|
2021-01-15 22:18:51 +00:00
|
|
|
meta.maintainers = with pkgs.lib.maintainers; [ chkno ];
|
2020-12-25 13:55:36 +00:00
|
|
|
|
|
|
|
nodes = rec {
|
|
|
|
a = {
|
|
|
|
environment.systemPackages = with pkgs; [ sshfs ];
|
|
|
|
fileSystems = lib.mkVMOverride {
|
|
|
|
"/ssh" = {
|
|
|
|
device = "alice@b:/";
|
|
|
|
fsType = "fuse.sshfs";
|
|
|
|
options = [
|
|
|
|
"allow_other"
|
|
|
|
"IdentityFile=/privkey"
|
|
|
|
"noauto"
|
|
|
|
"StrictHostKeyChecking=no"
|
|
|
|
"UserKnownHostsFile=/dev/null"
|
|
|
|
];
|
|
|
|
};
|
|
|
|
};
|
|
|
|
services.locate = {
|
|
|
|
enable = true;
|
|
|
|
interval = "*:*:0/5";
|
|
|
|
};
|
|
|
|
};
|
|
|
|
b = {
|
|
|
|
services.openssh.enable = true;
|
|
|
|
users.users.alice = {
|
|
|
|
isNormalUser = true;
|
|
|
|
openssh.authorizedKeys.keys = [ snakeOilPublicKey ];
|
|
|
|
};
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
testScript = ''
|
|
|
|
start_all()
|
|
|
|
|
|
|
|
# Set up sshfs mount
|
|
|
|
a.succeed(
|
|
|
|
"(umask 077; cat ${snakeOilPrivateKey} > /privkey)"
|
|
|
|
)
|
|
|
|
b.succeed("touch /file-on-b-machine")
|
|
|
|
b.wait_for_open_port(22)
|
|
|
|
a.succeed("mkdir /ssh")
|
|
|
|
a.succeed("mount /ssh")
|
|
|
|
|
|
|
|
# Core locatedb functionality
|
|
|
|
a.succeed("touch /file-on-a-machine-1")
|
|
|
|
a.wait_for_file("/var/cache/locatedb")
|
|
|
|
a.wait_until_succeeds("locate file-on-a-machine-1")
|
|
|
|
|
|
|
|
# Wait for a second update to make sure we're using a locatedb from a run
|
|
|
|
# that began after the sshfs mount
|
|
|
|
a.succeed("touch /file-on-a-machine-2")
|
|
|
|
a.wait_until_succeeds("locate file-on-a-machine-2")
|
|
|
|
|
|
|
|
# We shouldn't be able to see files on the other machine
|
|
|
|
a.fail("locate file-on-b-machine")
|
|
|
|
'';
|
|
|
|
})
|