annotate js_fetch_https.t @ 1842:af47a0b348a5

Tests: LibreSSL certificate negotiation with TLSv1.3. LibreSSL fails to negotiate certificates based on signature algorithms when using TLSv1.3, and fails with "missing rsa certificate" and "unknown pkey type" errors.
author Maxim Dounin <mdounin@mdounin.ru>
date Thu, 23 Mar 2023 19:50:17 +0300
parents 520fb74cce4c
children
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
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 ###############################################################################