Mercurial > hg > nginx-tests
annotate js_fetch_https.t @ 1825:3629eda94c1b
Tests: handling of EWOULDBLOCK from sysread() with IO::Socket::SSL.
With IO::Socket::SSL, when select() reports that the socket is readable,
reading from it might still fail with EWOULDBLOCK, since no application
data is available in the socket. In particular, this might happen with
TLSv1.3 when a session ticket is received after the handshake. Fix is
to explicitly check for EWOULDBLOCK errors.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Tue, 21 Mar 2023 02:57:39 +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 ############################################################################### |