changeset 1381:97c8280de681

Tests: removed TODO and try_run() checks for legacy versions.
author Sergey Kandaurov <pluknet@nginx.com>
date Mon, 08 Oct 2018 15:30:39 +0300
parents f50c7d90f5c9
children cb1346b553aa
files access_log_none.t grpc.t grpc_next_upstream.t grpc_request_buffering.t grpc_ssl.t h2.t h2_headers.t h2_server_push.t h2_trailers.t headers.t index2.t mirror.t mirror_proxy.t proxy_bind_transparent_capability.t proxy_cache_error.t proxy_cache_use_stale.t proxy_cache_valid.t proxy_force_ranges.t proxy_limit_rate.t proxy_non_idempotent.t proxy_protocol2.t proxy_protocol2_port.t proxy_ssi_body.t proxy_upgrade.t realip_hostname.t secure_link.t slice.t ssl_client_escaped_cert.t ssl_sni_sessions.t ssl_verify_client.t stream_access_log_none.t stream_realip_hostname.t stream_ssl_preread_alpn.t stream_udp_wildcard.t stream_upstream_zone.t stream_upstream_zone_ssl.t subrequest_output_buffer_size.t trailers.t upstream_zone.t upstream_zone_ssl.t worker_shutdown_timeout_mail.t worker_shutdown_timeout_proxy_upgrade.t worker_shutdown_timeout_stream.t xslt_params.t
diffstat 44 files changed, 33 insertions(+), 194 deletions(-) [+]
line wrap: on
line diff
--- a/access_log_none.t
+++ b/access_log_none.t
@@ -22,7 +22,7 @@ use Test::Nginx;
 select STDERR; $| = 1;
 select STDOUT; $| = 1;
 
-my $t = Test::Nginx->new()->has(qw/http/)
+my $t = Test::Nginx->new()->has(qw/http/)->plan(1)
 	->write_file_expand('nginx.conf', <<'EOF');
 
 %%TEST_GLOBALS%%
