|
2 | 2 |
|
3 | 3 | let |
4 | 4 | domain = "acme.test"; |
5 | | - port = 8443; |
6 | 5 |
|
7 | 6 | hello_txt = |
8 | 7 | name: |
|
13 | 12 |
|
14 | 13 | mkH2OServer = |
15 | 14 | recommendations: |
16 | | - { pkgs, lib, ... }: |
| 15 | + { |
| 16 | + pkgs, |
| 17 | + lib, |
| 18 | + config, |
| 19 | + ... |
| 20 | + }: |
17 | 21 | { |
18 | 22 | services.h2o = { |
19 | 23 | enable = true; |
|
31 | 35 | hosts = { |
32 | 36 | "${domain}" = { |
33 | 37 | tls = { |
34 | | - inherit port recommendations; |
| 38 | + inherit recommendations; |
| 39 | + port = 8443; |
35 | 40 | policy = "force"; |
36 | 41 | identity = [ |
37 | 42 | { |
|
59 | 64 | ]; |
60 | 65 |
|
61 | 66 | networking = { |
62 | | - firewall.allowedTCPPorts = [ port ]; |
| 67 | + firewall.allowedTCPPorts = [ |
| 68 | + config.services.h2o.hosts.${domain}.tls.port |
| 69 | + ]; |
63 | 70 | extraHosts = "127.0.0.1 ${domain}"; |
64 | 71 | }; |
65 | 72 | }; |
|
78 | 85 | }; |
79 | 86 |
|
80 | 87 | testScript = |
| 88 | + { nodes, ... }: |
81 | 89 | let |
82 | | - portStr = builtins.toString port; |
| 90 | + inherit (nodes) server_modern server_intermediate server_old; |
| 91 | + modernPortStr = builtins.toString server_modern.services.h2o.hosts.${domain}.tls.port; |
| 92 | + intermediatePortStr = builtins.toString server_intermediate.services.h2o.hosts.${domain}.tls.port; |
| 93 | + oldPortStr = builtins.toString server_old.services.h2o.hosts.${domain}.tls.port; |
83 | 94 | in |
84 | 95 | # python |
85 | 96 | '' |
86 | | - curl_basic = "curl -v --tlsv1.3 --http2 'https://${domain}:${portStr}/'" |
87 | | - curl_head = "curl -v --head 'https://${domain}:${portStr}/'" |
88 | | - curl_max_tls1_2 ="curl -v --tlsv1.0 --tls-max 1.2 'https://${domain}:${portStr}/'" |
89 | | - curl_max_tls1_2_intermediate_cipher ="curl -v --tlsv1.0 --tls-max 1.2 --ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256' 'https://${domain}:${portStr}/'" |
90 | | - curl_max_tls1_2_old_cipher ="curl -v --tlsv1.0 --tls-max 1.2 --ciphers 'ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA256' 'https://${domain}:${portStr}/'" |
| 97 | + curl_basic = "curl -v --tlsv1.3 --http2 'https://${domain}:{port}/'" |
| 98 | + curl_head = "curl -v --head 'https://${domain}:{port}/'" |
| 99 | + curl_max_tls1_2 ="curl -v --tlsv1.0 --tls-max 1.2 'https://${domain}:{port}/'" |
| 100 | + curl_max_tls1_2_intermediate_cipher ="curl -v --tlsv1.0 --tls-max 1.2 --ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256' 'https://${domain}:{port}/'" |
| 101 | + curl_max_tls1_2_old_cipher ="curl -v --tlsv1.0 --tls-max 1.2 --ciphers 'ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA256' 'https://${domain}:{port}/'" |
91 | 102 |
|
92 | 103 | server_modern.wait_for_unit("h2o.service") |
93 | | - server_modern.wait_for_open_port(${portStr}) |
94 | | - modern_response = server_modern.succeed(curl_basic) |
| 104 | + server_modern.wait_for_open_port(${modernPortStr}) |
| 105 | + modern_response = server_modern.succeed(curl_basic.format(port="${modernPortStr}")) |
95 | 106 | assert "Hello, modern!" in modern_response |
96 | | - modern_head = server_modern.succeed(curl_head) |
| 107 | + modern_head = server_modern.succeed(curl_head.format(port="${modernPortStr}")) |
97 | 108 | assert "strict-transport-security" in modern_head |
98 | | - server_modern.fail(curl_max_tls1_2) |
| 109 | + server_modern.fail(curl_max_tls1_2.format(port="${modernPortStr}")) |
99 | 110 |
|
100 | 111 | server_intermediate.wait_for_unit("h2o.service") |
101 | | - server_intermediate.wait_for_open_port(${portStr}) |
102 | | - intermediate_response = server_intermediate.succeed(curl_basic) |
| 112 | + server_intermediate.wait_for_open_port(${intermediatePortStr}) |
| 113 | + intermediate_response = server_intermediate.succeed(curl_basic.format(port="${intermediatePortStr}")) |
103 | 114 | assert "Hello, intermediate!" in intermediate_response |
104 | | - intermediate_head = server_modern.succeed(curl_head) |
| 115 | + intermediate_head = server_modern.succeed(curl_head.format(port="${intermediatePortStr}")) |
105 | 116 | assert "strict-transport-security" in intermediate_head |
106 | | - server_intermediate.succeed(curl_max_tls1_2) |
107 | | - server_intermediate.succeed(curl_max_tls1_2_intermediate_cipher) |
108 | | - server_intermediate.fail(curl_max_tls1_2_old_cipher) |
| 117 | + server_intermediate.succeed(curl_max_tls1_2.format(port="${intermediatePortStr}")) |
| 118 | + server_intermediate.succeed(curl_max_tls1_2_intermediate_cipher.format(port="${intermediatePortStr}")) |
| 119 | + server_intermediate.fail(curl_max_tls1_2_old_cipher.format(port="${intermediatePortStr}")) |
109 | 120 |
|
110 | 121 | server_old.wait_for_unit("h2o.service") |
111 | | - server_old.wait_for_open_port(${portStr}) |
112 | | - old_response = server_old.succeed(curl_basic) |
| 122 | + server_old.wait_for_open_port(${oldPortStr}) |
| 123 | + old_response = server_old.succeed(curl_basic.format(port="${oldPortStr}")) |
113 | 124 | assert "Hello, old!" in old_response |
114 | | - old_head = server_modern.succeed(curl_head) |
| 125 | + old_head = server_modern.succeed(curl_head.format(port="${oldPortStr}")) |
115 | 126 | assert "strict-transport-security" in old_head |
116 | | - server_old.succeed(curl_max_tls1_2) |
117 | | - server_old.succeed(curl_max_tls1_2_intermediate_cipher) |
118 | | - server_old.succeed(curl_max_tls1_2_old_cipher) |
| 127 | + server_old.succeed(curl_max_tls1_2.format(port="${oldPortStr}")) |
| 128 | + server_old.succeed(curl_max_tls1_2_intermediate_cipher.format(port="${oldPortStr}")) |
| 129 | + server_old.succeed(curl_max_tls1_2_old_cipher.format(port="${oldPortStr}")) |
119 | 130 | ''; |
120 | 131 | } |
0 commit comments