# HG changeset patch # User Maxim Dounin # Date 1316875456 -14400 # Node ID 20d3461de9daa9ec30dc8c41d0416b2bc3d4f8fe # Parent d099e407fff516fb75468d8bb08a840311a3d175 Tests: If-Range tests. diff --git a/range_if_range.t b/range_if_range.t new file mode 100644 --- /dev/null +++ b/range_if_range.t @@ -0,0 +1,122 @@ +#!/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"); + +TODO: { +local $TODO = 'not yet'; + +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"); + +TODO: { +local $TODO = 'not yet'; + +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(<