annotate stream_udp_proxy.t @ 1606:e4e0695552ed

Tests: fixed stream_proxy_ssl_conf_command.t. The stream_proxy_ssl_conf_command.t test used stream return module to return the response. Since this ignores actual request, but the perl test code used http_get(). This might result in the request being sent after the response is returned and the connection closed by the server, resulting in RST being generated and no response seen by the client at all. Fix is to use "stream(...)->read()" instead of http_get(), so no request is sent at all, eliminating possibility of RST being generated.
author Maxim Dounin <mdounin@mdounin.ru>
date Tue, 10 Nov 2020 05:03:29 +0300
parents 42e37e0434d5
children f3ba4c74de31
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
868
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1 #!/usr/bin/perl
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
2
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
3 # (C) Nginx, Inc.
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
4
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
5 # Tests for stream proxy module with datagrams.
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
6
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
7 ###############################################################################
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
8
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
9 use warnings;
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
10 use strict;
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
11
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
12 use Test::More;
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
13
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
14 BEGIN { use FindBin; chdir($FindBin::Bin); }
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
15
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
16 use lib 'lib';
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
17 use Test::Nginx;
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
18 use Test::Nginx::Stream qw/ dgram /;
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
19
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
20 ###############################################################################
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
21
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
22 select STDERR; $| = 1;
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
23 select STDOUT; $| = 1;
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
24
1574
42e37e0434d5 Tests: stream udp tests with zero-length payload (ticket #1982).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1334
diff changeset
25 my $t = Test::Nginx->new()->has(qw/stream udp/)->plan(8)
868
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
26 ->write_file_expand('nginx.conf', <<'EOF');
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
27
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
28 %%TEST_GLOBALS%%
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
29
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
30 daemon off;
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
31
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
32 events {
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
33 }
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
34
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
35 stream {
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
36 proxy_timeout 1s;
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
37
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
38 server {
1237
e4974af3fb12 Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 1020
diff changeset
39 listen 127.0.0.1:%%PORT_8980_UDP%% udp;
e4974af3fb12 Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 1020
diff changeset
40 proxy_pass 127.0.0.1:%%PORT_8981_UDP%%;
868
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
41
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
42 proxy_responses 0;
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
43 }
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
44
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
45 server {
1237
e4974af3fb12 Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 1020
diff changeset
46 listen 127.0.0.1:%%PORT_8982_UDP%% udp;
e4974af3fb12 Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 1020
diff changeset
47 proxy_pass 127.0.0.1:%%PORT_8981_UDP%%;
868
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
48
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
49 proxy_responses 2;
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
50 }
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
51
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
52 server {
1237
e4974af3fb12 Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 1020
diff changeset
53 listen 127.0.0.1:%%PORT_8983_UDP%% udp;
e4974af3fb12 Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 1020
diff changeset
54 proxy_pass 127.0.0.1:%%PORT_8981_UDP%%;
868
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
55 }
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
56 }
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
57
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
58 EOF
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
59
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
60
1237
e4974af3fb12 Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 1020
diff changeset
61 $t->run_daemon(\&udp_daemon, port(8981), $t);
1020
196d33c2bb45 Tests: removed TODO and try_run() checks for legacy versions.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 974
diff changeset
62 $t->run();
1237
e4974af3fb12 Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 1020
diff changeset
63 $t->waitforfile($t->testdir . '/' . port(8981));
868
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
64
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
65 ###############################################################################
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
66
1237
e4974af3fb12 Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 1020
diff changeset
67 my $s = dgram('127.0.0.1:' . port(8980));
935
25a4b2fdd3fb Tests: I/O timeout options introduced in Stream.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 868
diff changeset
68 is($s->io('1', read => 1, read_timeout => 0.5), '', 'proxy responses 0');
868
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
69
1237
e4974af3fb12 Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 1020
diff changeset
70 $s = dgram('127.0.0.1:' . port(8982));
868
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
71 is($s->io('1'), '1', 'proxy responses 1');
1334
c4f58dfe8207 Tests: stream udp tests adjusted for upcoming udp streams.
Roman Arutyunyan <arut@nginx.com>
parents: 1237
diff changeset
72 $s = dgram('127.0.0.1:' . port(8982));
868
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
73 is($s->io('2', read => 2), '12', 'proxy responses 2');
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
74
1237
e4974af3fb12 Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 1020
diff changeset
75 $s = dgram('127.0.0.1:' . port(8983));
868
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
76 is($s->io('3', read => 3), '123', 'proxy responses default');
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
77
1574
42e37e0434d5 Tests: stream udp tests with zero-length payload (ticket #1982).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1334
diff changeset
78 # zero-length payload
42e37e0434d5 Tests: stream udp tests with zero-length payload (ticket #1982).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1334
diff changeset
79
42e37e0434d5 Tests: stream udp tests with zero-length payload (ticket #1982).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1334
diff changeset
80 TODO: {
42e37e0434d5 Tests: stream udp tests with zero-length payload (ticket #1982).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1334
diff changeset
81 local $TODO = 'not yet' unless $t->has_version('1.19.1');
42e37e0434d5 Tests: stream udp tests with zero-length payload (ticket #1982).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1334
diff changeset
82
42e37e0434d5 Tests: stream udp tests with zero-length payload (ticket #1982).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1334
diff changeset
83 $s = dgram('127.0.0.1:' . port(8982));
42e37e0434d5 Tests: stream udp tests with zero-length payload (ticket #1982).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1334
diff changeset
84 $s->write('');
42e37e0434d5 Tests: stream udp tests with zero-length payload (ticket #1982).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1334
diff changeset
85 is($s->read(), 'zero', 'upstream read zero bytes');
42e37e0434d5 Tests: stream udp tests with zero-length payload (ticket #1982).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1334
diff changeset
86 is($s->read(), '', 'upstream sent zero bytes');
42e37e0434d5 Tests: stream udp tests with zero-length payload (ticket #1982).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1334
diff changeset
87
42e37e0434d5 Tests: stream udp tests with zero-length payload (ticket #1982).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1334
diff changeset
88 $s->write('');
42e37e0434d5 Tests: stream udp tests with zero-length payload (ticket #1982).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1334
diff changeset
89 is($s->read(), 'zero', 'upstream read zero bytes again');
42e37e0434d5 Tests: stream udp tests with zero-length payload (ticket #1982).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1334
diff changeset
90 is($s->read(), '', 'upstream sent zero bytes again');
42e37e0434d5 Tests: stream udp tests with zero-length payload (ticket #1982).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1334
diff changeset
91
42e37e0434d5 Tests: stream udp tests with zero-length payload (ticket #1982).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1334
diff changeset
92 }
42e37e0434d5 Tests: stream udp tests with zero-length payload (ticket #1982).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1334
diff changeset
93
868
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
94 ###############################################################################
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
95
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
96 sub udp_daemon {
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
97 my ($port, $t) = @_;
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
98
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
99 my $server = IO::Socket::INET->new(
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
100 Proto => 'udp',
1237
e4974af3fb12 Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 1020
diff changeset
101 LocalAddr => '127.0.0.1:' . port(8981),
868
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
102 Reuse => 1,
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
103 )
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
104 or die "Can't create listening socket: $!\n";
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
105
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
106 # signal we are ready
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
107
1237
e4974af3fb12 Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 1020
diff changeset
108 open my $fh, '>', $t->testdir() . '/' . port(8981);
868
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
109 close $fh;
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
110
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
111 while (1) {
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
112 $server->recv(my $buffer, 65536);
1574
42e37e0434d5 Tests: stream udp tests with zero-length payload (ticket #1982).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1334
diff changeset
113
42e37e0434d5 Tests: stream udp tests with zero-length payload (ticket #1982).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1334
diff changeset
114 if (length($buffer) > 0) {
42e37e0434d5 Tests: stream udp tests with zero-length payload (ticket #1982).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1334
diff changeset
115 $server->send($_) for (1 .. $buffer);
42e37e0434d5 Tests: stream udp tests with zero-length payload (ticket #1982).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1334
diff changeset
116
42e37e0434d5 Tests: stream udp tests with zero-length payload (ticket #1982).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1334
diff changeset
117 } else {
42e37e0434d5 Tests: stream udp tests with zero-length payload (ticket #1982).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1334
diff changeset
118 $server->send('zero');
42e37e0434d5 Tests: stream udp tests with zero-length payload (ticket #1982).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1334
diff changeset
119 select undef, undef, undef, 0.2;
42e37e0434d5 Tests: stream udp tests with zero-length payload (ticket #1982).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1334
diff changeset
120 $server->send('');
42e37e0434d5 Tests: stream udp tests with zero-length payload (ticket #1982).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1334
diff changeset
121 }
868
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
122 }
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
123 }
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
124
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
125 ###############################################################################