{ nixos-lib, pkgsUnstable, nixpkgs-unstable, vhackPackages, pkgs, extraModules, nixLib, ... }: nixos-lib.runTest { hostPkgs = pkgs; # the Nixpkgs package set used outside the VMs name = "sharkey"; node = { specialArgs = {inherit pkgsUnstable extraModules vhackPackages nixpkgs-unstable nixLib;}; # Use the nixpkgs as constructed by the `nixpkgs.*` options pkgs = null; }; nodes = { acme = {...}: { imports = [ ../../../common/acme/server.nix ../../../common/dns/client.nix ]; }; name_server = {nodes, ...}: { imports = extraModules ++ [ ../../../common/acme/client.nix ../../../common/dns/server.nix ]; vhack.dns.zones = { "sharkey.server" = { SOA = { nameServer = "ns"; adminEmail = "admin@server.com"; serial = 2025012301; }; useOrigin = false; A = [ nodes.server.networking.primaryIPAddress ]; AAAA = [ nodes.server.networking.primaryIPv6Address ]; }; }; }; server = {config, ...}: { imports = extraModules ++ [ ../../../../modules ../../../common/acme/client.nix ../../../common/dns/client.nix ]; vhack = { persist.enable = true; nginx.enable = true; sharkey = { enable = true; fqdn = "sharkey.server"; }; }; }; client = {...}: { imports = [ ../../../common/acme/client.nix ../../../common/dns/client.nix ]; }; }; testScript = {nodes, ...}: let acme_scripts = import ../../../common/acme/scripts.nix {inherit pkgs;}; in /* python */ '' # Start dependencies for the other services acme.start() acme.wait_for_unit("pebble.service") name_server.start() name_server.wait_for_unit("nsd.service") # Start the actual testing machines start_all() with subtest("Add pebble ca key to all services"): for node in [name_server, server, client]: node.wait_for_unit("network-online.target") node.succeed("${acme_scripts.add_pebble_acme_ca}") server.wait_for_unit("sharkey.service") with subtest("All services running"): import json def all_services_running(host): (status, output) = host.systemctl("list-units --state=failed --plain --no-pager --output=json") host_failed = json.loads(output) assert len(host_failed) == 0, f"Expected zero failing services, but found: {json.dumps(host_failed, indent=4)}" all_services_running(server) client.wait_until_succeeds("curl --silent https://sharkey.server | grep 'Thank you for using Sharkey!'") ''; }