@@ -47,7 +47,7 @@ http {
 
 EOF
 
-$t->try_run('no escape=none')->plan(1);
+$t->run();
 
 ###############################################################################
 
--- a/grpc.t
+++ b/grpc.t
@@ -24,7 +24,7 @@ select STDERR; $| = 1;
 select STDOUT; $| = 1;
 
 my $t = Test::Nginx->new()->has(qw/http rewrite http_v2 grpc/)
-	->has(qw/upstream_keepalive/);
+	->has(qw/upstream_keepalive/)->plan(105);
 
 $t->write_file_expand('nginx.conf', <<'EOF');
 
@@ -91,7 +91,7 @@ http {
 
 EOF
 
-$t->try_run('no grpc')->plan(105);
+$t->run();
 
 ###############################################################################
 
--- a/grpc_next_upstream.t
+++ b/grpc_next_upstream.t
@@ -23,7 +23,7 @@ use Test::Nginx;
 select STDERR; $| = 1;
 select STDOUT; $| = 1;
 
-my $t = Test::Nginx->new()->has(qw/http http_v2 grpc rewrite/);
+my $t = Test::Nginx->new()->has(qw/http http_v2 grpc rewrite/)->plan(9);
 
 $t->write_file_expand('nginx.conf', <<'EOF');
 
@@ -106,7 +106,7 @@ http {
 
 EOF
 
-$t->try_run('no grpc')->plan(9);
+$t->run();
 
 ###############################################################################
 
--- a/grpc_request_buffering.t
+++ b/grpc_request_buffering.t
@@ -23,7 +23,7 @@ use Test::Nginx::HTTP2;
 select STDERR; $| = 1;
 select STDOUT; $| = 1;
 
-my $t = Test::Nginx->new()->has(qw/http http_v2 grpc mirror proxy/);
+my $t = Test::Nginx->new()->has(qw/http http_v2 grpc mirror proxy/)->plan(12);
 
 $t->write_file_expand('nginx.conf', <<'EOF');
 
@@ -64,7 +64,7 @@ http {
 
 EOF
 
-$t->try_run('no grpc')->plan(12);
+$t->run();
 
 ###############################################################################
 
--- a/grpc_ssl.t
+++ b/grpc_ssl.t
@@ -29,7 +29,7 @@ my $t = Test::Nginx->new()->has(qw/http 
 $t->{_configure_args} =~ /OpenSSL ([\d\.]+)/;
 plan(skip_all => 'OpenSSL too old') unless defined $1 and $1 ge '1.0.2';
 
-$t->write_file_expand('nginx.conf', <<'EOF');
+$t->write_file_expand('nginx.conf', <<'EOF')->plan(33);
 
 %%TEST_GLOBALS%%
 
@@ -135,7 +135,7 @@ sleep 1 if $^O eq 'MSWin32';
 
 $t->write_file('password', 'client');
 
-$t->try_run('no grpc')->plan(33);
+$t->run();
 
 ###############################################################################
 
--- a/h2.t
+++ b/h2.t
@@ -226,14 +226,9 @@ is($frame->{flags}, 1, 'SETTINGS flags a
 	{ type => 'GOAWAY' }
 ]);
 
-TODO: {
-local $TODO = 'not yet' unless $t->has_version('1.13.2');
-
 ($frame) = grep { $_->{type} eq 'SETTINGS' } @$frames;
 is($frame, undef, 'SETTINGS PROTOCOL_ERROR - no ack');
 
-}
-
 ($frame) = grep { $_->{type} eq 'GOAWAY' } @$frames;
 ok($frame, 'SETTINGS PROTOCOL_ERROR - GOAWAY');
 
@@ -839,9 +834,6 @@ is(@$frames[0]->{length}, 1, 'positive w
 
 }
 
-TODO: {
-local $TODO = 'not yet' unless $t->has_version('1.13.2');
-
 $s = Test::Nginx::HTTP2->new();
 $s->h2_window(2**30);
 $s->h2_settings(0, 0x4 => 2**30);
@@ -855,8 +847,6 @@ sleep 1;
 $lengths = join ' ', map { $_->{length} } @$frames;
 unlike($lengths, qr/16384 0 16384/, 'SETTINGS ack after queued DATA');
 
-}
-
 # ask write handler in sending large response
 
 SKIP: {
@@ -926,9 +916,6 @@ is($data[0]->{length}, 2**15, 'max frame
 # Expanding available stream window should not result in emitting
 # new frames before remaining SETTINGS parameters were applied.
 
-TODO: {
-local $TODO = 'not yet' unless $t->has_version('1.13.2');
-
 $s = Test::Nginx::HTTP2->new();
 $s->h2_window(2**17);
 $s->h2_settings(0, 0x4 => 42);
@@ -943,8 +930,6 @@ local $TODO = 'not yet' unless $t->has_v
 $lengths = join ' ', map { $_->{length} } @data;
 is($lengths, '32768 32768 38', 'multiple SETTINGS');
 
-}
-
 # stream multiplexing + WINDOW_UPDATE
 
 $s = Test::Nginx::HTTP2->new();
--- a/h2_headers.t
+++ b/h2_headers.t
@@ -655,9 +655,6 @@ ok($frame, 'response header - parts');
 
 SKIP: {
 skip 'response header failed', 1 unless $frame;
-skip 'broken sendfile', 1 if $^O eq 'freebsd' and
-	$Config{osvers} =~ '11.0-release' and
-	$t->read_file('nginx.conf') =~ /sendfile on/;
 
 is(length join('', @{$frame->{headers}->{'x-longheader'}}), 98304,
 	'response header - headers');
@@ -958,9 +955,6 @@ is($frame->{headers}->{'x-referer'}, 'se
 
 # missing mandatory request header ':scheme'
 
-TODO: {
-local $TODO = 'not yet' unless $t->has_version('1.13.2');
-
 $s = Test::Nginx::HTTP2->new();
 $sid = $s->new_stream({ headers => [
 	{ name => ':method', value => 'GET', mode => 0 },
@@ -971,8 +965,6 @@ local $TODO = 'not yet' unless $t->has_v
 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
 is($frame->{headers}->{':status'}, 400, 'incomplete headers');
 
-}
-
 # empty request header ':authority'
 
 $s = Test::Nginx::HTTP2->new();
@@ -988,17 +980,12 @@ is($frame->{headers}->{':status'}, 400, 
 
 # client sent invalid :path header
 
-TODO: {
-local $TODO = 'not yet' unless $t->has_version('1.13.9');
-
 $sid = $s->new_stream({ path => 't1.html' });
 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
 
 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
 is($frame->{headers}->{':status'}, 400, 'invalid path');
 
-}
-
 ###############################################################################
 
 sub http_daemon {
--- a/h2_server_push.t
+++ b/h2_server_push.t
@@ -23,7 +23,7 @@ use Test::Nginx::HTTP2;
 select STDERR; $| = 1;
 select STDOUT; $| = 1;
 
-my $t = Test::Nginx->new()->has(qw/http http_v2 proxy rewrite gzip/)
+my $t = Test::Nginx->new()->has(qw/http http_v2 proxy rewrite gzip/)->plan(42)
 	->write_file_expand('nginx.conf', <<'EOF');
 
 %%TEST_GLOBALS%%
@@ -134,7 +134,7 @@ EOF
 $t->write_file('t2', 'SEE-THIS');
 $t->write_file('explf', join('', map { sprintf "X%06dXXX", $_ } (1 .. 6553)));
 
-$t->try_run('no http2_push')->plan(42);
+$t->run();
 
 ###############################################################################
 
--- a/h2_trailers.t
+++ b/h2_trailers.t
@@ -23,7 +23,7 @@ use Test::Nginx::HTTP2;
 select STDERR; $| = 1;
 select STDOUT; $| = 1;
 
-my $t = Test::Nginx->new()->has(qw/http http_v2/)
+my $t = Test::Nginx->new()->has(qw/http http_v2/)->plan(22)
 	->write_file_expand('nginx.conf', <<'EOF');
 
 %%TEST_GLOBALS%%
@@ -62,7 +62,7 @@ EOF
 $t->write_file('index.html', 'SEE-THIS');
 $t->write_file('empty', '');
 $t->write_file('continuation', 'SEE-THIS');
-$t->try_run('no add_trailer')->plan(22);
+$t->run();
 
 ###############################################################################
 
--- a/headers.t
+++ b/headers.t
@@ -157,14 +157,9 @@ like(http_get('/modified'), qr/max-age=2
 
 # "expires modified" with proxy
 
-TODO: {
-local $TODO = 'not yet' unless $t->has_version('1.13.5');
-
 like(http_get('/modified/proxy'), qr/Expires: Mon, 28 Sep 1970 06:34:08 GMT/,
 	'expires modified proxy');
 
-}
-
 # expires with variables
 
 like(http_get('/var?e=epoch'), qr/Expires:.*1970/, 'expires var epoch');
--- a/index2.t
+++ b/index2.t
@@ -23,7 +23,7 @@ use Test::Nginx;
 select STDERR; $| = 1;
 select STDOUT; $| = 1;
 
-my $t = Test::Nginx->new()->has(qw/http/)
+my $t = Test::Nginx->new()->has(qw/http/)->plan(1)
 	->write_file_expand('nginx.conf', <<'EOF');
 
 %%TEST_GLOBALS%%
@@ -52,7 +52,7 @@ EOF
 
 $t->write_file('localhosthtml', 'varbody');
 
-$t->try_run('unsupported token')->plan(1);
+$t->run();
 
 ###############################################################################
 
--- a/mirror.t
+++ b/mirror.t
@@ -22,7 +22,7 @@ use Test::Nginx;
 select STDERR; $| = 1;
 select STDOUT; $| = 1;
 
-my $t = Test::Nginx->new()->has(qw/http mirror/);
+my $t = Test::Nginx->new()->has(qw/http mirror/)->plan(8);
 
 $t->write_file_expand('nginx.conf', <<'EOF');
 
@@ -67,7 +67,7 @@ EOF
 $t->write_file('index.html', '');
 $t->write_file('many', '');
 $t->write_file('off', '');
-$t->try_run('no mirror')->plan(8);
+$t->run();
 
 ###############################################################################
 
--- a/mirror_proxy.t
+++ b/mirror_proxy.t
@@ -24,7 +24,7 @@ select STDOUT; $| = 1;
 
 my $t = Test::Nginx->new()->has(qw/http proxy mirror rewrite limit_req/);
 
-$t->write_file_expand('nginx.conf', <<'EOF');
+$t->write_file_expand('nginx.conf', <<'EOF')->plan(7);
 
 %%TEST_GLOBALS%%
 
@@ -81,7 +81,7 @@ http {
 
 EOF
 
-$t->try_run('no mirror')->plan(7);
+$t->run();
 
 ###############################################################################
 
--- a/proxy_bind_transparent_capability.t
+++ b/proxy_bind_transparent_capability.t
@@ -63,8 +63,6 @@ http {
 
 EOF
 
-plan(skip_all => 'no capability support yet') unless $t->has_version('1.13.8');
-
 $t->run()->plan(1);
 
 ###############################################################################
--- a/proxy_cache_error.t
+++ b/proxy_cache_error.t
@@ -83,6 +83,4 @@ like(http_head('/big.html'), qr/200 OK/,
 # leading to an attempt to return additional error response and
 # the "header already sent" alert; fixed in 93abb5a855d6
 
-$t->todo_alerts() unless $t->has_version('1.13.9');
-
 ###############################################################################
--- a/proxy_cache_use_stale.t
+++ b/proxy_cache_use_stale.t
@@ -220,9 +220,6 @@ like(http_get('/updating/t2.html'), qr/S
 # before 1.13.1, if stale response was not sent in one pass, its remaining
 # part was blocked and not sent until background update has been finished
 
-TODO: {
-local $TODO = 'not yet' unless $t->has_version('1.13.1');
-
 $t->write_file('t7.html', 'SEE-THAT' x 1024);
 
 my $r = read_all(get('/t7.html?lim=1', 'max-age=1', start => 1));
@@ -234,8 +231,6 @@ like($r, qr/STALE.*^(SEE-THIS){1024}$/ms
 $r = read_all(http_get('/ssi.html', start => 1));
 like($r, qr/^xxx (SEE-THIS){1024} xxx$/ms, 's-w-r - not blocked in subrequest');
 
-}
-
 # "aio_write" is used to produce "open socket ... left in connection" alerts.
 
 $t->todo_alerts() if $t->read_file('nginx.conf') =~ /aio_write on/
@@ -255,15 +250,9 @@ like(http_get('/t2.html?if=1'), qr/HIT/,
 get('/escape.htm%6C', 'max-age=1');
 get('/escape html', 'max-age=1');
 
-TODO: {
-local $TODO = 'not yet' unless $t->has_version('1.13.8');
-
 like(http_get('/escape.htm%6C'), qr/HIT/, 'escaped after escaped');
 like(http_get('/escape.html'), qr/MISS/, 'unescaped after escaped');
 like(http_get('/escape html'), qr/HIT/, 'space after escaped space');
-
-}
-
 like(http_get('/escape%20html'), qr/HIT/, 'escaped space after escaped space');
 
 ###############################################################################
--- a/proxy_cache_valid.t
+++ b/proxy_cache_valid.t
@@ -106,26 +106,16 @@ like(get('/t2.html', 'X-CC: max-age=1'),
 
 $t->write_file('t2.html', 'NOOP');
 
-TODO: {
-local $TODO = 'not yet' unless $t->has_version('1.13.6');
-
 like(http_get('/t2.html'), qr/403 Forbidden/, 'error cached from max-age');
 
-}
-
 # ticket #1382, cache item "error" field was set regardless of u->cacheable.
 
 like(http_get('/'), qr/403 Forbidden/, 'error no-cache');
 
 $t->write_file('index.html', '');
 
-TODO: {
-local $TODO = 'not yet' unless $t->has_version('1.13.6');
-
 like(http_get('/'), qr/200 OK/, 'error no-cache - not cacheable');
 
-}
-
 ###############################################################################
 
 sub get {
--- a/proxy_force_ranges.t
+++ b/proxy_force_ranges.t
@@ -94,15 +94,10 @@ like(http_get_range('/cache/t.html', 'Ra
 
 # If-Range HTTP-date request
 
-TODO: {
-local $TODO = 'not yet' unless $t->has_version('1.13.5');
-
 like(http_get_range('/proxy/t.html',
 	"Range: bytes=4-\nIf-Range: Mon, 28 Sep 1970 06:00:00 GMT"),
 	qr/^THIS/m, 'if-range last-modified proxy');
 
-}
-
 # If-Range entity-tag request
 
 like(http_get_range('/proxy/t.html',
--- a/proxy_limit_rate.t
+++ b/proxy_limit_rate.t
@@ -87,12 +87,6 @@ like($r, qr/^(XXXXXXXXXX){4000}\x0d?\x0a
 # the read timer used to be a delay timer in the next request
 
 like(http_get('/keepalive'), qr/200 OK/, 'keepalive');
-
-TODO: {
-local $TODO = 'not yet' unless $t->has_version('1.13.8');
-
 like(http_get('/keepalive'), qr/200 OK/, 'keepalive 2');
 
-}
-
 ###############################################################################
--- a/proxy_non_idempotent.t
+++ b/proxy_non_idempotent.t
@@ -106,14 +106,8 @@ like(http_post('/'), qr/X-IP: (\S+)\x0d?
 # in particular, not emit builtin error page due to next upstream
 
 like(http_get('/404'), qr/X-IP: (\S+), \1.*SEE-THIS/s, 'get 404');
-
-TODO: {
-local $TODO = 'not yet' unless $t->has_version('1.13.11');
-
 like(http_post('/404'), qr/X-IP: (\S++)(?! ).*SEE-THIS/s, 'post 404');
 
-}
-
 # with "proxy_next_upstream non_idempotent" there is no
 # difference between idempotent and non-idempotent requests,
 # non-idempotent requests are retried as usual
--- a/proxy_protocol2.t
+++ b/proxy_protocol2.t
@@ -24,8 +24,6 @@ select STDOUT; $| = 1;
 
 my $t = Test::Nginx->new()->has(qw/http access realip/);
 
-plan(skip_all => 'no proxy protocol v2') unless $t->has_version('1.13.11');
-
 $t->write_file_expand('nginx.conf', <<'EOF')->plan(21);
 
 %%TEST_GLOBALS%%
--- a/proxy_protocol2_port.t
+++ b/proxy_protocol2_port.t
@@ -24,8 +24,6 @@ select STDOUT; $| = 1;
 
 my $t = Test::Nginx->new()->has(qw/http realip/);
 
-plan(skip_all => 'no proxy protocol v2') unless $t->has_version('1.13.11');
-
 $t->write_file_expand('nginx.conf', <<'EOF')->plan(8);
 
 %%TEST_GLOBALS%%
--- a/proxy_ssi_body.t
+++ b/proxy_ssi_body.t
@@ -58,8 +58,6 @@ EOF
 $t->write_file('ssi.html', 'X<!--# include virtual="test.html" -->X');
 $t->write_file('test.html', 'YY');
 
-$t->todo_alerts() if $t->read_file('nginx.conf') =~ /sendfile on/
-	and !$t->has_version('1.13.4');
 $t->run();
 
 ###############################################################################
@@ -67,14 +65,9 @@ EOF
 # Request body cache file is released once a response is got.
 # If later a subrequest tries to use body, it fails.
 
-TODO: {
-local $TODO = 'prematurely pruned' unless $t->has_version('1.13.4');
-
 like(http_get_body('/proxy/ssi.html', "1234567890"), qr/^XYYX$/m,
 	'body in file in proxied subrequest');
 
-}
-
 ###############################################################################
 
 sub http_get_body {
--- a/proxy_upgrade.t
+++ b/proxy_upgrade.t
@@ -137,15 +137,9 @@ ok(!$s, "handshake noupgrade");
 
 # connection upgrade in subrequests shouldn't cause a segfault
 
-SKIP: {
-skip 'leaves coredump', 1 unless $t->has_version('1.13.7')
-	or $ENV{TEST_NGINX_UNSAFE};
-
 $s = upgrade_connect(uri => '/ssi.html');
 ok(!$s, "handshake in subrequests");
 
-}
-
 # bytes sent on upgraded connection
 # verify with 1) data actually read by client, 2) expected data from backend
 
--- a/realip_hostname.t
+++ b/realip_hostname.t
@@ -67,7 +67,7 @@ EOF
 
 $t->write_file('1', '');
 $t->write_file('2', '');
-$t->try_run('no realip hostnames support');
+$t->run();
 
 plan(skip_all => 'no 127.0.0.1 on host')
 	if http_get('/1') !~ /X-IP: 127.0.0.1/m;
--- a/secure_link.t
+++ b/secure_link.t
@@ -132,16 +132,8 @@ like(http_get('/test.html?hash=q-5vpkjBk
 	qr/PASSED/, 'request md5');
 like(http_get('/test.html?hash=q-5vpkjBkRXXtkUMXiJVHA'),
 	qr/PASSED/, 'request md5 no padding');
-
-TODO: {
-todo_skip 'stack-buffer-overflow', 1 unless $ENV{TEST_NGINX_UNSAFE}
-	or $t->has_version('1.13.5');
-
 like(http_get('/test.html?hash=q-5vpkjBkRXXtkUMXiJVHAQQ'),
 	qr/^HTTP.*403/, 'request md5 too long');
-
-}
-
 like(http_get('/test.html?hash=q-5vpkjBkRXXtkUMXiJVHA-TOOLONG'),
 	qr/^HTTP.*403/, 'request md5 too long encoding');
 like(http_get('/test.html?hash=BADHASHLENGTH'),
--- a/slice.t
+++ b/slice.t
@@ -233,16 +233,11 @@ like($r, qr/^34$/m, 'if-range - correct 
 
 # respect Last-Modified from non-cacheable response with If-Range
 
-TODO: {
-local $TODO = 'not yet' unless $t->has_version('1.13.5');
-
 my ($lm) = http_get('/t') =~ /Last-Modified: (.*)/;
 $r = get('/proxy/t', "Range: bytes=3-4\nIf-Range: $lm");
 like($r, qr/ 206 /, 'if-range last-modified proxy - 206 partial reply');
 like($r, qr/^34$/m, 'if-range last-modified proxy - correct content');
 
-}
-
 $r = get('/cache/t?ifb', "Range: bytes=3-4\nIf-Range: bad");
 like($r, qr/ 200 /, 'if-range bad - 200 ok');
 like($r, qr/^0123456789abcdef$/m, 'if-range bad - correct content');
--- a/ssl_client_escaped_cert.t
+++ b/ssl_client_escaped_cert.t
@@ -28,7 +28,7 @@ eval { IO::Socket::SSL::SSL_VERIFY_NONE(
 plan(skip_all => 'IO::Socket::SSL too old') if $@;
 
 my $t = Test::Nginx->new()->has(qw/http http_ssl rewrite/)
-	->has_daemon('openssl');
+	->has_daemon('openssl')->plan(3);
 
 $t->write_file_expand('nginx.conf', <<'EOF');
 
@@ -79,7 +79,7 @@ foreach my $name ('localhost') {
 		or die "Can't create certificate for $name: $!\n";
 }
 
-$t->try_run('no ssl_client_escaped_cert')->plan(3);
+$t->run();
 
 ###############################################################################
 
--- a/ssl_sni_sessions.t
+++ b/ssl_sni_sessions.t
@@ -23,8 +23,6 @@ select STDOUT; $| = 1;
 
 my $t = Test::Nginx->new()->has(qw/http http_ssl sni rewrite/);
 
-plan(skip_all => 'win32') if $^O eq 'MSWin32' and !$t->has_version('1.13.5');
-
 $t->has_daemon('openssl')->write_file_expand('nginx.conf', <<'EOF');
 
 %%TEST_GLOBALS%%
--- a/ssl_verify_client.t
+++ b/ssl_verify_client.t
@@ -139,14 +139,7 @@ sleep 1 if $^O eq 'MSWin32';
 
 like(http_get('/t'), qr/x:x/, 'plain connection');
 like(get('on'), qr/400 Bad Request/, 'no cert');
-
-TODO: {
-todo_skip 'leaves coredump', 1 unless $t->has_version('1.13.9');
-
 like(get('no_context'), qr/400 Bad Request/, 'no server cert');
-
-}
-
 like(get('optional'), qr/NONE:x/, 'no optional cert');
 like(get('optional', '1.example.com'), qr/400 Bad/, 'bad optional cert');
 like(get('optional_no_ca', '1.example.com'), qr/FAILED.*BEGIN/,
--- a/stream_access_log_none.t
+++ b/stream_access_log_none.t
@@ -22,7 +22,7 @@ use Test::Nginx;
 select STDERR; $| = 1;
 select STDOUT; $| = 1;
 
-my $t = Test::Nginx->new()->has(qw/stream stream_map stream_return/)
+my $t = Test::Nginx->new()->has(qw/stream stream_map stream_return/)->plan(1)
 	->write_file_expand('nginx.conf', <<'EOF');
 
 %%TEST_GLOBALS%%
@@ -52,7 +52,7 @@ stream {
 
 EOF
 
-$t->try_run('no escape=none')->plan(1);
+$t->run();
 
 ###############################################################################
 
--- a/stream_realip_hostname.t
+++ b/stream_realip_hostname.t
@@ -71,7 +71,7 @@ stream {
 
 EOF
 
-$t->try_run('no stream realip hostnames support');
+$t->run();
 
 plan(skip_all => 'no 127.0.0.1 on host')
 	if http_get('/') ne '127.0.0.1';
--- a/stream_ssl_preread_alpn.t
+++ b/stream_ssl_preread_alpn.t
@@ -82,6 +82,8 @@ plan(skip_all => 'IO::Socket::SSL with O
 eval { exists &Net::SSLeay::P_alpn_selected or die; };
 plan(skip_all => 'Net::SSLeay with OpenSSL ALPN support required') if $@;
 
+$t->plan(5);
+
 $t->write_file('openssl.conf', <<EOF);
 [ req ]
 default_bits = 1024
@@ -100,7 +102,7 @@ foreach my $name ('localhost') {
 		or die "Can't create certificate for $name: $!\n";
 }
 
-$t->try_run('no ssl_preread_alpn_protocols')->plan(5);
+$t->run();
 
 ###############################################################################
 
--- a/stream_udp_wildcard.t
+++ b/stream_udp_wildcard.t
@@ -57,11 +57,6 @@ my $s = dgram(
 	PeerAddr  => '127.0.0.2:' . port(8999)
 );
 
-TODO: {
-local $TODO = 'not yet' unless $t->has_version('1.13.0');
-
 is($s->io('test'), '127.0.0.2', 'stream udp wildcard');
 
-}
-
 ###############################################################################
--- a/stream_upstream_zone.t
+++ b/stream_upstream_zone.t
@@ -76,10 +76,6 @@ EOF
 
 my $p = port(8081);
 
-TODO: {
-todo_skip 'leaves coredump', 2 unless $^O ne 'MSWin32'
-	or $ENV{TEST_NGINX_UNSAFE} or $t->has_version('1.13.4');
-
 stream('127.0.0.1:' . port(8091));
 stream("127.0.0.1:" . port(8092));
 
@@ -88,6 +84,4 @@ stream("127.0.0.1:" . port(8092));
 is($t->read_file('access1.log'), "127.0.0.1:$p\n", 'upstream name');
 is($t->read_file('access2.log'), "u2\n", 'no live upstreams');
 
-}
-
 ###############################################################################
--- a/stream_upstream_zone_ssl.t
+++ b/stream_upstream_zone_ssl.t
@@ -106,10 +106,6 @@ foreach my $name ('localhost') {
 
 ###############################################################################
 
-TODO: {
-todo_skip 'leaves coredump', 9 unless $^O ne 'MSWin32'
-	or $ENV{TEST_NGINX_UNSAFE} or $t->has_version('1.13.4');
-
 is(stream('127.0.0.1:' . port(8080))->read(), '.', 'ssl');
 is(stream('127.0.0.1:' . port(8080))->read(), '.', 'ssl 2');
 
@@ -123,6 +119,4 @@ is(stream('127.0.0.1:' . port(8082))->re
 is(stream('127.0.0.1:' . port(8083))->read(), '.', 'backup ssl session new');
 is(stream('127.0.0.1:' . port(8083))->read(), 'r', 'backup ssl session reused');
 
-}
-
 ###############################################################################
--- a/subrequest_output_buffer_size.t
+++ b/subrequest_output_buffer_size.t
@@ -22,7 +22,7 @@ use Test::Nginx;
 select STDERR; $| = 1;
 select STDOUT; $| = 1;
 
-my $t = Test::Nginx->new()->has(qw/http proxy ssi/)
+my $t = Test::Nginx->new()->has(qw/http proxy ssi/)->plan(4)
 	->write_file_expand('nginx.conf', <<'EOF');
 
 %%TEST_GLOBALS%%
@@ -71,7 +71,7 @@ EOF
 $t->write_file('long', 'x' x 400);
 $t->write_file('empty', '');
 
-$t->try_run('no subrequest_output_buffer_size')->plan(4);
+$t->run();
 
 ###############################################################################
 
--- a/trailers.t
+++ b/trailers.t
@@ -24,7 +24,7 @@ use Test::Nginx;
 select STDERR; $| = 1;
 select STDOUT; $| = 1;
 
-my $t = Test::Nginx->new()->has(qw/http proxy/)
+my $t = Test::Nginx->new()->has(qw/http proxy/)->plan(17)
 	->write_file_expand('nginx.conf', <<'EOF');
 
 %%TEST_GLOBALS%%
@@ -77,7 +77,7 @@ EOF
 
 $t->write_file('t1', 'SEE-THIS');
 $t->write_file('header', '');
-$t->try_run('no add_trailer')->plan(17);
+$t->run();
 
 ###############################################################################
 
--- a/upstream_zone.t
+++ b/upstream_zone.t
@@ -78,13 +78,7 @@ EOF
 
 my $p = port(8081);
 
-TODO: {
-todo_skip 'leaves coredump', 2 unless $^O ne 'MSWin32'
-	or $ENV{TEST_NGINX_UNSAFE} or $t->has_version('1.13.4');
-
 like(http_get('/'), qr/X-Name: 127.0.0.1:$p/, 'upstream name');
 like(http_get('/down'), qr/X-Name: u2/, 'no live upstreams');
 
-}
-
 ###############################################################################
--- a/upstream_zone_ssl.t
+++ b/upstream_zone_ssl.t
@@ -111,10 +111,6 @@ foreach my $name ('localhost') {
 
 ###############################################################################
 
-TODO: {
-todo_skip 'leaves coredump', 9 unless $^O ne 'MSWin32'
-	or $ENV{TEST_NGINX_UNSAFE} or $t->has_version('1.13.4');
-
 like(http_get('/ssl'), qr/200 OK.*X-Session: \./s, 'ssl');
 like(http_get('/ssl'), qr/200 OK.*X-Session: \./s, 'ssl 2');
 like(http_get('/ssl_reuse'), qr/200 OK.*X-Session: \./s, 'ssl session new');
@@ -126,6 +122,4 @@ like(http_get('/backup'), qr/200 OK.*X-S
 like(http_get('/backup_reuse'), qr/200 OK.*X-Session: \./s, 'backup new');
 like(http_get('/backup_reuse'), qr/200 OK.*X-Session: r/s, 'backup reused');
 
-}
-
 ###############################################################################
--- a/worker_shutdown_timeout_mail.t
+++ b/worker_shutdown_timeout_mail.t
@@ -84,13 +84,8 @@ my $s = Test::Nginx::SMTP->new();
 
 $t->reload();
 
-TODO: {
-local $TODO = 'not yet' unless $t->has_version('1.13.7');
-
 ok($s->can_read(), 'mail connection shutdown');
 
-}
-
 undef $s;
 1;
 
--- a/worker_shutdown_timeout_proxy_upgrade.t
+++ b/worker_shutdown_timeout_proxy_upgrade.t
@@ -76,13 +76,8 @@ like($buf, qr!HTTP/1.1 101!, 'upgraded c
 
 $t->reload();
 
-TODO: {
-local $TODO = 'not yet' unless $t->has_version('1.13.7');
-
 ok($sel->can_read(3), 'upgraded connection shutdown');
 
-}
-
 undef $s;
 
 ###############################################################################
--- a/worker_shutdown_timeout_stream.t
+++ b/worker_shutdown_timeout_stream.t
@@ -58,13 +58,8 @@ my $s = Test::Nginx::SMTP->new();
 
 $t->reload();
 
-TODO: {
-local $TODO = 'not yet' unless $t->has_version('1.13.7');
-
 ok($s->can_read(), 'stream connection shutdown');
 
-}
-
 undef $s;
 1;
 
--- a/xslt_params.t
+++ b/xslt_params.t
@@ -95,14 +95,9 @@ like(http_get("/x1"), qr!200 OK.*param1=
 
 # before 1.13.7, nginx used to overwrite xslt_stylesheet configuration data
 
-TODO: {
-local $TODO = 'not yet' unless $t->has_version('1.13.7');
-
 like(http_get("/x1"), qr!200 OK.*param1=value1.*param2=data.*param3=value3!ms,
 	'params from xslt_stylesheet again');
 
-}
-
 like(http_get("/x2"), qr!200 OK.*param1=value1.*param2=data.*param3=value3!ms,
 	'params from xslt_param/xslt_string_param');
 like(http_get("/x3"), qr!200 OK.*param1=value1.*param2=data.*param3=value3!ms,