Mercurial > hg > nginx-tests
annotate stream_proxy_half_close.t @ 1805:76fdf5ede7c0
Tests: improved readability in PROXY protocol v2 TLV tests.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Thu, 10 Nov 2022 17:08:43 +0400 |
parents | 8bdf548487f6 |
children | 2a0a6035a1af |
rev | line source |
---|---|
1735
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
1 #!/usr/bin/perl |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
2 |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
3 # (C) Sergey Kandaurov |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
4 # (C) Nginx, Inc. |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
5 |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
6 # Tests for stream proxy_half_close directive. |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
7 |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
8 ############################################################################### |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
9 |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
10 use warnings; |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
11 use strict; |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
12 |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
13 use Test::More; |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
14 |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
15 use IO::Select; |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
16 |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
17 BEGIN { use FindBin; chdir($FindBin::Bin); } |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
18 |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
19 use lib 'lib'; |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
20 use Test::Nginx; |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
21 |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
22 ############################################################################### |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
23 |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
24 select STDERR; $| = 1; |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
25 select STDOUT; $| = 1; |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
26 |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
27 my $t = Test::Nginx->new()->has(qw/stream/); |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
28 |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
29 $t->write_file_expand('nginx.conf', <<'EOF'); |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
30 |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
31 %%TEST_GLOBALS%% |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
32 |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
33 daemon off; |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
34 |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
35 events { |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
36 } |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
37 |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
38 stream { |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
39 %%TEST_GLOBALS_STREAM%% |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
40 |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
41 server { |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
42 listen 127.0.0.1:8080; |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
43 proxy_pass 127.0.0.1:8081; |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
44 |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
45 proxy_half_close on; |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
46 } |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
47 } |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
48 |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
49 EOF |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
50 |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
51 $t->try_run('no proxy_half_close')->plan(2); |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
52 |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
53 ############################################################################### |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
54 |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
55 my ($s, $u) = pair(8080, 8081); |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
56 shutdown($u, 1); |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
57 is(proxy($s, $u, 'SEE'), 'SEE', 'half close upstream'); |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
58 |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
59 ($s, $u) = pair(8080, 8081); |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
60 shutdown($s, 1); |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
61 is(proxy($u, $s, 'SEE'), 'SEE', 'half close client'); |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
62 |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
63 ############################################################################### |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
64 |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
65 sub pair { |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
66 my ($server, $backend) = @_; |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
67 |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
68 my $listen = IO::Socket::INET->new( |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
69 LocalHost => '127.0.0.1:' . port($backend), |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
70 Listen => 5, |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
71 Reuse => 1, |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
72 ) |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
73 or die "Can't listen on $server: $!\n"; |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
74 |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
75 my $connect = IO::Socket::INET->new( |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
76 Proto => 'tcp', |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
77 PeerHost => '127.0.0.1:' . port($server), |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
78 ) |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
79 or die "Can't connect to $server: $!\n"; |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
80 |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
81 my $accept = $listen->accept() if IO::Select->new($listen)->can_read(3); |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
82 |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
83 return $connect, $accept; |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
84 } |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
85 |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
86 sub proxy { |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
87 my ($from, $to, $msg) = @_; |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
88 proxy_from($from, $msg); |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
89 return proxy_to($to); |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
90 } |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
91 |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
92 sub proxy_from { |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
93 my ($s, $msg) = @_; |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
94 |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
95 local $SIG{PIPE} = 'IGNORE'; |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
96 |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
97 while (IO::Select->new($s)->can_write(5)) { |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
98 my $n = $s->syswrite($msg); |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
99 log_out(substr($msg, 0, $n)); |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
100 last unless $n; |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
101 |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
102 $msg = substr($msg, $n); |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
103 last unless length $msg; |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
104 } |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
105 } |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
106 |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
107 sub proxy_to { |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
108 my ($s) = @_; |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
109 my $buf; |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
110 |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
111 $s->sysread($buf, 1024) if IO::Select->new($s)->can_read(5); |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
112 |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
113 log_in($buf); |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
114 return $buf; |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
115 } |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
116 |
8bdf548487f6
Tests: proxy_half_close tests in the stream module.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
117 ############################################################################### |