annotate stream_resolver.t @ 1021:ebdf239722b9

Tests: relaxed proxy_cache_lock.t nolock tests to fix on Solaris. Assumed that the order of responses being arrived in nolock case may be ignored. An important part of such case is that the only last response should be cached.
author Sergey Kandaurov <pluknet@nginx.com>
date Fri, 02 Sep 2016 12:17:35 +0300
parents 1beb641e21c9
children e4974af3fb12
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
64505109060c Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
47 resolver 127.0.0.1:%%PORT_8080_UDP%%;
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
64505109060c Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
88 $t->run_daemon(\&dns_daemon, port(8080), $t);
64505109060c Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
89 $t->try_run('no stream resolver')->plan(8);
64505109060c Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
90
64505109060c Tests: simple stream proxy tests with resolver.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
91 $t->waitforfile($t->testdir . '/' . port(8080));
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 ###############################################################################