f34ce41345
GitOrigin-RevId: b73c2221a46c13557b1b3be9c2070cc42cf01eb3
71 lines
2 KiB
Nix
71 lines
2 KiB
Nix
{ lib, ... }: {
|
|
|
|
name = "qemu-vm-store";
|
|
|
|
meta.maintainers = with lib.maintainers; [ nikstur ];
|
|
|
|
nodes = {
|
|
sharedWritable = {
|
|
virtualisation.writableStore = true;
|
|
};
|
|
|
|
sharedReadOnly = {
|
|
virtualisation.writableStore = false;
|
|
};
|
|
|
|
imageWritable = {
|
|
virtualisation.useNixStoreImage = true;
|
|
virtualisation.writableStore = true;
|
|
};
|
|
|
|
imageReadOnly = {
|
|
virtualisation.useNixStoreImage = true;
|
|
virtualisation.writableStore = false;
|
|
};
|
|
|
|
fullDisk = {
|
|
virtualisation.useBootLoader = true;
|
|
};
|
|
};
|
|
|
|
testScript = ''
|
|
build_derivation = """
|
|
nix-build --option substitute false -E 'derivation {
|
|
name = "t";
|
|
builder = "/bin/sh";
|
|
args = ["-c" "echo something > $out"];
|
|
system = builtins.currentSystem;
|
|
preferLocalBuild = true;
|
|
}'
|
|
"""
|
|
|
|
start_all()
|
|
|
|
with subtest("Nix Store is writable"):
|
|
sharedWritable.succeed(build_derivation)
|
|
imageWritable.succeed(build_derivation)
|
|
fullDisk.succeed(build_derivation)
|
|
|
|
with subtest("Nix Store is read only"):
|
|
sharedReadOnly.fail(build_derivation)
|
|
imageReadOnly.fail(build_derivation)
|
|
|
|
# Checking whether the fs type is 9P is just a proxy to test whether the
|
|
# Nix Store is shared. If we switch to a different technology (e.g.
|
|
# virtiofs) for sharing, we need to adjust these tests.
|
|
|
|
with subtest("Nix store is shared from the host via 9P"):
|
|
sharedWritable.succeed("findmnt --kernel --type 9P /nix/.ro-store")
|
|
sharedReadOnly.succeed("findmnt --kernel --type 9P /nix/.ro-store")
|
|
|
|
with subtest("Nix store is not shared via 9P"):
|
|
imageWritable.fail("findmnt --kernel --type 9P /nix/.ro-store")
|
|
imageReadOnly.fail("findmnt --kernel --type 9P /nix/.ro-store")
|
|
|
|
with subtest("Nix store is not mounted separately"):
|
|
rootDevice = fullDisk.succeed("stat -c %d /")
|
|
nixStoreDevice = fullDisk.succeed("stat -c %d /nix/store")
|
|
assert rootDevice == nixStoreDevice, "Nix store is mounted separately from the root fs"
|
|
'';
|
|
|
|
}
|