import ./make-test-python.nix ( { pkgs, lib, ... }: let successMessage = "Success 3333115147933743662"; in { name = "rathole"; meta.maintainers = with lib.maintainers; [ xokdvium ]; nodes = { server = { networking = { useNetworkd = true; useDHCP = false; firewall.enable = false; }; systemd.network.networks."01-eth1" = { name = "eth1"; networkConfig.Address = "10.0.0.1/24"; }; services.rathole = { enable = true; role = "server"; settings = { server = { bind_addr = "0.0.0.0:2333"; services = { success-message = { bind_addr = "0.0.0.0:80"; token = "hunter2"; }; }; }; }; }; }; client = { networking = { useNetworkd = true; useDHCP = false; }; systemd.network.networks."01-eth1" = { name = "eth1"; networkConfig.Address = "10.0.0.2/24"; }; services.nginx = { enable = true; virtualHosts."127.0.0.1" = { root = pkgs.writeTextDir "success-message.txt" successMessage; }; }; services.rathole = { enable = true; role = "client"; credentialsFile = pkgs.writeText "rathole-credentials.toml" '' [client.services.success-message] token = "hunter2" ''; settings = { client = { remote_addr = "10.0.0.1:2333"; services.success-message = { local_addr = "127.0.0.1:80"; }; }; }; }; }; }; testScript = '' start_all() server.wait_for_unit("rathole.service") server.wait_for_open_port(2333) client.wait_for_unit("rathole.service") server.wait_for_open_port(80) response = server.succeed("curl http://127.0.0.1/success-message.txt") assert "${successMessage}" in response, "Got invalid response" response = client.succeed("curl http://10.0.0.1/success-message.txt") assert "${successMessage}" in response, "Got invalid response" ''; } )