70 lines
1.8 KiB
Nix
70 lines
1.8 KiB
Nix
|
import ./make-test-python.nix (
|
||
|
{ pkgs, lib, ... }:
|
||
|
|
||
|
{
|
||
|
name = "swapspace";
|
||
|
|
||
|
meta = with pkgs.lib.maintainers; {
|
||
|
maintainers = [
|
||
|
Luflosi
|
||
|
phanirithvij
|
||
|
];
|
||
|
};
|
||
|
|
||
|
nodes.machine = {
|
||
|
virtualisation.memorySize = 512;
|
||
|
|
||
|
services.swapspace = {
|
||
|
enable = true;
|
||
|
extraArgs = [ "-v" ];
|
||
|
settings = {
|
||
|
# test outside /var/lib/swapspace
|
||
|
swappath = "/swamp";
|
||
|
cooldown = 1;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
swapDevices = lib.mkOverride 0 [
|
||
|
{
|
||
|
size = 127;
|
||
|
device = "/root/swapfile";
|
||
|
}
|
||
|
];
|
||
|
boot.kernel.sysctl."vm.swappiness" = 60;
|
||
|
};
|
||
|
|
||
|
testScript = ''
|
||
|
machine.wait_for_unit("multi-user.target")
|
||
|
machine.wait_for_unit("swapspace.service")
|
||
|
machine.wait_for_unit("root-swapfile.swap")
|
||
|
|
||
|
swamp = False
|
||
|
with subtest("swapspace works"):
|
||
|
machine.execute("mkdir /root/memfs")
|
||
|
machine.execute("mount -o size=2G -t tmpfs none /root/memfs")
|
||
|
i = 0
|
||
|
while i < 14:
|
||
|
print(machine.succeed("free -h"))
|
||
|
out = machine.succeed("sh -c 'swapon --show --noheadings --raw --bytes | grep /root/swapfile'")
|
||
|
row = out.split(' ')
|
||
|
# leave 1MB free to not get killed by oom
|
||
|
freebytes=int(row[2]) - int(row[3]) - 1*1024*1024
|
||
|
machine.succeed(f"dd if=/dev/random of=/root/memfs/{i} bs={freebytes} count=1")
|
||
|
machine.sleep(1)
|
||
|
out = machine.succeed("swapon --show")
|
||
|
print(out)
|
||
|
swamp = "/swamp" in out
|
||
|
if not swamp:
|
||
|
i += 1
|
||
|
else:
|
||
|
print("*"*10, "SWAPED", "*"*10)
|
||
|
machine.succeed("rm -f /root/memfs/*")
|
||
|
break
|
||
|
|
||
|
print(machine.succeed("swapspace -e -s /swamp"))
|
||
|
assert "/swamp" not in machine.execute("swapon --show")
|
||
|
assert swamp
|
||
|
'';
|
||
|
}
|
||
|
)
|