Mercurial > hg > nginx-tests
annotate stream_unix.t @ 1215:26884729e06b
Tests: cope with resolver resend in mail resolver tests.
Currently, if resolver didn't find PTR type in the answer section of PTR
response, it keeps the node in the resend queue until the next timer event.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Thu, 31 Aug 2017 19:09:04 +0300 |
parents | 882267679006 |
children | f3ba4c74de31 |
rev | line source |
---|---|
828
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
1 #!/usr/bin/perl |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
2 |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
3 # (C) Andrey Zelenkov |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
4 # (C) Nginx, Inc. |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
5 |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
6 # Simple tests for stream with unix socket. |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
7 |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
8 ############################################################################### |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
9 |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
10 use warnings; |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
11 use strict; |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
12 |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
13 use Test::More; |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
14 |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
15 BEGIN { use FindBin; chdir($FindBin::Bin); } |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
16 |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
17 use lib 'lib'; |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
18 use Test::Nginx; |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
19 use Test::Nginx::Stream qw/ stream /; |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
20 |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
21 ############################################################################### |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
22 |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
23 select STDERR; $| = 1; |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
24 select STDOUT; $| = 1; |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
25 |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
26 eval { require IO::Socket::UNIX; }; |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
27 plan(skip_all => 'IO::Socket::UNIX not installed') if $@; |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
28 |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
29 my $t = Test::Nginx->new()->has(qw/stream unix/)->plan(2); |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
30 |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
31 $t->write_file_expand('nginx.conf', <<'EOF'); |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
32 |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
33 %%TEST_GLOBALS%% |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
34 |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
35 daemon off; |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
36 |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
37 events { |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
38 } |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
39 |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
40 stream { |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
41 upstream u { |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
42 server unix:%%TESTDIR%%/unix.sock; |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
43 } |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
44 |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
45 server { |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
46 listen 127.0.0.1:8080; |
828
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
47 proxy_pass unix:%%TESTDIR%%/unix.sock; |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
48 } |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
49 |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
50 server { |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
51 listen 127.0.0.1:8081; |
828
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
52 proxy_pass u; |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
53 } |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
54 } |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
55 |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
56 EOF |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
57 |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
58 my $path = $t->testdir() . '/unix.sock'; |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
59 |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
60 $t->run_daemon(\&stream_daemon, $path); |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
61 $t->run(); |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
62 |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
63 # wait for unix socket to appear |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
64 |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
65 for (1 .. 50) { |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
66 last if -S $path; |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
67 select undef, undef, undef, 0.1; |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
68 } |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
69 |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
70 ############################################################################### |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
71 |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
72 my $str = 'SEE-THIS'; |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
73 |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
74 is(stream('127.0.0.1:' . port(8080))->io($str), $str, 'proxy'); |
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
75 is(stream('127.0.0.1:' . port(8081))->io($str), $str, 'upstream'); |
828
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
76 |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
77 ############################################################################### |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
78 |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
79 sub stream_daemon { |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
80 my $server = IO::Socket::UNIX->new( |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
81 Proto => 'tcp', |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
82 Local => shift, |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
83 Listen => 5, |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
84 Reuse => 1 |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
85 ) |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
86 or die "Can't create listening socket: $!\n"; |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
87 |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
88 local $SIG{PIPE} = 'IGNORE'; |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
89 |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
90 while (my $client = $server->accept()) { |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
91 $client->autoflush(1); |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
92 |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
93 log2c("(new connection $client)"); |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
94 |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
95 $client->sysread(my $buffer, 65536) or next; |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
96 |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
97 log2i("$client $buffer"); |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
98 |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
99 log2o("$client $buffer"); |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
100 |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
101 $client->syswrite($buffer); |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
102 |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
103 close $client; |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
104 } |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
105 } |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
106 |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
107 sub log2i { Test::Nginx::log_core('|| <<', @_); } |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
108 sub log2o { Test::Nginx::log_core('|| >>', @_); } |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
109 sub log2c { Test::Nginx::log_core('||', @_); } |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
110 |
68d5a68eb938
Tests: basic stream tests with unix socket.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
111 ############################################################################### |