view not_modified.t @ 1858:cdcd75657e52

Tests: added has_feature() tests for IO::Socket::SSL. The following distinct features supported: - "socket_ssl", which requires IO::Socket::SSL and also implies existance of the IO::Socket::SSL::SSL_VERIFY_NONE() symbol. It is used by most of the tests. - "socket_ssl_sni", which requires IO::Socket::SSL with the can_client_sni() function (1.84), and SNI support available in Net::SSLeay and the OpenSSL library being used. Used by ssl_sni.t, ssl_sni_sessions.t, stream_ssl_preread.t. Additional Net::SSLeay testing is believed to be unneeded and was removed. - "socket_ssl_alpn", which requires IO::Socket::SSL with ALPN support (2.009), and ALPN support in Net::SSLeay and the OpenSSL library being used. Used by h2_ssl.t, h2_ssl_verify_client.t, stream_ssl_alpn.t, stream_ssl_preread_alpn.t. - "socket_ssl_sslversion", which requires IO::Socket::SSL with the get_sslversion() and get_sslversion_int() methods (1.964). Used by mail_imap_ssl.t. - "socket_ssl_reused", which requires IO::Socket::SSL with the get_session_reused() method (2.057). To be used in the following patches. This makes it possible to simplify and unify various SSL tests.
author Maxim Dounin <mdounin@mdounin.ru>
date Thu, 18 May 2023 18:07:02 +0300
parents 882267679006
children
line wrap: on
line source

#!/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(15)
	->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');
$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_inm('/t', 'W/' . $etag), qr/ 304 /, 'if-none-match weak');
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');
like(http_get_im('/t', 'W/' . $etag), qr/ 412 /, 'if-match weak fail');

# server MUST ignore precondition if its response wouldn't be 2xx or 412

like(http_get_im('/nx', '"foo"'), qr/ 404 /, 'if-match ignored with 404');

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

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
}

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