Mercurial > hg > nginx-tests
annotate js_fetch_verify.t @ 1801:f129b693d83e
Tests: skip proxy_protocol2_tlv.t for nginx stable.
It fails with the nginx 1.22.1 due to lack of support $proxy_protocol_tlv_*
variables.
author | Eugene Grebenschikov <e.grebenshchikov@f5.com> |
---|---|
date | Wed, 26 Oct 2022 13:29:19 -0700 |
parents | ae8e68cb2231 |
children |
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 ############################################################################### |