annotate stream_proxy_protocol_ipv6.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 196d33c2bb45
children cf14cfe9ec8c
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 {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
41 listen 127.0.0.1:8080;
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
42 proxy_pass [::1]:%%PORT_8080%%;
625
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 {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
46 listen 127.0.0.1:8081;
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
47 proxy_pass [::1]:%%PORT_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 {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
51 listen [::1]:%%PORT_8080%%;
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
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 {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
57 listen [::1]:%%PORT_8081%%;
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
58 proxy_pass 127.0.0.1:8082;
613
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);
1020
196d33c2bb45 Tests: removed TODO and try_run() checks for legacy versions.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 974
diff changeset
65 $t->try_run('no inet6 support')->plan(2);
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
66 $t->waitforsocket('127.0.0.1:' . port(8082));
613
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
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
70 my $dp = port(8080);
952
e9064d691790 Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 816
diff changeset
71
e9064d691790 Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 816
diff changeset
72 like(stream('127.0.0.1:' . $dp)->io('close'),
e9064d691790 Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 816
diff changeset
73 qr/PROXY TCP6 ::1 ::1 \d+ $dp$CRLF/, 'protocol on');
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
74 unlike(stream('127.0.0.1:' . port(8081))->io('close'), qr/PROXY/,
952
e9064d691790 Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 816
diff changeset
75 'protocol off');
613
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
76
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
77 ###############################################################################
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
78
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
79 sub stream_daemon {
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
80 my $server = IO::Socket::INET->new(
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
81 Proto => 'tcp',
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
82 LocalHost => '127.0.0.1:' . port(8082),
613
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
83 Listen => 5,
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
84 Reuse => 1
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
85 )
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
86 or die "Can't create listening socket: $!\n";
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
87
625
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
88 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
89
613
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
90 local $SIG{PIPE} = 'IGNORE';
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
91
625
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
92 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
93 foreach my $fh (@ready) {
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
94 if ($server == $fh) {
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
95 my $new = $fh->accept;
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
96 $new->autoflush(1);
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
97 $sel->add($new);
613
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
98
625
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
99 } 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
100 $sel->remove($fh);
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
101 $fh->close;
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
102 }
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
103 }
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
104 }
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
105 }
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 sub stream_handle_client {
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
108 my ($client) = @_;
613
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
109
625
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
110 log2c("(new connection $client)");
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
111
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
112 $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
113
625
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
114 log2i("$client $buffer");
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
115
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
116 log2o("$client $buffer");
613
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
117
625
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
118 $client->syswrite($buffer);
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
119
0016fe31be13 Tests: fixed connection handling in stream_proxy_protocol_ipv6.t.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 618
diff changeset
120 return $buffer =~ /close/;
613
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
121 }
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
122
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
123 sub log2i { Test::Nginx::log_core('|| <<', @_); }
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
124 sub log2o { Test::Nginx::log_core('|| >>', @_); }
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
125 sub log2c { Test::Nginx::log_core('||', @_); }
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
126
36a267631e03 Tests: added stream IPv6 haproxy protocol tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
127 ###############################################################################