#!/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' unless $t->has_version('1.3.3');

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' unless $t->has_version('1.3.3');

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
}

###############################################################################
