annotate range-flv.t @ 103:4ae2198b97ec

Tests: limit_req tests for 0.8.18 changes and bug. 1. Make sure rejected requests are not counted, as leaky bucket algorithm suggests (finally correctly done in 0.8.18). 2. Make sure negative excess values are handled properly (bug appeared in 0.8.18, fixed in 0.8.19).
author Maxim Dounin <mdounin@mdounin.ru>
date Fri, 09 Oct 2009 21:05:42 +0400
parents 726c3c2a8b8c
children 1c0ec30614c6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
33
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
1 #!/usr/bin/perl
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
2
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
3 # (C) Maxim Dounin
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
4
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
5 # Tests for range filter module.
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
6
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
7 ###############################################################################
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
8
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
9 use warnings;
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
10 use strict;
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
11
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
12 use Test::More;
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
13
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
14 BEGIN { use FindBin; chdir($FindBin::Bin); }
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
15
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
16 use lib 'lib';
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
17 use Test::Nginx;
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
18
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
19 ###############################################################################
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
20
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
21 select STDERR; $| = 1;
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
22 select STDOUT; $| = 1;
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
23
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
24 my $t = Test::Nginx->new()->has('flv')->plan(12);
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
25
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
26 $t->write_file_expand('nginx.conf', <<'EOF');
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
27
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
28 master_process off;
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
29 daemon off;
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
30
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
31 events {
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
32 }
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
33
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
34 http {
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
35 access_log off;
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
36 root %%TESTDIR%%;
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
37
35
7bf0e8a1d66c Tests: always define temp paths.
Maxim Dounin <mdounin@mdounin.ru>
parents: 33
diff changeset
38 client_body_temp_path %%TESTDIR%%/client_body_temp;
7bf0e8a1d66c Tests: always define temp paths.
Maxim Dounin <mdounin@mdounin.ru>
parents: 33
diff changeset
39 fastcgi_temp_path %%TESTDIR%%/fastcgi_temp;
7bf0e8a1d66c Tests: always define temp paths.
Maxim Dounin <mdounin@mdounin.ru>
parents: 33
diff changeset
40 proxy_temp_path %%TESTDIR%%/proxy_temp;
7bf0e8a1d66c Tests: always define temp paths.
Maxim Dounin <mdounin@mdounin.ru>
parents: 33
diff changeset
41
33
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
42 server {
45
d68b85def521 Tests: use 127.0.0.1 instead of localhost.
Maxim Dounin <mdounin@mdounin.ru>
parents: 35
diff changeset
43 listen 127.0.0.1:8080;
33
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
44 server_name localhost;
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
45 location / {
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
46 flv;
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
47 }
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
48 }
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
49 }
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
50
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
51 EOF
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
52
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
53 $t->write_file('t1.flv',
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
54 join('', map { sprintf "X%03dXXXXXX", $_ } (0 .. 99)));
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
55 $t->run();
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
56
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
57 ###############################################################################
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
58
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
59 my $t1;
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
60
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
61 # FLV has 13 byte header at start.
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
62
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
63 $t1 = http_get_range('/t1.flv?start=100', 'Range: bytes=0-9');
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
64 like($t1, qr/206/, 'first bytes - 206 partial reply');
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
65 like($t1, qr/Content-Length: 10/, 'first bytes - correct length');
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
66 like($t1, qr/Content-Range: bytes 0-9\/913/, 'first bytes - content range');
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
67 like($t1, qr/^FLV.{7}$/m, 'first bytes - correct content');
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
68
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
69 $t1 = http_get_range('/t1.flv?start=100', 'Range: bytes=-10');
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
70 like($t1, qr/206/, 'final bytes - 206 partial reply');
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
71 like($t1, qr/Content-Length: 10/, 'final bytes - content length');
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
72 like($t1, qr/Content-Range: bytes 903-912\/913/,
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
73 'final bytes - content range');
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
74 like($t1, qr/^X099XXXXXX$/m, 'final bytes - correct content');
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
75
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
76 $t1 = http_get_range('/t1.flv?start=100', 'Range: bytes=0-99');
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
77 like($t1, qr/206/, 'multi buffers - 206 partial reply');
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
78 like($t1, qr/Content-Length: 100/, 'multi buffers - content length');
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
79 like($t1, qr/Content-Range: bytes 0-99\/913/, 'multi buffers - content range');
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
80 like($t1, qr/^FLV.{10}X010XXXXXX(X01[1-7]XXXXXX){7}X018XXX$/m,
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
81 'multi buffers - correct content');
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
82
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
83 ###############################################################################
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
84
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
85 sub http_get_range {
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
86 my ($url, $extra) = @_;
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
87 return http(<<EOF);
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
88 GET $url HTTP/1.1
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
89 Host: localhost
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
90 Connection: close
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
91 $extra
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
92
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
93 EOF
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
94 }
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
95
4f57d57543e1 Tests: range filter tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
96 ###############################################################################