|  | #!/usr/bin/perl | 
|  |  | 
|  | # (C) Maxim Dounin | 
|  |  | 
|  | # Tests for range filter module with If-Range header. | 
|  |  | 
|  | ############################################################################### | 
|  |  | 
|  | use warnings; | 
|  | use strict; | 
|  |  | 
|  | use Test::More; | 
|  |  | 
|  | BEGIN { use FindBin; chdir($FindBin::Bin); } | 
|  |  | 
|  | use lib 'lib'; | 
|  | use Test::Nginx; | 
|  |  | 
|  | ############################################################################### | 
|  |  | 
|  | select STDERR; $| = 1; | 
|  | select STDOUT; $| = 1; | 
|  |  | 
|  | my $t = Test::Nginx->new()->has(qw/http/)->plan(8); | 
|  |  | 
|  | $t->write_file_expand('nginx.conf', <<'EOF'); | 
|  |  | 
|  | %%TEST_GLOBALS%% | 
|  |  | 
|  | daemon off; | 
|  |  | 
|  | events { | 
|  | } | 
|  |  | 
|  | http { | 
|  | %%TEST_GLOBALS_HTTP%% | 
|  |  | 
|  | server { | 
|  | listen       127.0.0.1:8080; | 
|  | server_name  localhost; | 
|  |  | 
|  | location /t2.html { | 
|  | add_header Last-Modified ""; | 
|  | } | 
|  |  | 
|  | location /t3.html { | 
|  | add_header Last-Modified "Mon, 28 Sep 1970 06:00:00 GMT"; | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | EOF | 
|  |  | 
|  | $t->write_file('t1.html', | 
|  | join('', map { sprintf "X%03dXXXXXX", $_ } (0 .. 99))); | 
|  | $t->write_file('t2.html', | 
|  | join('', map { sprintf "X%03dXXXXXX", $_ } (0 .. 99))); | 
|  | $t->write_file('t3.html', | 
|  | join('', map { sprintf "X%03dXXXXXX", $_ } (0 .. 99))); | 
|  | $t->run(); | 
|  |  | 
|  | ############################################################################### | 
|  |  | 
|  | my $t1; | 
|  |  | 
|  | # If-Range | 
|  |  | 
|  | $t1 = http_get_range('/t1.html', "Range: bytes=0-9\nIf-Range: wrong"); | 
|  | like($t1, qr/200 OK/, 'if-range wrong'); | 
|  | like($t1, qr/Last-Modified: /, 'if-range wrong - last modified'); | 
|  |  | 
|  | $t1 =~ m/Last-Modified: (.*)/m; | 
|  | my $last = $1; | 
|  |  | 
|  | $t1 = http_get_range('/t1.html', "Range: bytes=0-9\nIf-Range: $last"); | 
|  | like($t1, qr/ 206 /, 'if-range'); | 
|  |  | 
|  | # If-Range + add_header Last-Modified "" | 
|  |  | 
|  | $t1 = http_get_range('/t2.html', "Range: bytes=0-9\nIf-Range: wrong"); | 
|  | like($t1, qr/200 OK/, 'if-range notime'); | 
|  | unlike($t1, qr/Last-Modified: /, 'if-range notime - no last modified'); | 
|  |  | 
|  | # If-Range + add_header Last-Modified "Mon, 28 Sep 1970 06:00:00 GMT" | 
|  |  | 
|  | $t1 = http_get_range('/t3.html', "Range: bytes=0-9\nIf-Range: wrong"); | 
|  | like($t1, qr/200 OK/, 'if-range time wrong'); | 
|  | like($t1, qr/Last-Modified: Mon, 28 Sep 1970 06:00:00 GMT/, | 
|  | 'if-range time wrong - last modified'); | 
|  |  | 
|  | $t1 = http_get_range('/t3.html', | 
|  | "Range: bytes=0-9\nIf-Range: Mon, 28 Sep 1970 06:00:00 GMT"); | 
|  | like($t1, qr/ 206 /, 'if-range time'); | 
|  |  | 
|  | ############################################################################### | 
|  |  | 
|  | sub http_get_range { | 
|  | my ($url, $extra) = @_; | 
|  | return http(<<EOF); | 
|  | GET $url HTTP/1.1 | 
|  | Host: localhost | 
|  | Connection: close | 
|  | $extra | 
|  |  | 
|  | EOF | 
|  | } | 
|  |  | 
|  | ############################################################################### |