at 23.11-pre 2.4 kB view raw
1 2import ./make-test-python.nix ({ pkgs, ...} : { 3 name = "ferm"; 4 meta = with pkgs.lib.maintainers; { 5 maintainers = [ mic92 ]; 6 }; 7 8 nodes = 9 { client = 10 { pkgs, ... }: 11 with pkgs.lib; 12 { 13 networking = { 14 dhcpcd.enable = false; 15 interfaces.eth1.ipv6.addresses = mkOverride 0 [ { address = "fd00::2"; prefixLength = 64; } ]; 16 interfaces.eth1.ipv4.addresses = mkOverride 0 [ { address = "192.168.1.2"; prefixLength = 24; } ]; 17 }; 18 }; 19 server = 20 { pkgs, ... }: 21 with pkgs.lib; 22 { 23 networking = { 24 dhcpcd.enable = false; 25 useNetworkd = true; 26 useDHCP = false; 27 interfaces.eth1.ipv6.addresses = mkOverride 0 [ { address = "fd00::1"; prefixLength = 64; } ]; 28 interfaces.eth1.ipv4.addresses = mkOverride 0 [ { address = "192.168.1.1"; prefixLength = 24; } ]; 29 }; 30 31 services = { 32 ferm.enable = true; 33 ferm.config = '' 34 domain (ip ip6) table filter chain INPUT { 35 interface lo ACCEPT; 36 proto tcp dport 8080 REJECT reject-with tcp-reset; 37 } 38 ''; 39 nginx.enable = true; 40 nginx.httpConfig = '' 41 server { 42 listen 80; 43 listen [::]:80; 44 listen 8080; 45 listen [::]:8080; 46 47 location /status { stub_status on; } 48 } 49 ''; 50 }; 51 }; 52 }; 53 54 testScript = 55 '' 56 start_all() 57 58 client.wait_for_unit("network-online.target") 59 server.wait_for_unit("network-online.target") 60 server.wait_for_unit("ferm.service") 61 server.wait_for_unit("nginx.service") 62 server.wait_until_succeeds("ss -ntl | grep -q 80") 63 64 with subtest("port 80 is allowed"): 65 client.succeed("curl --fail -g http://192.168.1.1:80/status") 66 client.succeed("curl --fail -g http://[fd00::1]:80/status") 67 68 with subtest("port 8080 is not allowed"): 69 server.succeed("curl --fail -g http://192.168.1.1:8080/status") 70 server.succeed("curl --fail -g http://[fd00::1]:8080/status") 71 72 client.fail("curl --fail -g http://192.168.1.1:8080/status") 73 client.fail("curl --fail -g http://[fd00::1]:8080/status") 74 ''; 75})