868
|
1 #!/usr/bin/perl
|
|
2
|
|
3 # (C) Nginx, Inc.
|
|
4
|
|
5 # Tests for stream proxy module with datagrams.
|
|
6
|
|
7 ###############################################################################
|
|
8
|
|
9 use warnings;
|
|
10 use strict;
|
|
11
|
|
12 use Test::More;
|
|
13
|
|
14 BEGIN { use FindBin; chdir($FindBin::Bin); }
|
|
15
|
|
16 use lib 'lib';
|
|
17 use Test::Nginx;
|
|
18 use Test::Nginx::Stream qw/ dgram /;
|
|
19
|
|
20 ###############################################################################
|
|
21
|
|
22 select STDERR; $| = 1;
|
|
23 select STDOUT; $| = 1;
|
|
24
|
|
25 my $t = Test::Nginx->new()->has(qw/stream/)
|
|
26 ->write_file_expand('nginx.conf', <<'EOF');
|
|
27
|
|
28 %%TEST_GLOBALS%%
|
|
29
|
|
30 daemon off;
|
|
31
|
|
32 events {
|
|
33 }
|
|
34
|
|
35 stream {
|
|
36 proxy_timeout 1s;
|
|
37
|
|
38 server {
|
|
39 listen 127.0.0.1:8080 udp;
|
|
40 proxy_pass 127.0.0.1:8081;
|
|
41
|
|
42 proxy_responses 0;
|
|
43 }
|
|
44
|
|
45 server {
|
|
46 listen 127.0.0.1:8082 udp;
|
|
47 proxy_pass 127.0.0.1:8081;
|
|
48
|
|
49 proxy_responses 2;
|
|
50 }
|
|
51
|
|
52 server {
|
|
53 listen 127.0.0.1:8083 udp;
|
|
54 proxy_pass 127.0.0.1:8081;
|
|
55 }
|
|
56 }
|
|
57
|
|
58 EOF
|
|
59
|
|
60
|
|
61 $t->run_daemon(\&udp_daemon, 8081, $t);
|
|
62 $t->try_run('no stream udp')->plan(5);
|
|
63 $t->waitforfile($t->testdir . '/8081');
|
|
64
|
|
65 ###############################################################################
|
|
66
|
|
67 my $s = dgram('127.0.0.1:8080');
|
|
68 is($s->io('1', read => 1), '', 'proxy responses 0');
|
|
69
|
|
70 $s = dgram('127.0.0.1:8082');
|
|
71 is($s->io('1'), '1', 'proxy responses 1');
|
|
72 is($s->io('2', read => 2), '12', 'proxy responses 2');
|
|
73 is($s->io('3', read => 3), '12', 'proxy responses 3');
|
|
74
|
|
75 $s = dgram('127.0.0.1:8083');
|
|
76 is($s->io('3', read => 3), '123', 'proxy responses default');
|
|
77
|
|
78 ###############################################################################
|
|
79
|
|
80 sub udp_daemon {
|
|
81 my ($port, $t) = @_;
|
|
82
|
|
83 my $server = IO::Socket::INET->new(
|
|
84 Proto => 'udp',
|
|
85 LocalAddr => "127.0.0.1:$port",
|
|
86 Reuse => 1,
|
|
87 )
|
|
88 or die "Can't create listening socket: $!\n";
|
|
89
|
|
90 # signal we are ready
|
|
91
|
|
92 open my $fh, '>', $t->testdir() . '/' . $port;
|
|
93 close $fh;
|
|
94
|
|
95 while (1) {
|
|
96 $server->recv(my $buffer, 65536);
|
|
97 $server->send($_) for (1 .. $buffer);
|
|
98 }
|
|
99 }
|
|
100
|
|
101 ###############################################################################
|