Signed-off-by: Matt Layher <mdlayher@gmail.com>main
parent
ec0dd30e0b
commit
bb22a2debc
@ -0,0 +1,66 @@ |
||||
import ./make-test-python.nix ( |
||||
{ |
||||
nodes.host = {config, pkgs, ...}: { |
||||
config = { |
||||
# Prerequisites for ZFS and tests. |
||||
boot.supportedFilesystems = [ "zfs" ]; |
||||
environment.systemPackages = [ pkgs.zrepl ]; |
||||
networking.hostId = "deadbeef"; |
||||
services.zrepl = { |
||||
enable = true; |
||||
settings = { |
||||
# Enable Prometheus output for status assertions. |
||||
global.monitoring = [{ |
||||
type = "prometheus"; |
||||
listen = ":9811"; |
||||
}]; |
||||
# Create a periodic snapshot job for an ephemeral zpool. |
||||
jobs = [{ |
||||
name = "snap_test"; |
||||
type = "snap"; |
||||
|
||||
filesystems."test" = true; |
||||
snapshotting = { |
||||
type = "periodic"; |
||||
prefix = "zrepl_"; |
||||
interval = "1s"; |
||||
}; |
||||
|
||||
pruning.keep = [{ |
||||
type = "last_n"; |
||||
count = 8; |
||||
}]; |
||||
}]; |
||||
}; |
||||
}; |
||||
}; |
||||
}; |
||||
|
||||
testScript = '' |
||||
start_all() |
||||
|
||||
with subtest("Wait for zrepl and network ready"): |
||||
host.wait_for_unit("network-online.target") |
||||
host.wait_for_unit("zrepl.service") |
||||
|
||||
with subtest("Create test zpool"): |
||||
# ZFS requires 64MiB minimum pool size. |
||||
host.succeed("fallocate -l 64MiB /root/zpool.img") |
||||
host.succeed("zpool create test /root/zpool.img") |
||||
|
||||
with subtest("Check for completed zrepl snapshot"): |
||||
# zrepl periodic snapshot job creates a snapshot with this prefix. |
||||
host.wait_until_succeeds("zfs list -t snapshot | grep -q zrepl_") |
||||
|
||||
with subtest("Verify HTTP monitoring server is configured"): |
||||
out = host.succeed("curl -f localhost:9811/metrics") |
||||
|
||||
assert ( |
||||
"zrepl_version_daemon" in out |
||||
), "zrepl version metric was not found in Prometheus output" |
||||
|
||||
assert ( |
||||
"zrepl_zfs_snapshot_duration_count{filesystem=\"test\"}" in out |
||||
), "zrepl snapshot counter for test was not found in Prometheus output" |
||||
''; |
||||
}) |
Loading…
Reference in new issue