annotate t/delay_body.t @ 0:a386f95c5ae9

Initial module skeleton. Mostly based on catch body filter. Does not work yet.
author Maxim Dounin <mdounin@mdounin.ru>
date Tue, 17 Aug 2021 22:51:56 +0300
parents
children 7c2d64d9c656
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
1 #!/usr/bin/perl
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
2
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
3 # (C) Maxim Dounin
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
4
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
5 # Tests for delay body filter module.
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
6
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
7 ###############################################################################
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
8
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
9 use warnings;
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
10 use strict;
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
11
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
12 use Test::More;
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
13 use Test::Nginx;
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
14
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
15 use Socket qw/ CRLF /;
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
16
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
17 ###############################################################################
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
18
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
19 select STDERR; $| = 1;
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
20 select STDOUT; $| = 1;
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
21
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
22 my $t = Test::Nginx->new()->has(qw/http proxy rewrite/)
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
23 ->write_file_expand('nginx.conf', <<'EOF');
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
24
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
25 %%TEST_GLOBALS%%
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
26
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
27 daemon off;
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
28
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
29 events {
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
30 }
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
31
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
32 http {
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
33 %%TEST_GLOBALS_HTTP%%
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
34
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
35 server {
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
36 listen 127.0.0.1:8080;
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
37 server_name localhost;
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
38 location / {
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
39 delay_body 1s;
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
40 add_header X-Time $request_time;
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
41 proxy_pass http://127.0.0.1:8080/empty;
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
42 }
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
43 location /empty {
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
44 return 200 "test response body\n";
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
45 }
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
46 }
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
47 }
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
48
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
49 EOF
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
50
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
51 $t->try_run('no delay_body')->plan(4);
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
52
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
53 ###############################################################################
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
54
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
55 like(get_body('/', '123456'), qr/200 OK.*X-Time: 1/ms, 'delay');
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
56 like(get_body('/empty', '123456'), qr/200 OK.*X-Time: 0/ms, 'no delay');
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
57
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
58 # pipelining
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
59
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
60 like(get_body('/', '123456', '12345X'),
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
61 qr/200 OK.*X-Time: 1.*200 OK.*X-Time: 1/ms,
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
62 'pipelining delay');
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
63
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
64 # pipelining with chunked
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
65
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
66 like(get_chunked('/', '123456', '12345X'),
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
67 qr/200 OK.*X-Time: 1.*200 OK.*X-Time: 1/ms,
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
68 'pipelining chunked delay');
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
69
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
70 ###############################################################################
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
71
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
72 sub get_body {
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
73 my $uri = shift;
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
74 my $last = pop;
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
75 return http( join '', (map {
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
76 my $body = $_;
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
77 "GET $uri HTTP/1.1" . CRLF
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
78 . "Host: localhost" . CRLF
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
79 . "Content-Length: " . (length $body) . CRLF . CRLF
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
80 . $body
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
81 } @_),
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
82 "GET $uri HTTP/1.1" . CRLF
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
83 . "Host: localhost" . CRLF
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
84 . "Connection: close" . CRLF
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
85 . "Content-Length: " . (length $last) . CRLF . CRLF
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
86 . $last
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
87 );
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
88 }
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
89
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
90 sub get_chunked {
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
91 my $uri = shift;
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
92 my $last = pop;
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
93 return http( join '', (map {
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
94 my $body = $_;
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
95 "GET $uri HTTP/1.1" . CRLF
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
96 . "Host: localhost" . CRLF
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
97 . "Transfer-Encoding: chunked" . CRLF . CRLF
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
98 . sprintf("%x", length $body) . CRLF
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
99 . $body . CRLF
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
100 . "0" . CRLF . CRLF
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
101 } @_),
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
102 "GET $uri HTTP/1.1" . CRLF
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
103 . "Host: localhost" . CRLF
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
104 . "Connection: close" . CRLF
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
105 . "Transfer-Encoding: chunked" . CRLF . CRLF
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
106 . sprintf("%x", length $last) . CRLF
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
107 . $last . CRLF
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
108 . "0" . CRLF . CRLF
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
109 );
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
110 }
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
111
a386f95c5ae9 Initial module skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
112 ###############################################################################