annotate stream_udp_proxy_requests.t @ 1427:eb1d883305ea

Tests: avoid edge cases in upstream random two test. Unavailable servers contribute to the number of attempts, if selected, before the balancer would fall back to the default round-robin method. This means that it's quite possible to get server with more connections. To facilitate with selecting two alive servers, down server was removed from the upstream configuration at the cost of slightly worse coverage.
author Sergey Kandaurov <pluknet@nginx.com>
date Thu, 10 Jan 2019 17:42:34 +0300
parents 9242811bf22b
children 144c6ce732e4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1396
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1 #!/usr/bin/perl
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
2
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
3 # (C) Sergey Kandaurov
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
4 # (C) Nginx, Inc.
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
5
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
6 # Tests for stream proxy module, the proxy_requests directive.
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
7
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
8 ###############################################################################
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
9
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
10 use warnings;
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
11 use strict;
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
12
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
13 use Test::More;
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
14
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
15 BEGIN { use FindBin; chdir($FindBin::Bin); }
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
16
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
17 use lib 'lib';
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
18 use Test::Nginx;
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
19 use Test::Nginx::Stream qw/ dgram /;
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
20
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
21 ###############################################################################
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
22
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
23 select STDERR; $| = 1;
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
24 select STDOUT; $| = 1;
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
25
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
26 my $t = Test::Nginx->new()->has(qw/stream udp/)
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
27 ->write_file_expand('nginx.conf', <<'EOF');
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
28
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
29 %%TEST_GLOBALS%%
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
30
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
31 daemon off;
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
32
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
33 events {
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
34 }
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
35
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
36 stream {
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
37 proxy_timeout 2100ms;
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
38
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
39 log_format status $status;
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
40
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
41 server {
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
42 listen 127.0.0.1:%%PORT_8980_UDP%% udp;
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
43 proxy_pass 127.0.0.1:%%PORT_8990_UDP%%;
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
44
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
45 proxy_requests 0;
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
46 }
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
47
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
48 server {
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
49 listen 127.0.0.1:%%PORT_8981_UDP%% udp;
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
50 proxy_pass 127.0.0.1:%%PORT_8990_UDP%%;
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
51
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
52 proxy_requests 1;
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
53 }
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
54
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
55 server {
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
56 listen 127.0.0.1:%%PORT_8982_UDP%% udp;
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
57 proxy_pass 127.0.0.1:%%PORT_8990_UDP%%;
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
58
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
59 proxy_requests 2;
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
60 }
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
61
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
62 server {
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
63 listen 127.0.0.1:%%PORT_8983_UDP%% udp;
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
64 proxy_pass 127.0.0.1:%%PORT_8990_UDP%%;
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
65 }
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
66
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
67 server {
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
68 listen 127.0.0.1:%%PORT_8984_UDP%% udp;
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
69 proxy_pass 127.0.0.1:%%PORT_8991_UDP%%;
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
70
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
71 proxy_requests 2;
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
72 access_log %%TESTDIR%%/s.log status;
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
73 }
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
74
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
75 server {
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
76 listen 127.0.0.1:%%PORT_8985_UDP%% udp;
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
77 proxy_pass 127.0.0.1:%%PORT_8990_UDP%%;
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
78
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
79 proxy_requests 2;
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
80 proxy_responses 2;
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
81 access_log %%TESTDIR%%/s2.log status;
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
82 }
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
83 }
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
84
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
85 EOF
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
86
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
87
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
88 $t->run_daemon(\&udp_daemon, $t, port(8990));
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
89 $t->run_daemon(\&udp_daemon, $t, port(8991));
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
90 $t->try_run('no proxy_requests')->plan(26);
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
91
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
92 $t->waitforfile($t->testdir . '/' . port(8990));
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
93 $t->waitforfile($t->testdir . '/' . port(8991));
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
94
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
95 ###############################################################################
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
96
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
97 # proxy_requests 0, binding is not dropped across streams
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
98
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
99 my $s = dgram('127.0.0.1:' . port(8980));
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
100 my $n = $s->io('1', read => 1);
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
101 ok($n, 'requests 0 create');
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
102 is($s->read(), '1', 'requests 0 create - response');
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
103
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
104 is($s->io('1', read => 1), $n, 'requests 0 second - binding saved');
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
105 is($s->read(), '1', 'requests 0 second - response');
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
106
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
107 is($s->io('1', read => 1), $n, 'requests 0 follow - binding saved');
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
108 is($s->read(), '1', 'requests 0 follow - response');
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
109
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
110 # proxy_requests 1, binding is dropped on every next stream
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
111
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
112 $s = dgram('127.0.0.1:' . port(8981));
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
113 $n = $s->io('1', read => 1);
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
114 ok($n, 'requests 1 create');
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
115 is($s->read(), '1', 'requests 1 create - response');
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
116
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
117 isnt($s->io('1', read => 1), $n, 'requests 1 second - binding lost');
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
118 is($s->read(), '1', 'requests 1 second - response');
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
119
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
120 # proxy_requests 2, binding is dropped on every second stream
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
121
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
122 $s = dgram('127.0.0.1:' . port(8982));
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
123 $n = $s->io('1', read => 1);
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
124 ok($n, 'requests 2 create');
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
125 is($s->read(), '1', 'requests 2 create - response');
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
126
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
127 is($s->io('1', read => 1), $n, 'requests 2 second - binding saved');
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
128 is($s->read(), '1', 'requests 2 second - response');
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
129
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
130 isnt($s->io('1', read => 1), $n, 'requests 2 follow - binding lost');
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
131 is($s->read(), '1', 'requests 2 follow - response');
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
132
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
133 # proxy_requests unset, binding is not dropped across streams
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
134
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
135 $s = dgram('127.0.0.1:' . port(8983));
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
136 $n = $s->io('1', read => 1);
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
137 ok($n, 'requests unset create');
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
138 is($s->read(), '1', 'requests unset create - response');
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
139
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
140 is($s->io('1', read => 1), $n, 'requests unset second - binding saved');
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
141 is($s->read(), '1', 'requests unset second - response');
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
142
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
143 is($s->io('1', read => 1), $n, 'requests unset follow - binding saved');
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
144 is($s->read(), '1', 'requests unset follow - response');
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
145
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
146 # proxy_requests 2, with slow backend
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
147 # client sends 5 packets, each responded with 3 packets
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
148 # expects all packets proxied from backend, the last (uneven) session succeed
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
149
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
150 $s = dgram('127.0.0.1:' . port(8984));
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
151 $s->write('2') for 1 .. 5;
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
152 my $b = join ' ', map { $s->read() } (1 .. 15);
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
153 like($b, qr/^(\d+ 1 2) \1 (?!\1)(\d+ 1 2) \2 (?!\2)\d+ 1 2$/, 'slow backend');
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
154
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
155 # proxy_requests 2, proxy_responses 2
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
156 # client sends 5 packets, each responded with 2 packets
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
157 # expects all packets proxied from backend, the last (uneven) session succeed
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
158
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
159 $s = dgram('127.0.0.1:' . port(8985));
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
160 $s->write('1') for 1 .. 5;
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
161 $b = join ' ', map { $s->read() } (1 .. 10);
1398
9242811bf22b Tests: marked "requests - responses" proxy_requests test as unsafe.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1396
diff changeset
162
9242811bf22b Tests: marked "requests - responses" proxy_requests test as unsafe.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1396
diff changeset
163 SKIP: {
9242811bf22b Tests: marked "requests - responses" proxy_requests test as unsafe.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1396
diff changeset
164 skip 'session could early terminate', 1 unless $ENV{TEST_NGINX_UNSAFE};
9242811bf22b Tests: marked "requests - responses" proxy_requests test as unsafe.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1396
diff changeset
165
1396
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
166 like($b, qr/^(\d+ 1) \1 (?!\1)(\d+ 1) \2 (?!\2)\d+ 1$/, 'requests - responses');
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
167
1398
9242811bf22b Tests: marked "requests - responses" proxy_requests test as unsafe.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1396
diff changeset
168 }
9242811bf22b Tests: marked "requests - responses" proxy_requests test as unsafe.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1396
diff changeset
169
1396
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
170 $t->stop();
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
171
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
172 is($t->read_file('s.log'), <<EOF, 'uneven session status - slow backend');
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
173 200
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
174 200
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
175 200
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
176 EOF
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
177
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
178 is($t->read_file('s2.log'), <<EOF, 'uneven session status - responses');
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
179 200
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
180 200
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
181 200
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
182 EOF
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
183
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
184 ###############################################################################
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
185
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
186 sub udp_daemon {
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
187 my ($t, $port) = @_;
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
188
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
189 my $server = IO::Socket::INET->new(
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
190 Proto => 'udp',
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
191 LocalAddr => "127.0.0.1:$port",
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
192 Reuse => 1
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
193 )
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
194 or die "Can't create listening socket: $!\n";
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
195
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
196 # signal we are ready
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
197
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
198 open my $fh, '>', $t->testdir() . "/$port";
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
199 close $fh;
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
200
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
201 my $slp = 1 if $port == port(8991);
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
202
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
203 while (1) {
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
204 $server->recv(my $buffer, 65536);
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
205 sleep 1, $slp = 0 if $slp;
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
206
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
207 $server->send($server->peerport());
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
208 $server->send($_) for (1 .. $buffer);
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
209 }
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
210 }
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
211
28ddfda3ca2a Tests: stream tests for the proxy_requests directive.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
212 ###############################################################################