#!/usr/bin/perl

# (C) Maxim Dounin

# Tests for not modified filter module.

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

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('http')->plan(12)
	->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 / {
            if_modified_since before;
        }
    }
}

EOF

$t->write_file('t', '');

$t->run();

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

like(http_get_ims('/t', 'Wed, 08 Jul 2037 22:53:52 GMT'), qr/304/,
	'0x7F000000');
like(http_get_ims('/t', 'Tue, 19 Jan 2038 03:14:07 GMT'), qr/304/,
	'0x7FFFFFFF');

SKIP: {
	skip "only for 32-bit time_t", 2 if (gmtime(0xFFFFFFFF))[5] == 206;

	like(http_get_ims('/t', 'Tue, 19 Jan 2038 03:14:08 GMT'), qr/200/,
		'0x7FFFFFFF + 1');
	like(http_get_ims('/t', 'Fri, 25 Feb 2174 09:42:23 GMT'), qr/200/,
		'0x17FFFFFFF');
}

# If-Match, If-None-Match tests

my ($t1, $etag);

$t1 = http_get('/t');

SKIP: {
    skip "no etag support", 8 if $t1 !~ /ETag: (".*")/;
    $etag = $1;

    like(http_get_inm('/t', $etag), qr/304/, 'if-none-match');
    like(http_get_inm('/t', '"foo"'), qr/200/, 'if-none-match fail');
    like(http_get_inm('/t', '"foo", "bar", ' . $etag . ' , "baz"'), qr/304/,
	'if-none-match with complex list');
    like(http_get_inm('/t', '*'), qr/304/, 'if-none-match all');

    like(http_get_im('/t', $etag), qr/200/, 'if-match');
    like(http_get_im('/t', '"foo"'), qr/412/, 'if-match fail');
    like(http_get_im('/t', '"foo", "bar", ' . "\t" . $etag . ' , "baz"'),
	qr/200/, 'if-match with complex list');
    like(http_get_im('/t', '*'), qr/200/, 'if-match all');
}

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

sub http_get_ims {
	my ($url, $ims) = @_;
	return http(<<EOF);
GET $url HTTP/1.0
Host: localhost
If-Modified-Since: $ims

EOF
}

sub http_get_inm {
	my ($url, $inm) = @_;
	return http(<<EOF);
GET $url HTTP/1.0
Host: localhost
If-None-Match: $inm

EOF
}

sub http_get_im {
	my ($url, $inm) = @_;
	return http(<<EOF);
GET $url HTTP/1.0
Host: localhost
If-Match: $inm

EOF
}

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