annotate js_fetch_verify.t @ 1847:a9704b9ed7a2

Tests: removed multiple server certificates from ssl_ocsp.t. Multiple server certificates are not needed to test OCSP verification of client certificates (in contrast to OCSP stapling, where server certificates are verified, and different staples should be correctly returned with different server certificates). And using multiple server certificates causes issues when testing with LibreSSL due to broken sigalgs-based server certificate selection in LibreSSL with TLSv1.3. Accordingly, the test is simplified to do not use multiple server certificates.
author Maxim Dounin <mdounin@mdounin.ru>
date Thu, 23 Mar 2023 19:50:26 +0300
parents ae8e68cb2231
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1755
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1 #!/usr/bin/perl
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
2
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
3 # (C) Sergey Kandaurov
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
4 # (C) Nginx, Inc.
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
5
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
6 # Tests for http njs module, fetch method, backend certificate verification.
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
7
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
8 ###############################################################################
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
9
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
10 use warnings;
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
11 use strict;
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
12
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
13 use Test::More;
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
14
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
15 BEGIN { use FindBin; chdir($FindBin::Bin); }
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
16
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
17 use lib 'lib';
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
18 use Test::Nginx;
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
19
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
20 ###############################################################################
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
21
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
22 select STDERR; $| = 1;
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
23 select STDOUT; $| = 1;
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
24
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
25 my $t = Test::Nginx->new()->has(qw/http http_ssl/)
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
26 ->write_file_expand('nginx.conf', <<'EOF');
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
27
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
28 %%TEST_GLOBALS%%
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
29
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
30 daemon off;
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
31
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
32 events {
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
33 }
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
34
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
35 http {
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
36 %%TEST_GLOBALS_HTTP%%
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
37
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
38 js_import test.js;
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
39
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
40 server {
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
41 listen 127.0.0.1:8080;
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
42 server_name localhost;
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
43
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
44 resolver 127.0.0.1:%%PORT_8981_UDP%%;
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
45 resolver_timeout 1s;
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
46
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
47 location /njs {
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
48 js_content test.njs;
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
49 }
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
50
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
51 location /https {
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
52 js_content test.https;
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
53 }
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
54
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
55 location /https.verify_off {
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
56 js_content test.https;
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
57 js_fetch_verify off;
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
58 }
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
59 }
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
60
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
61 server {
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
62 listen 127.0.0.1:8081 ssl;
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
63 server_name localhost;
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
64
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
65 ssl_certificate localhost.crt;
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
66 ssl_certificate_key localhost.key;
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
67 }
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
68 }
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
69
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
70 EOF
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
71
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
72 my $p1 = port(8081);
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
73
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
74 $t->write_file('test.js', <<EOF);
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
75 function test_njs(r) {
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
76 r.return(200, njs.version);
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
77 }
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
78
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
79 function https(r) {
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
80 ngx.fetch(`https://example.com:$p1/loc`)
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
81 .then(reply => reply.text())
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
82 .then(body => r.return(200, body))
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
83 .catch(e => r.return(501, e.message));
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
84 }
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
85
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
86 export default {njs: test_njs, https};
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
87 EOF
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
88
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
89 $t->write_file('openssl.conf', <<EOF);
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
90 [ req ]
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
91 default_bits = 2048
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
92 encrypt_key = no
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
93 distinguished_name = req_distinguished_name
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
94 [ req_distinguished_name ]
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
95 EOF
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
96
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
97 my $d = $t->testdir();
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
98
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
99 foreach my $name ('localhost') {
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
100 system('openssl req -x509 -new '
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
101 . "-config $d/openssl.conf -subj /CN=$name/ "
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
102 . "-out $d/$name.crt -keyout $d/$name.key "
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
103 . ">>$d/openssl.out 2>&1") == 0
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
104 or die "Can't create certificate for $name: $!\n";
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
105 }
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
106
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
107 $t->try_run('no js_fetch_verify')->plan(2);
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
108
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
109 $t->run_daemon(\&dns_daemon, port(8981), $t);
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
110 $t->waitforfile($t->testdir . '/' . port(8981));
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
111
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
112 ###############################################################################
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
113
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
114 like(http_get('/https'), qr/connect failed/, 'fetch verify error');
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
115 like(http_get('/https.verify_off'), qr/200 OK/, 'fetch verify off');
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
116
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
117 ###############################################################################
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
118
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
119 sub reply_handler {
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
120 my ($recv_data, $port, %extra) = @_;
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
121
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
122 my (@name, @rdata);
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
123
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
124 use constant NOERROR => 0;
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
125 use constant A => 1;
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
126 use constant IN => 1;
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
127
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
128 # default values
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
129
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
130 my ($hdr, $rcode, $ttl) = (0x8180, NOERROR, 3600);
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
131
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
132 # decode name
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
133
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
134 my ($len, $offset) = (undef, 12);
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
135 while (1) {
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
136 $len = unpack("\@$offset C", $recv_data);
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
137 last if $len == 0;
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
138 $offset++;
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
139 push @name, unpack("\@$offset A$len", $recv_data);
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
140 $offset += $len;
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
141 }
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
142
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
143 $offset -= 1;
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
144 my ($id, $type, $class) = unpack("n x$offset n2", $recv_data);
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
145
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
146 my $name = join('.', @name);
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
147
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
148 if ($type == A) {
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
149 push @rdata, rd_addr($ttl, '127.0.0.1');
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
150 }
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
151
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
152 $len = @name;
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
153 pack("n6 (C/a*)$len x n2", $id, $hdr | $rcode, 1, scalar @rdata,
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
154 0, 0, @name, $type, $class) . join('', @rdata);
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
155 }
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
156
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
157 sub rd_addr {
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
158 my ($ttl, $addr) = @_;
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
159
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
160 my $code = 'split(/\./, $addr)';
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
161
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
162 return pack 'n3N', 0xc00c, A, IN, $ttl if $addr eq '';
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
163
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
164 pack 'n3N nC4', 0xc00c, A, IN, $ttl, eval "scalar $code", eval($code);
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
165 }
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
166
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
167 sub dns_daemon {
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
168 my ($port, $t) = @_;
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
169
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
170 my ($data, $recv_data);
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
171 my $socket = IO::Socket::INET->new(
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
172 LocalAddr => '127.0.0.1',
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
173 LocalPort => $port,
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
174 Proto => 'udp',
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
175 )
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
176 or die "Can't create listening socket: $!\n";
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
177
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
178 local $SIG{PIPE} = 'IGNORE';
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
179
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
180 # signal we are ready
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
181
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
182 open my $fh, '>', $t->testdir() . '/' . $port;
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
183 close $fh;
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
184
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
185 while (1) {
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
186 $socket->recv($recv_data, 65536);
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
187 $data = reply_handler($recv_data, $port);
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
188 $socket->send($data);
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
189 }
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
190 }
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
191
ae8e68cb2231 Tests: added js fetch verify tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
192 ###############################################################################