1import ./make-test-python.nix (
2 { pkgs, lib, ... }:
3 {
4 name = "frp";
5 meta.maintainers = with lib.maintainers; [ zaldnoay ];
6 nodes = {
7 frps = {
8 networking = {
9 useNetworkd = true;
10 useDHCP = false;
11 firewall.enable = false;
12 };
13
14 systemd.network.networks."01-eth1" = {
15 name = "eth1";
16 networkConfig.Address = "10.0.0.1/24";
17 };
18
19 services.frp = {
20 enable = true;
21 role = "server";
22 settings = {
23 bindPort = 7000;
24 vhostHTTPPort = 80;
25 };
26 };
27 };
28
29 frpc = {
30 networking = {
31 useNetworkd = true;
32 useDHCP = false;
33 };
34
35 systemd.network.networks."01-eth1" = {
36 name = "eth1";
37 networkConfig.Address = "10.0.0.2/24";
38 };
39
40 services.httpd = {
41 enable = true;
42 adminAddr = "admin@example.com";
43 virtualHosts."test-appication" =
44 let
45 testdir = pkgs.writeTextDir "web/index.php" "<?php phpinfo();";
46 in
47 {
48 documentRoot = "${testdir}/web";
49 locations."/" = {
50 index = "index.php index.html";
51 };
52 };
53 phpPackage = pkgs.php81;
54 enablePHP = true;
55 };
56
57 services.frp = {
58 enable = true;
59 role = "client";
60 settings = {
61 serverAddr = "10.0.0.1";
62 serverPort = 7000;
63 proxies = [
64 {
65 name = "web";
66 type = "http";
67 localPort = 80;
68 customDomains = [ "10.0.0.1" ];
69 }
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 }
87)