Mercurial > hg > nginx-tests
annotate js_fetch_https.t @ 1829:a78c32419f02
Tests: separate SSL session reuse tests.
Instead of being mixed with generic SSL tests, session reuse variants
are now tested in a separate file.
In the generic SSL tests only basic session reuse is now tested,
notably with session tickets enabled and a shared SSL session cache.
This should make it possible to reuse sessions in all cases (except
when it's not supported, such as with LibreSSL with TLSv1.3).
Note that session reuse with tickets implies that $ssl_session_id
is selected by the client and therefore is not available on the
initial connection. Relevant test is modified to handle this.
Further, BoringSSL does not use legacy session ID with TLSv1.3 even
if it is sent by the client. In contrast, OpenSSL always generates
an unique legacy session id, so it is available with TLSv1.3 even if
session resumption does not work (such as with old Net::SSLeay and
IO::Socket::SSL modules).
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Thu, 23 Mar 2023 19:49:47 +0300 |
parents | 520fb74cce4c |
children |
rev | line source |
---|---|
1736
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
1 #!/usr/bin/perl |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
2 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
3 # (C) Antoine Bonavita |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
4 # (C) Nginx, Inc. |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
5 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
6 # Tests for http njs module, fetch method, https support. |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
7 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
8 ############################################################################### |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
9 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
10 use warnings; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
11 use strict; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
12 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
13 use Test::More; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
14 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
15 BEGIN { use FindBin; chdir($FindBin::Bin); } |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
16 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
17 use lib 'lib'; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
18 use Test::Nginx; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
19 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
20 ############################################################################### |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
21 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
22 select STDERR; $| = 1; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
23 select STDOUT; $| = 1; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
24 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
25 my $t = Test::Nginx->new()->has(qw/http http_ssl rewrite/) |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
26 ->write_file_expand('nginx.conf', <<'EOF'); |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
27 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
28 %%TEST_GLOBALS%% |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
29 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
30 daemon off; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
31 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
32 events { |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
33 } |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
34 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
35 http { |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
36 %%TEST_GLOBALS_HTTP%% |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
37 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
38 js_import test.js; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
39 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
40 server { |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
41 listen 127.0.0.1:8080; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
42 server_name localhost; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
43 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
44 resolver 127.0.0.1:%%PORT_8981_UDP%%; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
45 resolver_timeout 1s; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
46 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
47 location /njs { |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
48 js_content test.njs; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
49 } |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
50 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
51 location /https { |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
52 js_content test.https; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
53 } |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
54 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
55 location /https.myca { |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
56 js_content test.https; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
57 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
58 js_fetch_ciphers HIGH:!aNull:!MD5; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
59 js_fetch_protocols TLSv1.1 TLSv1.2; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
60 js_fetch_trusted_certificate myca.crt; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
61 } |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
62 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
63 location /https.myca.short { |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
64 js_content test.https; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
65 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
66 js_fetch_verify_depth 0; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
67 js_fetch_trusted_certificate myca.crt; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
68 } |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
69 } |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
70 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
71 server { |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
72 listen 127.0.0.1:8081 ssl default; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
73 server_name default.example.com; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
74 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
75 ssl_certificate default.example.com.chained.crt; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
76 ssl_certificate_key default.example.com.key; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
77 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
78 location /loc { |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
79 return 200 "You are at default.example.com."; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
80 } |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
81 } |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
82 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
83 server { |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
84 listen 127.0.0.1:8081 ssl; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
85 server_name 1.example.com; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
86 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
87 ssl_certificate 1.example.com.chained.crt; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
88 ssl_certificate_key 1.example.com.key; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
89 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
90 location /loc { |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
91 return 200 "You are at 1.example.com."; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
92 } |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
93 } |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
94 } |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
95 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
96 EOF |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
97 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
98 my $p1 = port(8081); |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
99 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
100 $t->write_file('test.js', <<EOF); |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
101 function test_njs(r) { |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
102 r.return(200, njs.version); |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
103 } |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
104 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
105 function https(r) { |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
106 var url = `https://\${r.args.domain}:$p1/loc`; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
107 var opt = {}; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
108 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
109 if (r.args.verify != null && r.args.verify == "false") { |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
110 opt.verify = false; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
111 } |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
112 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
113 ngx.fetch(url, opt) |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
114 .then(reply => reply.text()) |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
115 .then(body => r.return(200, body)) |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
116 .catch(e => r.return(501, e.message)) |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
117 } |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
118 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
119 export default {njs: test_njs, https}; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
120 EOF |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
121 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
122 my $d = $t->testdir(); |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
123 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
124 $t->write_file('openssl.conf', <<EOF); |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
125 [ req ] |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
126 default_bits = 2048 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
127 encrypt_key = no |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
128 distinguished_name = req_distinguished_name |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
129 [ req_distinguished_name ] |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
130 EOF |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
131 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
132 $t->write_file('myca.conf', <<EOF); |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
133 [ ca ] |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
134 default_ca = myca |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
135 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
136 [ myca ] |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
137 new_certs_dir = $d |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
138 database = $d/certindex |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
139 default_md = sha256 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
140 policy = myca_policy |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
141 serial = $d/certserial |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
142 default_days = 1 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
143 x509_extensions = myca_extensions |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
144 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
145 [ myca_policy ] |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
146 commonName = supplied |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
147 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
148 [ myca_extensions ] |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
149 basicConstraints = critical,CA:TRUE |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
150 EOF |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
151 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
152 system('openssl req -x509 -new ' |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
153 . "-config $d/openssl.conf -subj /CN=myca/ " |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
154 . "-out $d/myca.crt -keyout $d/myca.key " |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
155 . ">>$d/openssl.out 2>&1") == 0 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
156 or die "Can't create self-signed certificate for CA: $!\n"; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
157 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
158 foreach my $name ('intermediate', 'default.example.com', '1.example.com') { |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
159 system("openssl req -new " |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
160 . "-config $d/openssl.conf -subj /CN=$name/ " |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
161 . "-out $d/$name.csr -keyout $d/$name.key " |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
162 . ">>$d/openssl.out 2>&1") == 0 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
163 or die "Can't create certificate signing req for $name: $!\n"; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
164 } |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
165 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
166 $t->write_file('certserial', '1000'); |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
167 $t->write_file('certindex', ''); |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
168 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
169 system("openssl ca -batch -config $d/myca.conf " |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
170 . "-keyfile $d/myca.key -cert $d/myca.crt " |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
171 . "-subj /CN=intermediate/ -in $d/intermediate.csr " |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
172 . "-out $d/intermediate.crt " |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
173 . ">>$d/openssl.out 2>&1") == 0 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
174 or die "Can't sign certificate for intermediate: $!\n"; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
175 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
176 foreach my $name ('default.example.com', '1.example.com') { |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
177 system("openssl ca -batch -config $d/myca.conf " |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
178 . "-keyfile $d/intermediate.key -cert $d/intermediate.crt " |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
179 . "-subj /CN=$name/ -in $d/$name.csr -out $d/$name.crt " |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
180 . ">>$d/openssl.out 2>&1") == 0 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
181 or die "Can't sign certificate for $name $!\n"; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
182 $t->write_file("$name.chained.crt", $t->read_file("$name.crt") |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
183 . $t->read_file('intermediate.crt')); |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
184 } |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
185 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
186 $t->try_run('no njs.fetch')->plan(7); |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
187 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
188 $t->run_daemon(\&dns_daemon, port(8981), $t); |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
189 $t->waitforfile($t->testdir . '/' . port(8981)); |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
190 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
191 ############################################################################### |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
192 |
1811
520fb74cce4c
Tests: improved njs version check to account multi digit versions.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
1736
diff
changeset
|
193 local $TODO = 'not yet' unless has_version('0.7.0'); |
1736
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
194 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
195 like(http_get('/https?domain=default.example.com&verify=false'), |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
196 qr/You are at default.example.com.$/s, 'fetch https'); |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
197 like(http_get('/https?domain=127.0.0.1&verify=false'), |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
198 qr/You are at default.example.com.$/s, 'fetch https by IP'); |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
199 like(http_get('/https?domain=1.example.com&verify=false'), |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
200 qr/You are at 1.example.com.$/s, 'fetch tls extension'); |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
201 like(http_get('/https.myca?domain=default.example.com'), |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
202 qr/You are at default.example.com.$/s, 'fetch https trusted certificate'); |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
203 like(http_get('/https.myca?domain=localhost'), |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
204 qr/connect failed/s, 'fetch https wrong CN certificate'); |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
205 like(http_get('/https?domain=default.example.com'), |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
206 qr/connect failed/s, 'fetch https non trusted CA'); |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
207 like(http_get('/https.myca.short?domain=default.example.com'), |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
208 qr/connect failed/s, 'fetch https CA too far'); |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
209 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
210 ############################################################################### |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
211 |
1811
520fb74cce4c
Tests: improved njs version check to account multi digit versions.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
1736
diff
changeset
|
212 sub has_version { |
520fb74cce4c
Tests: improved njs version check to account multi digit versions.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
1736
diff
changeset
|
213 my $need = shift; |
520fb74cce4c
Tests: improved njs version check to account multi digit versions.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
1736
diff
changeset
|
214 |
520fb74cce4c
Tests: improved njs version check to account multi digit versions.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
1736
diff
changeset
|
215 http_get('/njs') =~ /^([.0-9]+)$/m; |
520fb74cce4c
Tests: improved njs version check to account multi digit versions.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
1736
diff
changeset
|
216 |
520fb74cce4c
Tests: improved njs version check to account multi digit versions.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
1736
diff
changeset
|
217 my @v = split(/\./, $1); |
520fb74cce4c
Tests: improved njs version check to account multi digit versions.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
1736
diff
changeset
|
218 my ($n, $v); |
520fb74cce4c
Tests: improved njs version check to account multi digit versions.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
1736
diff
changeset
|
219 |
520fb74cce4c
Tests: improved njs version check to account multi digit versions.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
1736
diff
changeset
|
220 for $n (split(/\./, $need)) { |
520fb74cce4c
Tests: improved njs version check to account multi digit versions.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
1736
diff
changeset
|
221 $v = shift @v || 0; |
520fb74cce4c
Tests: improved njs version check to account multi digit versions.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
1736
diff
changeset
|
222 return 0 if $n > $v; |
520fb74cce4c
Tests: improved njs version check to account multi digit versions.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
1736
diff
changeset
|
223 return 1 if $v > $n; |
520fb74cce4c
Tests: improved njs version check to account multi digit versions.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
1736
diff
changeset
|
224 } |
520fb74cce4c
Tests: improved njs version check to account multi digit versions.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
1736
diff
changeset
|
225 |
520fb74cce4c
Tests: improved njs version check to account multi digit versions.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
1736
diff
changeset
|
226 return 1; |
520fb74cce4c
Tests: improved njs version check to account multi digit versions.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
1736
diff
changeset
|
227 } |
520fb74cce4c
Tests: improved njs version check to account multi digit versions.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
1736
diff
changeset
|
228 |
520fb74cce4c
Tests: improved njs version check to account multi digit versions.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
1736
diff
changeset
|
229 ############################################################################### |
520fb74cce4c
Tests: improved njs version check to account multi digit versions.
Dmitry Volyntsev <xeioex@nginx.com>
parents:
1736
diff
changeset
|
230 |
1736
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
231 sub reply_handler { |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
232 my ($recv_data, $port, %extra) = @_; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
233 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
234 my (@name, @rdata); |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
235 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
236 use constant NOERROR => 0; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
237 use constant A => 1; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
238 use constant IN => 1; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
239 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
240 # default values |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
241 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
242 my ($hdr, $rcode, $ttl) = (0x8180, NOERROR, 3600); |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
243 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
244 # decode name |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
245 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
246 my ($len, $offset) = (undef, 12); |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
247 while (1) { |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
248 $len = unpack("\@$offset C", $recv_data); |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
249 last if $len == 0; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
250 $offset++; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
251 push @name, unpack("\@$offset A$len", $recv_data); |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
252 $offset += $len; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
253 } |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
254 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
255 $offset -= 1; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
256 my ($id, $type, $class) = unpack("n x$offset n2", $recv_data); |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
257 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
258 my $name = join('.', @name); |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
259 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
260 if ($type == A) { |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
261 push @rdata, rd_addr($ttl, '127.0.0.1'); |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
262 } |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
263 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
264 $len = @name; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
265 pack("n6 (C/a*)$len x n2", $id, $hdr | $rcode, 1, scalar @rdata, |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
266 0, 0, @name, $type, $class) . join('', @rdata); |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
267 } |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
268 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
269 sub rd_addr { |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
270 my ($ttl, $addr) = @_; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
271 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
272 my $code = 'split(/\./, $addr)'; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
273 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
274 return pack 'n3N', 0xc00c, A, IN, $ttl if $addr eq ''; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
275 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
276 pack 'n3N nC4', 0xc00c, A, IN, $ttl, eval "scalar $code", eval($code); |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
277 } |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
278 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
279 sub dns_daemon { |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
280 my ($port, $t) = @_; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
281 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
282 my ($data, $recv_data); |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
283 my $socket = IO::Socket::INET->new( |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
284 LocalAddr => '127.0.0.1', |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
285 LocalPort => $port, |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
286 Proto => 'udp', |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
287 ) |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
288 or die "Can't create listening socket: $!\n"; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
289 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
290 local $SIG{PIPE} = 'IGNORE'; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
291 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
292 # signal we are ready |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
293 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
294 open my $fh, '>', $t->testdir() . '/' . $port; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
295 close $fh; |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
296 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
297 while (1) { |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
298 $socket->recv($recv_data, 65536); |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
299 $data = reply_handler($recv_data, $port); |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
300 $socket->send($data); |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
301 } |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
302 } |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
303 |
f7a8997c46c7
Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff
changeset
|
304 ############################################################################### |