Skip to content
Snippets Groups Projects
tahoe.nix 2.71 KiB
Newer Older
  • Learn to ignore specific revisions
  • { ... }: {
      nodes = {
        storage = { config, pkgs, ... }: {
          imports = [
            ../tahoe.nix
          ];
    
          services.tahoe.nodes.storage = {
    
            package = pkgs.privatestorage;
    
            sections = {
              node = {
                nickname = "storage";
                "web.port" = "tcp:4000:interface=127.0.0.1";
                "tub.port" = "tcp:4001";
                "tub.location" = "tcp:127.0.0.1:4001";
              };
              storage = {
                enabled = true;
              };
            };
          };
        };
      };
      testScript = ''
      startAll;
    
      # After the service starts, destroy the "created" marker to force it to
      # re-create its internal state.
      $storage->waitForOpenPort(4001);
      $storage->succeed("systemctl stop tahoe.storage");
      $storage->succeed("rm /var/db/tahoe-lafs/storage.created");
      $storage->succeed("systemctl start tahoe.storage");
    
      # After it starts up again, verify it has consistent internal state and a
      # backup of the prior state.
      $storage->waitForOpenPort(4001);
      $storage->succeed("[ -e /var/db/tahoe-lafs/storage ]");
      $storage->succeed("[ -e /var/db/tahoe-lafs/storage.created ]");
      $storage->succeed("[ -e /var/db/tahoe-lafs/storage.1 ]");
      $storage->succeed("[ -e /var/db/tahoe-lafs/storage.1/private/node.privkey ]");
      $storage->succeed("[ -e /var/db/tahoe-lafs/storage.1/private/node.pem ]");
      $storage->succeed("[ ! -e /var/db/tahoe-lafs/storage.2 ]");
    
      # Stop it again, once again destroy the "created" marker, and this time also
      # jam some partial state in the way that will need cleanup.
      $storage->succeed("systemctl stop tahoe.storage");
      $storage->succeed("rm /var/db/tahoe-lafs/storage.created");
      $storage->succeed("mkdir -p /var/db/tahoe-lafs/storage.atomic/partial");
      eval {
        $storage->succeed("systemctl start tahoe.storage");
        1;
      } or do {
        my ($x, $y) = $storage->execute("journalctl -u tahoe.storage");
        $storage->log($y);
        die $@;
      };
    
      # After it starts up again, verify it has consistent internal state and
      # backups of the prior two states.  It also has no copy of the inconsistent
      # state because it could never have been used.
      $storage->waitForOpenPort(4001);
      $storage->succeed("[ -e /var/db/tahoe-lafs/storage ]");
      $storage->succeed("[ -e /var/db/tahoe-lafs/storage.created ]");
      $storage->succeed("[ -e /var/db/tahoe-lafs/storage.1 ]");
      $storage->succeed("[ -e /var/db/tahoe-lafs/storage.2 ]");
      $storage->succeed("[ -e /var/db/tahoe-lafs/storage.2/private/node.privkey ]");
      $storage->succeed("[ -e /var/db/tahoe-lafs/storage.2/private/node.pem ]");
      $storage->succeed("[ ! -e /var/db/tahoe-lafs/storage.atomic ]");
      $storage->succeed("[ ! -e /var/db/tahoe-lafs/storage/partial ]");
      $storage->succeed("[ ! -e /var/db/tahoe-lafs/storage.3 ]");
      '';
    }