comparison stream_udp_proxy.t @ 868:d2cb9ed7412e

Tests: stream udp tests.
author Andrey Zelenkov <zelenkov@nginx.com>
date Tue, 15 Mar 2016 16:20:29 +0300
parents
children 25a4b2fdd3fb
comparison
equal deleted inserted replaced
867:89898b20f258 868:d2cb9ed7412e
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 ###############################################################################