{ pkgs, ... }: { name = "service-dyndns"; clan = { directory = ./.; inventory = { machines.server = { }; instances = { dyndns-test = { module.name = "@clan/dyndns"; module.input = "self"; roles.default.machines."server".settings = { server = { enable = true; domain = "test.example.com"; port = 54805; acmeEmail = "test@example.com"; }; period = 1; settings = { "test.example.com" = { provider = "namecheap"; domain = "example.com"; secret_field_name = "password"; extraSettings = { host = "test"; server = "dynamicdns.park-your-domain.com"; }; }; }; }; }; }; }; }; nodes = { server = { # Disable firewall for testing networking.firewall.enable = false; # Mock ACME for testing (avoid real certificate requests) security.acme.defaults.server = "https://localhost:14000/dir"; }; }; testScript = '' start_all() # Test that dyndns service starts (will fail without secrets, but that's expected) server.wait_for_unit("multi-user.target") # Test that nginx service is running server.wait_for_unit("nginx.service") # Test that nginx is listening on expected ports server.wait_for_open_port(80) server.wait_for_open_port(443) # Test that the dyndns user was created # server.succeed("getent passwd dyndns") # server.succeed("getent group dyndns") # # Test that the home directory was created server.succeed("test -d /var/lib/dyndns") # Test that nginx configuration includes our domain server.succeed("${pkgs.nginx}/bin/nginx -t") print("All tests passed!") ''; }