1import ./make-test-python.nix ({ pkgs, lib, ... }: {
2 name = "frp";
3 meta.maintainers = with lib.maintainers; [ zaldnoay janik ];
4 nodes = {
5 frps = {
6 networking = {
7 useNetworkd = true;
8 useDHCP = false;
9 firewall.enable = false;
10 };
11
12 systemd.network.networks."01-eth1" = {
13 name = "eth1";
14 networkConfig.Address = "10.0.0.1/24";
15 };
16
17 services.frp = {
18 enable = true;
19 role = "server";
20 settings = {
21 common = {
22 bind_port = 7000;
23 vhost_http_port = 80;
24 };
25 };
26 };
27 };
28
29
30 frpc = {
31 networking = {
32 useNetworkd = true;
33 useDHCP = false;
34 };
35
36 systemd.network.networks."01-eth1" = {
37 name = "eth1";
38 networkConfig.Address = "10.0.0.2/24";
39 };
40
41 services.httpd = {
42 enable = true;
43 adminAddr = "admin@example.com";
44 virtualHosts."test-appication" =
45 let
46 testdir = pkgs.writeTextDir "web/index.php" "<?php phpinfo();";
47 in
48 {
49 documentRoot = "${testdir}/web";
50 locations."/" = {
51 index = "index.php index.html";
52 };
53 };
54 phpPackage = pkgs.php81;
55 enablePHP = true;
56 };
57
58 services.frp = {
59 enable = true;
60 role = "client";
61 settings = {
62 common = {
63 server_addr = "10.0.0.1";
64 server_port = 7000;
65 };
66 web = {
67 type = "http";
68 local_port = 80;
69 custom_domains = "10.0.0.1";
70 };
71 };
72 };
73 };
74 };
75
76 testScript = ''
77 start_all()
78 frps.wait_for_unit("frp.service")
79 frps.wait_for_open_port(80)
80 frpc.wait_for_unit("frp.service")
81 response = frpc.succeed("curl -fvvv -s http://127.0.0.1/")
82 assert "PHP Version ${pkgs.php81.version}" in response, "PHP version not detected"
83 response = frpc.succeed("curl -fvvv -s http://10.0.0.1/")
84 assert "PHP Version ${pkgs.php81.version}" in response, "PHP version not detected"
85 '';
86})