at 24.11-pre 3.6 kB view raw
1{ pkgs, lib, ... }: 2let 3 test_script = pkgs.stdenv.mkDerivation rec { 4 pname = "stargazer-test-script"; 5 inherit (pkgs.stargazer) version src; 6 buildInputs = with pkgs; [ (python3.withPackages (ps: with ps; [ cryptography ])) ]; 7 dontBuild = true; 8 doCheck = false; 9 installPhase = '' 10 mkdir -p $out/bin 11 cp scripts/gemini-diagnostics $out/bin/test 12 ''; 13 }; 14 test_env = pkgs.stdenv.mkDerivation rec { 15 pname = "stargazer-test-env"; 16 inherit (pkgs.stargazer) version src; 17 buildPhase = '' 18 cc test_data/cgi-bin/loop.c -o test_data/cgi-bin/loop 19 ''; 20 doCheck = false; 21 installPhase = '' 22 mkdir -p $out 23 cp -r * $out/ 24 ''; 25 }; 26 scgi_server = pkgs.stdenv.mkDerivation rec { 27 pname = "stargazer-test-scgi-server"; 28 inherit (pkgs.stargazer) version src; 29 buildInputs = with pkgs; [ python3 ]; 30 dontConfigure = true; 31 dontBuild = true; 32 doCheck = false; 33 installPhase = '' 34 mkdir -p $out/bin 35 cp scripts/scgi-server $out/bin/scgi-server 36 ''; 37 }; 38in 39{ 40 name = "stargazer"; 41 meta = with lib.maintainers; { maintainers = [ gaykitty ]; }; 42 43 nodes = { 44 geminiserver = { pkgs, ... }: { 45 services.stargazer = { 46 enable = true; 47 connectionLogging = false; 48 requestTimeout = 1; 49 routes = [ 50 { 51 route = "localhost"; 52 root = "${test_env}/test_data/test_site"; 53 } 54 { 55 route = "localhost=/en.gmi"; 56 root = "${test_env}/test_data/test_site"; 57 lang = "en"; 58 charset = "ascii"; 59 } 60 { 61 route = "localhost~/(.*).gemini"; 62 root = "${test_env}/test_data/test_site"; 63 rewrite = "\\1.gmi"; 64 lang = "en"; 65 charset = "ascii"; 66 } 67 { 68 route = "localhost=/plain.txt"; 69 root = "${test_env}/test_data/test_site"; 70 lang = "en"; 71 charset = "ascii"; 72 cert-path = "/var/lib/gemini/certs/localhost.crt"; 73 key-path = "/var/lib/gemini/certs/localhost.key"; 74 } 75 { 76 route = "localhost:/cgi-bin"; 77 root = "${test_env}/test_data"; 78 cgi = true; 79 cgi-timeout = 5; 80 } 81 { 82 route = "localhost:/scgi"; 83 scgi = true; 84 scgi-address = "127.0.0.1:1099"; 85 } 86 { 87 route = "localhost=/root"; 88 redirect = ".."; 89 permanent = true; 90 } 91 { 92 route = "localhost=/priv.gmi"; 93 root = "${test_env}/test_data/test_site"; 94 client-cert = "${test_env}/test_data/client_cert/good.crt"; 95 } 96 { 97 route = "example.com~(.*)"; 98 redirect = "gemini://localhost"; 99 rewrite = "\\1"; 100 } 101 { 102 route = "localhost:/no-exist"; 103 root = "./does_not_exist"; 104 } 105 ]; 106 }; 107 systemd.services.scgi_server = { 108 after = [ "network.target" ]; 109 wantedBy = [ "multi-user.target" ]; 110 serviceConfig = { 111 ExecStart = "${scgi_server}/bin/scgi-server"; 112 }; 113 }; 114 }; 115 }; 116 117 testScript = { nodes, ... }: '' 118 geminiserver.wait_for_unit("scgi_server") 119 geminiserver.wait_for_open_port(1099) 120 geminiserver.wait_for_unit("stargazer") 121 geminiserver.wait_for_open_port(1965) 122 123 with subtest("stargazer test suite"): 124 response = geminiserver.succeed("sh -c 'cd ${test_env}; ${test_script}/bin/test'") 125 print(response) 126 ''; 127}