diff --git a/cluster/services/storage/default.nix b/cluster/services/storage/default.nix index 412129f..afc8646 100644 --- a/cluster/services/storage/default.nix +++ b/cluster/services/storage/default.nix @@ -8,6 +8,7 @@ in imports = [ ./options.nix ./incandescence.nix + ./simulacrum/test-data.nix ]; services.storage = { diff --git a/cluster/services/storage/simulacrum/test-data.nix b/cluster/services/storage/simulacrum/test-data.nix new file mode 100644 index 0000000..c688365 --- /dev/null +++ b/cluster/services/storage/simulacrum/test-data.nix @@ -0,0 +1,8 @@ +{ config, lib, ... }: + +{ + garage = lib.mkIf config.simulacrum { + keys.testkey = {}; + buckets.testbucket.allow.testKey = [ "read" "write" ]; + }; +} diff --git a/cluster/services/storage/test.nix b/cluster/services/storage/test.nix index 2bd6d5e..a1fcf17 100644 --- a/cluster/services/storage/test.nix +++ b/cluster/services/storage/test.nix @@ -18,19 +18,6 @@ in configuration = { services.garage = { layout.initial.${firstGarageNode}.capacity = lib.mkForce 2000; - keys.testKey.allow.createBucket = true; - buckets = { - bucket1 = { - allow.testKey = [ "read" "write" ]; - quotas = { - maxObjects = 300; - maxSize = 400 * 1024 * 1024; - }; - }; - bucket2 = { - allow.testKey = [ "read" ]; - }; - }; }; system.ascensions.garage-layout.incantations = lib.mkForce (i: [ (i.runGarage '' @@ -68,10 +55,15 @@ in assert "1" in node.succeed("garage layout show | grep -w 2000 | wc -l") assert "2" in node.succeed("garage layout show | grep -w 1000 | wc -l") + consulConfig = json.loads(garage1.succeed("cat /etc/consul.json")) + addr = consulConfig["addresses"]["http"] + port = consulConfig["ports"]["http"] + setEnv = f"CONSUL_HTTP_ADDR={addr}:{port}" with subtest("should apply new layout from scratch"): for node in nodes: node.systemctl("stop garage.service") node.succeed("rm -rf /var/lib/garage-metadata") + garage1.succeed(f"{setEnv} consul kv delete --recurse services/incandescence/providers/garage") for node in nodes: node.systemctl("start garage.service") @@ -85,21 +77,28 @@ in for node in nodes: node.wait_until_succeeds("garage layout show | grep -w 2000") assert "1" in node.succeed("garage layout show | grep -w 2000 | wc -l") - assert "2" in node.succeed("garage layout show | grep -w 1000 | wc -l") + assert "${toString ((lib.length nodes.garage) - 1)}" in node.succeed("garage layout show | grep -w 1000 | wc -l") with subtest("should create specified buckets and keys"): for node in nodes: - node.wait_until_succeeds('test "$(systemctl is-active garage-apply)" != activating') - garage1.succeed("garage key list | grep testKey") - garage1.succeed("garage bucket list | grep bucket1") - garage1.succeed("garage bucket list | grep bucket2") + node.wait_for_unit("incandescence-garage.target") + garage1.succeed("garage key list | grep testkey") + garage1.succeed("garage bucket list | grep testbucket") - with subtest("should delete unspecified buckets and keys"): + with subtest("should delete unspecified keys"): garage1.succeed("garage bucket create unwantedbucket") garage1.succeed("garage key new --name unwantedkey") - garage1.succeed("systemctl restart garage-apply.service") - + garage1.succeed(f"{setEnv} consul kv put services/incandescence/providers/garage/formulae/key/unwantedkey/alive true") + garage1.succeed(f"{setEnv} consul kv put services/incandescence/providers/garage/formulae/bucket/unwantedbucket/alive true") + garage1.succeed("systemctl restart garage.service") + garage1.wait_for_unit("incandescence-garage.target") garage1.fail("garage key list | grep unwantedkey") + garage1.succeed("garage bucket list | grep unwantedbucket") + + with subtest("should delete unspecified buckets after grace period"): + garage1.succeed(f"{setEnv} consul kv put services/incandescence/providers/garage/formulae/bucket/unwantedbucket/destroyOn 1") + garage1.succeed("systemctl restart garage.service") + garage1.wait_for_unit("incandescence-garage.target") garage1.fail("garage bucket list | grep unwantedbucket") ''; }