annotate stream_udp_proxy.t @ 1677:f13ead27f89c

Tests: improved stop() to send TERM after QUIT. It is possible that graceful stop as initiated by SIGQUIT will take very long time, such as when waiting for proxy_timeout in mail proxy (defaults to 24h). To make sure in such cases nginx is stopped after some reasonable time, we now send SIGTERM after waiting for 90 seconds. Note that win32 version previously used "-s stop", which is equivalent to SIGTERM rather than SIGQUIT. This seems accidental error during introduction of initial win32 support in tests (ce2e23daa1da), so it is changed to follow the same logic.
author Maxim Dounin <mdounin@mdounin.ru>
date Wed, 19 May 2021 04:32:55 +0300
parents f3ba4c74de31
children 5ac6efbe5552
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 {
1609
f3ba4c74de31 Tests: added TEST_GLOBALS_STREAM variable support.
Andrei Belov <defan@nginx.com>
parents: 1574
diff changeset
36 %%TEST_GLOBALS_STREAM%%
f3ba4c74de31 Tests: added TEST_GLOBALS_STREAM variable support.
Andrei Belov <defan@nginx.com>
parents: 1574
diff changeset
37
868
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
38 proxy_timeout 1s;
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
39
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
40 server {
1237
e4974af3fb12 Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 1020
diff changeset
41 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
42 proxy_pass 127.0.0.1:%%PORT_8981_UDP%%;
868
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 proxy_responses 0;
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
45 }
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
46
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
47 server {
1237
e4974af3fb12 Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 1020
diff changeset
48 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
49 proxy_pass 127.0.0.1:%%PORT_8981_UDP%%;
868
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 proxy_responses 2;
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
52 }
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
53
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
54 server {
1237
e4974af3fb12 Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 1020
diff changeset
55 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
56 proxy_pass 127.0.0.1:%%PORT_8981_UDP%%;
868
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 }
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 EOF
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
61
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
62
1237
e4974af3fb12 Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 1020
diff changeset
63 $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
64 $t->run();
1237
e4974af3fb12 Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 1020
diff changeset
65 $t->waitforfile($t->testdir . '/' . port(8981));
868
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
66
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
67 ###############################################################################
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
68
1237
e4974af3fb12 Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 1020
diff changeset
69 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
70 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
71
1237
e4974af3fb12 Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 1020
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('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
74 $s = dgram('127.0.0.1:' . port(8982));
868
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
75 is($s->io('2', read => 2), '12', 'proxy responses 2');
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
76
1237
e4974af3fb12 Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 1020
diff changeset
77 $s = dgram('127.0.0.1:' . port(8983));
868
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
78 is($s->io('3', read => 3), '123', 'proxy responses default');
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
79
1574
42e37e0434d5 Tests: stream udp tests with zero-length payload (ticket #1982).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1334
diff changeset
80 # zero-length payload
42e37e0434d5 Tests: stream udp tests with zero-length payload (ticket #1982).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1334
diff changeset
81
42e37e0434d5 Tests: stream udp tests with zero-length payload (ticket #1982).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1334
diff changeset
82 TODO: {
42e37e0434d5 Tests: stream udp tests with zero-length payload (ticket #1982).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1334
diff changeset
83 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
84
42e37e0434d5 Tests: stream udp tests with zero-length payload (ticket #1982).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1334
diff changeset
85 $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
86 $s->write('');
42e37e0434d5 Tests: stream udp tests with zero-length payload (ticket #1982).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1334
diff changeset
87 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
88 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
89
42e37e0434d5 Tests: stream udp tests with zero-length payload (ticket #1982).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1334
diff changeset
90 $s->write('');
42e37e0434d5 Tests: stream udp tests with zero-length payload (ticket #1982).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1334
diff changeset
91 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
92 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
93
42e37e0434d5 Tests: stream udp tests with zero-length payload (ticket #1982).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1334
diff changeset
94 }
42e37e0434d5 Tests: stream udp tests with zero-length payload (ticket #1982).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1334
diff changeset
95
868
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
96 ###############################################################################
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
97
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
98 sub udp_daemon {
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
99 my ($port, $t) = @_;
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
100
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
101 my $server = IO::Socket::INET->new(
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
102 Proto => 'udp',
1237
e4974af3fb12 Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 1020
diff changeset
103 LocalAddr => '127.0.0.1:' . port(8981),
868
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
104 Reuse => 1,
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 or die "Can't create listening socket: $!\n";
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
107
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
108 # signal we are ready
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
109
1237
e4974af3fb12 Tests: adjusted udp ports to match allocated ports range.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 1020
diff changeset
110 open my $fh, '>', $t->testdir() . '/' . port(8981);
868
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
111 close $fh;
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
112
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
113 while (1) {
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
114 $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
115
42e37e0434d5 Tests: stream udp tests with zero-length payload (ticket #1982).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1334
diff changeset
116 if (length($buffer) > 0) {
42e37e0434d5 Tests: stream udp tests with zero-length payload (ticket #1982).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1334
diff changeset
117 $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
118
42e37e0434d5 Tests: stream udp tests with zero-length payload (ticket #1982).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1334
diff changeset
119 } else {
42e37e0434d5 Tests: stream udp tests with zero-length payload (ticket #1982).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1334
diff changeset
120 $server->send('zero');
42e37e0434d5 Tests: stream udp tests with zero-length payload (ticket #1982).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1334
diff changeset
121 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
122 $server->send('');
42e37e0434d5 Tests: stream udp tests with zero-length payload (ticket #1982).
Sergey Kandaurov <pluknet@nginx.com>
parents: 1334
diff changeset
123 }
868
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 }
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
126
d2cb9ed7412e Tests: stream udp tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
127 ###############################################################################