1{ pkgs, ... }:
2let
3 key = pkgs.runCommand "key" { } "${pkgs.openssl}/bin/openssl rand 32 > $out";
4in
5{
6 name = "spiped";
7 meta = with pkgs.lib.maintainers; {
8 maintainers = [ ];
9 };
10
11 nodes = {
12 server =
13 { pkgs, lib, ... }:
14 {
15 services.caddy = {
16 enable = true;
17 settings = {
18 apps.http.servers.default = {
19 listen = [ ":80" ];
20 routes = [
21 {
22 handle = [
23 {
24 body = "hello world";
25 handler = "static_response";
26 status_code = 200;
27 }
28 ];
29 }
30 ];
31 };
32 };
33 };
34
35 systemd.services."spiped@server" = {
36 wantedBy = [ "multi-user.target" ];
37 overrideStrategy = "asDropin";
38 };
39 systemd.services."spiped@client" = {
40 wantedBy = [ "multi-user.target" ];
41 overrideStrategy = "asDropin";
42 };
43 services.spiped = {
44 enable = true;
45 config = {
46 server = {
47 source = "localhost:8080";
48 target = "localhost:80";
49 keyfile = key;
50 decrypt = true;
51 };
52 client = {
53 source = "localhost:8081";
54 target = "localhost:8080";
55 keyfile = key;
56 encrypt = true;
57 };
58 };
59 };
60 };
61 };
62
63 testScript =
64 { nodes, ... }:
65 ''
66 server.wait_for_unit("caddy")
67 server.wait_for_open_port(80)
68 server.wait_for_open_port(8080)
69 server.wait_for_open_port(8081)
70
71 server.succeed("curl http://localhost:8081 | grep hello")
72 '';
73}