Mercurial > hg > nginx-tests
annotate stream_resolver.t @ 1453:6f53ec0cf591
Tests: simplified stream_proxy_ssl_verify.t using return directive.
Due to changed connection processing, it no longer triggers "phantom event"
alerts previously seen with Solaris devpoll on connections closed by client
in test cases with failed verification of the proxied server certificate.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Mon, 25 Mar 2019 19:11:11 +0300 |
parents | 766bcbb632ee |
children | f3ba4c74de31 |
rev | line source |
---|---|
988
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
1 #!/usr/bin/perl |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
2 |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
3 # (C) Sergey Kandaurov |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
4 # (C) Nginx, Inc. |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
5 |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
6 # Tests for stream upstream name resolved, proxy_next_upstream_tries. |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
7 |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
8 ############################################################################### |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
9 |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
10 use warnings; |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
11 use strict; |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
12 |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
13 use Test::More; |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
14 |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
15 BEGIN { use FindBin; chdir($FindBin::Bin); } |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
16 |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
17 use lib 'lib'; |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
18 use Test::Nginx; |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
19 use Test::Nginx::Stream qw/ stream /; |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
20 |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
21 ############################################################################### |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
22 |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
23 select STDERR; $| = 1; |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
24 select STDOUT; $| = 1; |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
25 |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
26 my $t = Test::Nginx->new()->has(qw/stream stream_map stream_return/) |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
27 ->write_file_expand('nginx.conf', <<'EOF'); |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
28 |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
29 %%TEST_GLOBALS%% |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
30 |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
31 daemon off; |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
32 |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
33 events { |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
34 } |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
35 |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
36 stream { |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
37 map $server_port $upstream { |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
38 %%PORT_8081%% a.example.com:%%PORT_8090%%; |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
39 %%PORT_8082%% a.example.com; |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
40 %%PORT_8083%% nx.example.com:%%PORT_8082%%; |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
41 } |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
42 |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
43 map $server_port $many { |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
44 default $server_port.many.example.com; |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
45 } |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
46 |
1237
e4974af3fb12
Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
992
diff
changeset
|
47 resolver 127.0.0.1:%%PORT_8980_UDP%%; |
988
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
48 |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
49 server { |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
50 listen 127.0.0.1:8081; |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
51 listen 127.0.0.1:8082; |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
52 listen 127.0.0.1:8083; |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
53 proxy_pass $upstream; |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
54 } |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
55 |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
56 server { |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
57 listen 127.0.0.1:8084; |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
58 proxy_pass $many:%%PORT_8090%%; |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
59 |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
60 proxy_next_upstream_tries 3; |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
61 proxy_connect_timeout 1s; |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
62 } |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
63 |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
64 server { |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
65 listen 127.0.0.1:8085; |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
66 proxy_pass $many:%%PORT_8090%%; |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
67 |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
68 proxy_next_upstream_tries 2; |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
69 proxy_connect_timeout 1s; |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
70 } |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
71 |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
72 server { |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
73 listen 127.0.0.1:8086; |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
74 proxy_pass $many:%%PORT_8090%%; |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
75 |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
76 proxy_next_upstream_tries 0; |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
77 proxy_connect_timeout 1s; |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
78 } |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
79 |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
80 server { |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
81 listen 127.0.0.1:8090; |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
82 return SEE-THIS; |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
83 } |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
84 } |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
85 |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
86 EOF |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
87 |
1237
e4974af3fb12
Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
992
diff
changeset
|
88 $t->run_daemon(\&dns_daemon, port(8980), $t); |
1251
766bcbb632ee
Tests: removed TODO and try_run() checks for legacy versions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1237
diff
changeset
|
89 $t->run()->plan(8); |
988
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
90 |
1237
e4974af3fb12
Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
992
diff
changeset
|
91 $t->waitforfile($t->testdir . '/' . port(8980)); |
988
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
92 |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
93 ############################################################################### |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
94 |
992
1beb641e21c9
Tests: fixed tests on win32 with stream return module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
988
diff
changeset
|
95 ok(stream('127.0.0.1:' . port(8081))->read(), 'resolver'); |
1beb641e21c9
Tests: fixed tests on win32 with stream return module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
988
diff
changeset
|
96 ok(!stream('127.0.0.1:' . port(8082))->read(), 'upstream no port'); |
1beb641e21c9
Tests: fixed tests on win32 with stream return module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
988
diff
changeset
|
97 ok(!stream('127.0.0.1:' . port(8083))->read(), 'name not found'); |
988
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
98 |
992
1beb641e21c9
Tests: fixed tests on win32 with stream return module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
988
diff
changeset
|
99 ok(stream('127.0.0.1:' . port(8084))->read(), 'resolved tries'); |
1beb641e21c9
Tests: fixed tests on win32 with stream return module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
988
diff
changeset
|
100 ok(!stream('127.0.0.1:' . port(8085))->read(), 'resolved tries limited'); |
1beb641e21c9
Tests: fixed tests on win32 with stream return module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
988
diff
changeset
|
101 ok(stream('127.0.0.1:' . port(8086))->read(), 'resolved tries zero'); |
988
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
102 |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
103 $t->stop(); |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
104 |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
105 SKIP: { |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
106 skip "relies on error log contents", 2 unless $ENV{TEST_NGINX_UNSAFE}; |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
107 |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
108 my $log = `grep -F '[error]' ${\($t->testdir())}/error.log`; |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
109 like($log, qr/no port in upstream "a.example.com"/, 'log - no port'); |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
110 like($log, qr/nx.example.com could not be resolved/, 'log - not found'); |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
111 |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
112 } |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
113 |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
114 ############################################################################### |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
115 |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
116 sub reply_handler { |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
117 my ($recv_data, $port) = @_; |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
118 |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
119 my (@name, @rdata); |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
120 |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
121 use constant NOERROR => 0; |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
122 use constant A => 1; |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
123 use constant IN => 1; |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
124 |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
125 # default values |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
126 |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
127 my ($hdr, $rcode, $ttl) = (0x8180, NOERROR, 3600); |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
128 |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
129 # decode name |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
130 |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
131 my ($len, $offset) = (undef, 12); |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
132 while (1) { |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
133 $len = unpack("\@$offset C", $recv_data); |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
134 last if $len == 0; |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
135 $offset++; |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
136 push @name, unpack("\@$offset A$len", $recv_data); |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
137 $offset += $len; |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
138 } |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
139 |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
140 $offset -= 1; |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
141 my ($id, $type, $class) = unpack("n x$offset n2", $recv_data); |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
142 |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
143 my $name = join('.', @name); |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
144 if ($name eq 'a.example.com' && $type == A) { |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
145 push @rdata, rd_addr($ttl, '127.0.0.1'); |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
146 |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
147 } elsif ($name =~ qr/many.example.com/ && $type == A) { |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
148 push @rdata, rd_addr($ttl, '127.0.0.2'); |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
149 push @rdata, rd_addr($ttl, '127.0.0.2'); |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
150 push @rdata, rd_addr($ttl, '127.0.0.1'); |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
151 } |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
152 |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
153 $len = @name; |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
154 pack("n6 (C/a*)$len x n2", $id, $hdr | $rcode, 1, scalar @rdata, |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
155 0, 0, @name, $type, $class) . join('', @rdata); |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
156 } |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
157 |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
158 sub rd_addr { |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
159 my ($ttl, $addr) = @_; |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
160 |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
161 my $code = 'split(/\./, $addr)'; |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
162 |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
163 return pack 'n3N', 0xc00c, A, IN, $ttl if $addr eq ''; |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
164 |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
165 pack 'n3N nC4', 0xc00c, A, IN, $ttl, eval "scalar $code", eval($code); |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
166 } |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
167 |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
168 sub dns_daemon { |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
169 my ($port, $t) = @_; |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
170 |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
171 my ($data, $recv_data); |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
172 my $socket = IO::Socket::INET->new( |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
173 LocalAddr => '127.0.0.1', |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
174 LocalPort => $port, |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
175 Proto => 'udp', |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
176 ) |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
177 or die "Can't create listening socket: $!\n"; |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
178 |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
179 local $SIG{PIPE} = 'IGNORE'; |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
180 |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
181 # signal we are ready |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
182 |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
183 open my $fh, '>', $t->testdir() . '/' . $port; |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
184 close $fh; |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
185 |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
186 while (1) { |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
187 $socket->recv($recv_data, 65536); |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
188 $data = reply_handler($recv_data, $port); |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
189 $socket->send($data); |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
190 } |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
191 } |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
192 |
64505109060c
Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
193 ############################################################################### |