annotate stream_udp_stream.t @ 1897:38f1fd9ca3e6

Tests: unbreak reading new stderr data after eof. Tests don't expect to stop reading redirected stderr when end of file is reached, but rather to read new data being appended, similar to "tail -f". The behaviour is found changed in Ubuntu 23.04's Perl 5.36, which applies the upstream patch [1] expected for inclusion in the upcoming Perl 5.38. The fix is to clear the filehandle's error state to continue reading. [1] https://github.com/Perl/perl5/commit/80c1f1e45e8e Updated mail_error_log.t and stream_error_log.t for consistency.
author Sergey Kandaurov <pluknet@nginx.com>
date Mon, 29 May 2023 17:27:11 +0400
parents f3ba4c74de31
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1335
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
1 #!/usr/bin/perl
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
2
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
3 # (C) Nginx, Inc.
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
4
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
5 # Tests for UDP stream.
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
6
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
7 ###############################################################################
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
8
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
9 use warnings;
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
10 use strict;
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
11
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
12 use Test::More;
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
13
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
14 BEGIN { use FindBin; chdir($FindBin::Bin); }
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
15
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
16 use lib 'lib';
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
17 use Test::Nginx;
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
18 use Test::Nginx::Stream qw/ dgram /;
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
19
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
20 ###############################################################################
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
21
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
22 select STDERR; $| = 1;
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
23 select STDOUT; $| = 1;
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
24
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
25 my $t = Test::Nginx->new()->has(qw/stream stream_return udp/)->plan(8)
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
26 ->write_file_expand('nginx.conf', <<'EOF');
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
27
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
28 %%TEST_GLOBALS%%
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
29
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
30 daemon off;
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
31
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
32 events {
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
33 }
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
34
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
35 stream {
1609
f3ba4c74de31 Tests: added TEST_GLOBALS_STREAM variable support.
Andrei Belov <defan@nginx.com>
parents: 1535
diff changeset
36 %%TEST_GLOBALS_STREAM%%
f3ba4c74de31 Tests: added TEST_GLOBALS_STREAM variable support.
Andrei Belov <defan@nginx.com>
parents: 1535
diff changeset
37
1437
2fc21bdd6f0d Tests: adjusted stream_udp_stream.t for slow hosts.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1372
diff changeset
38 proxy_timeout 1s;
1335
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
39
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
40 server {
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
41 listen 127.0.0.1:%%PORT_8980_UDP%% udp;
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
42 proxy_pass 127.0.0.1:%%PORT_8981_UDP%%;
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
43 }
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
44
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
45 server {
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
46 listen 127.0.0.1:%%PORT_8981_UDP%% udp;
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
47 return $remote_port;
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
48 }
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
49 }
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
50
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
51 EOF
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
52
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
53 $t->run();
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
54
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
55 ###############################################################################
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
56
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
57 my $s = dgram('127.0.0.1:' . port(8980));
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
58 my $data = $s->io('1', read_timeout => 0.5);
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
59 isnt($data, '', 'udp_stream response 1');
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
60
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
61 my $s2 = dgram('127.0.0.1:' . port(8980));
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
62 my $data2 = $s2->io('1', read_timeout => 0.5);
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
63 isnt($data2, '', 'udp_stream response 2');
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
64
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
65 isnt($data, $data2, 'udp_stream two sessions');
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
66
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
67 is($s->io('1'), $data, 'udp_stream session 1');
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
68 is($s->io('1'), $data, 'udp_stream session 2');
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
69
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
70 is($s2->io('1'), $data2, 'udp_stream another session 1');
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
71 is($s2->io('1'), $data2, 'udp_stream another session 2');
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
72
1437
2fc21bdd6f0d Tests: adjusted stream_udp_stream.t for slow hosts.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1372
diff changeset
73 select undef, undef, undef, 1.1;
1335
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
74
d2ceb8c8ef8b Tests: udp streams.
Roman Arutyunyan <arut@nginx.com>
parents:
diff changeset
75 isnt($s->io('1'), $data, 'udp_stream new session');
1372
4c0ea623343a Tests: style.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1335
diff changeset
76
4c0ea623343a Tests: style.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1335
diff changeset
77 ###############################################################################