annotate sub_filter_buffering.t @ 1021:ebdf239722b9

Tests: relaxed proxy_cache_lock.t nolock tests to fix on Solaris. Assumed that the order of responses being arrived in nolock case may be ignored. An important part of such case is that the only last response should be cached.
author Sergey Kandaurov <pluknet@nginx.com>
date Fri, 02 Sep 2016 12:17:35 +0300
parents e17ffab3febc
children efccab043dd3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
975
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1 #!/usr/bin/perl
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
2
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
3 # (C) Andrey Zelenkov
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
4 # (C) Nginx, Inc.
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
5
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
6 # Tests for sub_filter buffering.
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
7
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
8 ###############################################################################
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
9
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
10 use warnings;
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
11 use strict;
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
12
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
13 use Test::More;
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
14
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
15 use Socket qw/ CRLF /;
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
16
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
17 BEGIN { use FindBin; chdir($FindBin::Bin); }
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
18
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
19 use lib 'lib';
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
20 use Test::Nginx;
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
21
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
22 ###############################################################################
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
23
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
24 select STDERR; $| = 1;
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
25 select STDOUT; $| = 1;
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
26
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
27 my $t = Test::Nginx->new()->has(qw/http sub/)->plan(2)
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
28 ->write_file_expand('nginx.conf', <<'EOF');
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
29
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
30 %%TEST_GLOBALS%%
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
31
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
32 daemon off;
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
33
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
34 events {
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
35 }
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
36
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
37 http {
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
38 %%TEST_GLOBALS_HTTP%%
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
39
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
40 server {
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
41 listen 127.0.0.1:8080;
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
42 server_name localhost;
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
43
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
44 proxy_buffering off;
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
45 proxy_http_version 1.1;
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
46
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
47 sub_filter_types *;
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
48
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
49 location /partial {
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
50 proxy_pass http://127.0.0.1:8081;
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
51 sub_filter za ZA;
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
52 }
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
53
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
54 location /negative {
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
55 proxy_pass http://127.0.0.1:8081;
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
56 sub_filter ab AB;
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
57 }
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
58 }
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
59 }
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
60
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
61 EOF
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
62
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
63 $t->run_daemon(\&http_daemon);
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
64 $t->run()->waitforsocket('127.0.0.1:' . port(8081));
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
65
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
66 ###############################################################################
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
67
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
68 # partial match: the last byte matching pattern is buffered
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
69
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
70 like(http_get('/partial'), qr/xy$/, 'partial match');
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
71
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
72 # no partial match: an entire buffer is sent as is without buffering
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
73
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
74 TODO: {
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
75 local $TODO = 'not yet' unless $t->has_version('1.11.2');
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
76
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
77 like(http_get('/negative'), qr/xyz/, 'negative match');
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
78
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
79 }
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
80
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
81 ###############################################################################
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
82
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
83 sub http_daemon {
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
84 my $server = IO::Socket::INET->new(
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
85 Proto => 'tcp',
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
86 LocalHost => '127.0.0.1:' . port(8081),
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
87 Listen => 5,
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
88 Reuse => 1
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
89 )
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
90 or die "Can't create listening socket: $!\n";
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
91
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
92 local $SIG{PIPE} = 'IGNORE';
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
93
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
94 while (my $client = $server->accept()) {
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
95 $client->autoflush(1);
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
96
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
97 while (<$client>) {
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
98 last if /^\x0d?\x0a?$/;
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
99 }
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
100
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
101 print $client
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
102 "HTTP/1.1 200 OK" . CRLF .
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
103 "Content-Length: 10" . CRLF . CRLF .
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
104 "xyz";
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
105 }
e17ffab3febc Tests: sub_filter tests with buffering.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
106 }