annotate js_fetch_https.t @ 1752:ba6e24e38f03

Tests: improved stop_daemons() to send signal again. As was observed, it's possible that a signal to complete a uwsgi daemon can be ignored while it is starting up, which results in tests hang due to eternal waiting on child processes termination. Notably, it is seen when running tests with a high number of prove jobs on a low-profile VM against nginx with broken modules and/or configuration. To reproduce: $ TEST_NGINX_GLOBALS=ERROR prove -j16 uwsgi*.t Inspecting uwsgi under ktrace on FreeBSD confirms that a SIGTERM signal is ignored at the very beginning of uwsgi startup. It is then replaced with a default action after listen(), thus waiting until uwsgi is ready to accept new TCP connections doesn't completely solve the hang window. The fix is to retry sending a signal some time after waitpid(WNOHANG) continuously demonstrated no progress with reaping a signaled process. It is modelled after f13ead27f89c that improved stop() for nginx.
author Sergey Kandaurov <pluknet@nginx.com>
date Wed, 29 Dec 2021 22:29:23 +0300
parents f7a8997c46c7
children 520fb74cce4c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
193 local $TODO = 'not yet'
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
194 unless http_get('/njs') =~ /^([.0-9]+)$/m && $1 ge '0.7.0';
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
195
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
196 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
197 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
198 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
199 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
200 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
201 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
202 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
203 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
204 like(http_get('/https.myca?domain=localhost'),
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
205 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
206 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
207 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
208 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
209 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
210
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
211 ###############################################################################
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
212
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
213 sub reply_handler {
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
214 my ($recv_data, $port, %extra) = @_;
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
215
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
216 my (@name, @rdata);
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
217
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
218 use constant NOERROR => 0;
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
219 use constant A => 1;
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
220 use constant IN => 1;
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
221
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
222 # default values
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
223
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
224 my ($hdr, $rcode, $ttl) = (0x8180, NOERROR, 3600);
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
225
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
226 # decode name
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
227
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
228 my ($len, $offset) = (undef, 12);
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
229 while (1) {
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
230 $len = unpack("\@$offset C", $recv_data);
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
231 last if $len == 0;
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
232 $offset++;
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
233 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
234 $offset += $len;
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
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
237 $offset -= 1;
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
238 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
239
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
240 my $name = join('.', @name);
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 if ($type == A) {
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
243 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
244 }
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 $len = @name;
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
247 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
248 0, 0, @name, $type, $class) . join('', @rdata);
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
249 }
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
250
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
251 sub rd_addr {
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
252 my ($ttl, $addr) = @_;
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 my $code = 'split(/\./, $addr)';
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
255
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
256 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
257
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
258 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
259 }
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
260
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
261 sub dns_daemon {
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
262 my ($port, $t) = @_;
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 my ($data, $recv_data);
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
265 my $socket = IO::Socket::INET->new(
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
266 LocalAddr => '127.0.0.1',
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
267 LocalPort => $port,
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
268 Proto => 'udp',
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
269 )
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
270 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
271
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
272 local $SIG{PIPE} = 'IGNORE';
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 # signal we are ready
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 open my $fh, '>', $t->testdir() . '/' . $port;
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
277 close $fh;
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 while (1) {
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
280 $socket->recv($recv_data, 65536);
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
281 $data = reply_handler($recv_data, $port);
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
282 $socket->send($data);
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
283 }
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
284 }
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
285
f7a8997c46c7 Tests: added fetch js tests, HTTPS support.
Antoine Bonavita <antoine.bonavita@gmail.com>
parents:
diff changeset
286 ###############################################################################