annotate stream_proxy_protocol_ipv6.t @ 836:a9c4cebcfe69

Tests: adjusted http resolver test with resend. Don't bother with socket error to force resolver resend. Nginx doesn't handle well ECONNREFUSED send() error, which results in "500 Internal Server Error". It may deserve a separate test, though.
author Sergey Kandaurov <pluknet@nginx.com>
date Fri, 29 Jan 2016 00:40:05 +0300
parents 77359b849cd5
children e9064d691790
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
613
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1 #!/usr/bin/perl
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
2
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
3 # (C) Andrey Zelenkov
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
4 # (C) Nginx, Inc.
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
5
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
6 # Tests for stream proxy module with IPv6 haproxy protocol.
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
7
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
8 ###############################################################################
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
9
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
10 use warnings;
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
11 use strict;
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
12
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
13 use Test::More;
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
14
625
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
15 use IO::Select;
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
16 use Socket qw/ $CRLF /;
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
17
613
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
18 BEGIN { use FindBin; chdir($FindBin::Bin); }
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
19
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
20 use lib 'lib';
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
21 use Test::Nginx;
816
77359b849cd5 Tests: stream package.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 711
diff changeset
22 use Test::Nginx::Stream qw/ stream /;
613
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
23
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
24 ###############################################################################
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
25
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
26 select STDERR; $| = 1;
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
27 select STDOUT; $| = 1;
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
28
625
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
29 my $t = Test::Nginx->new()->has(qw/stream ipv6/)
613
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
30 ->write_file_expand('nginx.conf', <<'EOF');
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
31
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
32 %%TEST_GLOBALS%%
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
33
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
34 daemon off;
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
35
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
36 events {
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
37 }
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
38
625
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
39 stream {
613
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
40 server {
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
41 listen 127.0.0.1:8080;
625
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
42 proxy_pass [::1]:8080;
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
43 }
613
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
44
625
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
45 server {
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
46 listen 127.0.0.1:8081;
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
47 proxy_pass [::1]:8081;
613
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
48 }
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
49
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
50 server {
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
51 listen [::1]:8080;
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
52 proxy_pass 127.0.0.1:8082;
625
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
53 proxy_protocol on;
613
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
54 }
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
55
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
56 server {
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
57 listen [::1]:8081;
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
58 proxy_pass 127.0.0.1:8082;
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
59 }
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
60 }
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
61
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
62 EOF
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
63
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
64 $t->run_daemon(\&stream_daemon);
618
2d9f5f439598 Tests: added stream proxy protocol availability check.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 613
diff changeset
65 $t->try_run('no inet6 support or stream proxy_protocol')->plan(2);
613
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
66 $t->waitforsocket('127.0.0.1:8082');
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
67
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
68 ###############################################################################
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
69
816
77359b849cd5 Tests: stream package.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 711
diff changeset
70 like(stream()->io('close'), qr/PROXY TCP6 ::1 ::1 \d+ 8080$CRLF/,
77359b849cd5 Tests: stream package.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 711
diff changeset
71 'protocol on');
77359b849cd5 Tests: stream package.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 711
diff changeset
72 unlike(stream('127.0.0.1:8081')->io('close'), qr/PROXY/, 'protocol off');
613
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
73
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
74 ###############################################################################
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
75
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
76 sub stream_daemon {
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
77 my $server = IO::Socket::INET->new(
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
78 Proto => 'tcp',
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
79 LocalHost => '127.0.0.1:8082',
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
80 Listen => 5,
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
81 Reuse => 1
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
82 )
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
83 or die "Can't create listening socket: $!\n";
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
84
625
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
85 my $sel = IO::Select->new($server);
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
86
613
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
87 local $SIG{PIPE} = 'IGNORE';
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
88
625
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
89 while (my @ready = $sel->can_read) {
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
90 foreach my $fh (@ready) {
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
91 if ($server == $fh) {
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
92 my $new = $fh->accept;
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
93 $new->autoflush(1);
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
94 $sel->add($new);
613
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
95
625
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
96 } elsif (stream_handle_client($fh)) {
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
97 $sel->remove($fh);
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
98 $fh->close;
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
99 }
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
100 }
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
101 }
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
102 }
613
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
103
625
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
104 sub stream_handle_client {
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
105 my ($client) = @_;
613
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
106
625
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
107 log2c("(new connection $client)");
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
108
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
109 $client->sysread(my $buffer, 65536) or return 1;
613
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
110
625
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
111 log2i("$client $buffer");
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
112
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
113 log2o("$client $buffer");
613
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
114
625
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
115 $client->syswrite($buffer);
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
116
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
117 return $buffer =~ /close/;
613
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
118 }
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
119
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
120 sub log2i { Test::Nginx::log_core('|| <<', @_); }
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
121 sub log2o { Test::Nginx::log_core('|| >>', @_); }
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
122 sub log2c { Test::Nginx::log_core('||', @_); }
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
123
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
124 ###############################################################################