Tests: removed TODO and try_run() checks for legacy versions.
diff --git a/dav.t b/dav.t
index 52a6652..791bb91 100644
--- a/dav.t
+++ b/dav.t
@@ -146,7 +146,6 @@
 EOF
 
 like($r, qr/204 No Content/, 'copy file escaped');
-
 is(-s $t->testdir() . '/file-moved escape', 10, 'file copied unescaped');
 
 $t->write_file('file.exist', join '', (1 .. 42));
@@ -160,14 +159,8 @@
 EOF
 
 like($r, qr/204 No Content/, 'copy file overwrite');
-
-TODO: {
-local $TODO = 'not yet' unless $t->has_version('1.15.3');
-
 is(-s $t->testdir() . '/file.exist', 10, 'target file truncated');
 
-}
-
 $r = http(<<EOF . '0123456789');
 PUT /i/alias HTTP/1.1
 Host: localhost
diff --git a/geo_unix.t b/geo_unix.t
index c89d9d8..4d1a861 100644
--- a/geo_unix.t
+++ b/geo_unix.t
@@ -93,15 +93,8 @@
 ###############################################################################
 
 my $r = http_get('/');
-
-TODO: {
-local $TODO = 'not yet' unless $t->has_version('1.15.8');
-
 like($r, qr/^X-Geo: none/m, 'geo unix');
 like($r, qr/^X-Ranges: none/m, 'geo unix ranges');
-
-}
-
 like($r, qr/^X-Addr: none/m, 'geo unix remote addr');
 like($r, qr/^X-Ranges-Addr: none/m, 'geo unix ranges remote addr');
 
diff --git a/grpc.t b/grpc.t
index 11c6d3b..a53ce8e 100644
--- a/grpc.t
+++ b/grpc.t
@@ -199,8 +199,6 @@
 is($frame->{headers}{'x-connection'}, $c, 'keepalive 2 - connection reuse');
 
 undef $f;
-# don't bother with a new instance until the old one is over
-select undef, undef, undef, 0.2 unless $t->has_version('1.15.4');
 $f = grpc();
 
 # various header compression formats
diff --git a/h2_server_push.t b/h2_server_push.t
index 3cd5f1c..7199e50 100644
--- a/h2_server_push.t
+++ b/h2_server_push.t
@@ -409,9 +409,6 @@
 
 # scheme https
 
-TODO: {
-local $TODO = 'not yet' unless $t->has_version('1.15.1');
-
 $s = Test::Nginx::HTTP2->new();
 $sid = $s->new_stream({ headers => [
 	{ name => ':method', value => 'GET', mode => 0 },
@@ -423,8 +420,6 @@
 ($frame) = grep { $_->{type} eq "PUSH_PROMISE" && $_->{sid} == $sid } @$frames;
 is($frame->{headers}->{':scheme'}, 'https', 'scheme https');
 
-}
-
 ###############################################################################
 
 sub gunzip_like {
diff --git a/http_listen.t b/http_listen.t
index 4e2914e..e63f27c 100644
--- a/http_listen.t
+++ b/http_listen.t
@@ -76,7 +76,7 @@
 plan(skip_all => 'no requested ranges')
 	if "$p0$p1$p2$p3$p4$p5$p6$p7" ne "80808081808280838084808580868087";
 
-$t->try_run('no listen port ranges')->plan(12);
+$t->run()->plan(12);
 
 ###############################################################################
 
diff --git a/limit_req_delay.t b/limit_req_delay.t
index f8dea7b..f3627c7 100644
--- a/limit_req_delay.t
+++ b/limit_req_delay.t
@@ -22,7 +22,7 @@
 select STDERR; $| = 1;
 select STDOUT; $| = 1;
 
-my $t = Test::Nginx->new()->has(qw/http limit_req/);
+my $t = Test::Nginx->new()->has(qw/http limit_req/)->plan(4);
 
 $t->write_file_expand('nginx.conf', <<'EOF');
 
@@ -52,7 +52,7 @@
 EOF
 
 $t->write_file('delay.html', 'XtestX');
-$t->try_run('no limit_req delay')->plan(4);
+$t->run();
 
 ###############################################################################
 
diff --git a/proxy.t b/proxy.t
index 1388176..324e451 100644
--- a/proxy.t
+++ b/proxy.t
@@ -21,7 +21,7 @@
 select STDERR; $| = 1;
 select STDOUT; $| = 1;
 
-my $t = Test::Nginx->new()->has(qw/http proxy/)->plan(30);
+my $t = Test::Nginx->new()->has(qw/http proxy/)->plan(28);
 
 $t->write_file_expand('nginx.conf', <<'EOF');
 
@@ -137,26 +137,16 @@
 
 $re = qr/(\d\.\d{3}|-)/;
 ($ct, $ct2, $ht, $ht2, $rt, $rt2) = get('/pnu', many => 1);
+
 cmp_ok($ct, '<', 1, 'connect time - next');
 cmp_ok($ct2, '<', 1, 'connect time - next 2');
 
-TODO: {
-local $TODO = 'not yet' unless $t->has_version('1.15.7');
-
 is($ht, '-', 'header time - next');
-
-}
-
 cmp_ok($ht2, '<', 1, 'header time - next 2');
+
 cmp_ok($rt, '>=', 1, 'response time - next');
-
-TODO: {
-local $TODO = 'not yet' unless $t->has_version('1.15.7');
-
 is($rt2, '-', 'response time - next 2');
 
-}
-
 $t->stop();
 
 ($ct, $ht, $rt, $ct2, $ht2, $rt2, $ct3, $ht3, $rt3)
@@ -164,15 +154,6 @@
 
 cmp_ok($ct, '<', 1, 'connect time log - slow response header');
 cmp_ok($ct2, '<', 1, 'connect time log - slow response body');
-
-TODO: {
-local $TODO = 'not yet' unless $t->has_version('1.15.7');
-
-isnt($ct3, '-', 'connect time log - client close set');
-
-}
-
-$ct3 = 0 if $ct3 eq '-';
 cmp_ok($ct3, '<', 1, 'connect time log - client close');
 
 cmp_ok($ht, '>=', 1, 'header time log - slow response header');
@@ -181,16 +162,8 @@
 
 cmp_ok($rt, '>=', 1, 'response time log - slow response header');
 cmp_ok($rt2, '>=', 1, 'response time log - slow response body');
-
-TODO: {
-local $TODO = 'not yet' unless $t->has_version('1.15.7');
-
-isnt($rt3, '-', 'response time log - client close set');
-$rt3 = 0 if $rt3 eq '-';
 cmp_ok($rt3, '>', $ct3, 'response time log - client close');
 
-}
-
 ###############################################################################
 
 sub get {
diff --git a/proxy_cache_use_stale.t b/proxy_cache_use_stale.t
index fc85669..57ec351 100644
--- a/proxy_cache_use_stale.t
+++ b/proxy_cache_use_stale.t
@@ -197,14 +197,8 @@
 # proxy_pass to regular expression with named and positional captures
 
 like(http_get('/regexp.html'), qr/STALE/, 's-w-r - regexp background update');
-
-TODO: {
-local $TODO = 'not yet' unless $t->has_version('1.15.8');
-
 like(http_get('/regexp.html'), qr/HIT/, 's-w-r - regexp revalidated');
 
-}
-
 # UPDATING while s-w-r
 
 $t->write_file('t6.html', 'SEE-THAT');
diff --git a/proxy_variables.t b/proxy_variables.t
index ab073e8..f275fd9 100644
--- a/proxy_variables.t
+++ b/proxy_variables.t
@@ -22,7 +22,7 @@
 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(4)
 	->write_file_expand('nginx.conf', <<'EOF');
 
 %%TEST_GLOBALS%%
@@ -52,7 +52,7 @@
 EOF
 
 $t->run_daemon(\&http_daemon, port(8081));
-$t->try_run('upstream_bytes_sent')->plan(4);
+$t->run();
 
 $t->waitforsocket('127.0.0.1:' . port(8081));
 
diff --git a/rewrite.t b/rewrite.t
index f56c1e3..a8b7848 100644
--- a/rewrite.t
+++ b/rewrite.t
@@ -161,13 +161,8 @@
 # this used to result in 404, but was changed in 1.15.4
 # to respond with 405 instead, much like a real error would do
 
-TODO: {
-local $TODO = 'not yet' unless $t->has_version('1.15.4');
-
 like(http_get('/error404return405'), qr!HTTP/1.1 405!, 'error 404 return 405');
 
-}
-
 # status code should be 405, and entity body is expected (vs. normal 204
 # replies which doesn't expect to have body); use HTTP/1.1 for test
 # to make problem clear
diff --git a/ssl_certificate.t b/ssl_certificate.t
index cfba552..5d8bde8 100644
--- a/ssl_certificate.t
+++ b/ssl_certificate.t
@@ -163,7 +163,7 @@
 $t->write_file('password_file', 'pass');
 $t->write_file('index.html', '');
 
-$t->try_run('no ssl_certificate variables')->plan(11);
+$t->run()->plan(11);
 
 ###############################################################################
 
diff --git a/ssl_certificate_perl.t b/ssl_certificate_perl.t
index 82d949c..e76ce59 100644
--- a/ssl_certificate_perl.t
+++ b/ssl_certificate_perl.t
@@ -97,7 +97,7 @@
 		or die "Can't create certificate for $name: $!\n";
 }
 
-$t->try_run('no ssl_certificate variables')->plan(2);
+$t->run()->plan(2);
 
 ###############################################################################
 
diff --git a/ssl_engine_keys.t b/ssl_engine_keys.t
index c42b042..cee9e29 100644
--- a/ssl_engine_keys.t
+++ b/ssl_engine_keys.t
@@ -28,7 +28,7 @@
 	unless $ENV{TEST_NGINX_UNSAFE};
 
 my $t = Test::Nginx->new()->has(qw/http proxy http_ssl/)->has_daemon('openssl')
-	->has_daemon('softhsm')->has_daemon('pkcs11-tool');
+	->has_daemon('softhsm')->has_daemon('pkcs11-tool')->plan(2);
 
 $t->write_file_expand('nginx.conf', <<'EOF');
 
@@ -137,7 +137,7 @@
 		or die "Can't create certificate for $name: $!\n";
 }
 
-$t->try_run('no ssl_certificate variables')->plan(2);
+$t->run();
 
 $t->write_file('index.html', '');
 
diff --git a/ssl_sni.t b/ssl_sni.t
index 8df5876..d27d261 100644
--- a/ssl_sni.t
+++ b/ssl_sni.t
@@ -152,17 +152,11 @@
 skip 'no TLS 1.3 sessions', 1 if get('/protocol', 'localhost') =~ /TLSv1.3/
 	&& ($Net::SSLeay::VERSION < 1.88 || $IO::Socket::SSL::VERSION < 2.061);
 
-TODO: {
-local $TODO = 'not yet' if $t->has_module('OpenSSL (1.1.1|3)')
-	&& !$t->has_version('1.15.10');
-
 like(get('/', 'localhost', 8081, $ctx), qr/^r:localhost$/m,
 	'ssl server name - reused');
 
 }
 
-}
-
 ###############################################################################
 
 sub get_ssl_socket {
diff --git a/ssl_sni_reneg.t b/ssl_sni_reneg.t
index 2f31662..464bbea 100644
--- a/ssl_sni_reneg.t
+++ b/ssl_sni_reneg.t
@@ -104,8 +104,6 @@
 
 ###############################################################################
 
-my ($ossl) = $t->{_configure_args} =~ /OpenSSL ([\d\.]+)/;
-
 my ($s, $ssl) = get_ssl_socket(8080);
 ok($s, 'connection');
 
@@ -121,18 +119,11 @@
 
 Net::SSLeay::write($ssl, 'Host: localhost' . CRLF . CRLF);
 
-TODO: {
-local $TODO = 'not yet' if $ossl ge '1.1.1' and $^O eq 'linux'
-	and !$t->has_version('1.15.2');
-
 ok(!Net::SSLeay::read($ssl), 'response');
 
 }
 
-}
-
 # virtual servers
-# in [1.15.4..1.15.5) SSL_OP_NO_RENEGOTIATION is cleared in servername callback
 
 ($s, $ssl) = get_ssl_socket(8081);
 ok($s, 'connection 2');
@@ -149,16 +140,10 @@
 
 Net::SSLeay::write($ssl, 'Host: localhost' . CRLF . CRLF);
 
-TODO: {
-local $TODO = 'not yet' if $ossl ge '1.1.1' and $^O eq 'linux'
-	and !$t->has_version('1.15.2');
-
 ok(!Net::SSLeay::read($ssl), 'virtual servers');
 
 }
 
-}
-
 ###############################################################################
 
 sub get_ssl_socket {
diff --git a/stream_geo_unix.t b/stream_geo_unix.t
index 9aa971b..139eff4 100644
--- a/stream_geo_unix.t
+++ b/stream_geo_unix.t
@@ -77,15 +77,8 @@
 ###############################################################################
 
 my %data = stream('127.0.0.1:' . port(8080))->read() =~ /(\w+):(\w+)/g;
-
-TODO: {
-local $TODO = 'not yet' unless $t->has_version('1.15.8');
-
 is($data{geo}, 'none', 'geo unix');
 is($data{geor}, 'none', 'geo unix ranges');
-
-}
-
 is($data{geora}, 'none', 'geo unix remote addr');
 is($data{georra}, 'none', 'geo unix ranges remote addr');
 
diff --git a/stream_ssl_certificate.t b/stream_ssl_certificate.t
index 13425a4..099db33 100644
--- a/stream_ssl_certificate.t
+++ b/stream_ssl_certificate.t
@@ -146,7 +146,7 @@
 $t->write_file('password_file', 'pass');
 $t->write_file('index.html', '');
 
-$t->try_run('no ssl_certificate variables')->plan(7);
+$t->run()->plan(7);
 
 ###############################################################################
 
diff --git a/stream_ssl_preread_protocol.t b/stream_ssl_preread_protocol.t
index 7fd1194..1faf38d 100644
--- a/stream_ssl_preread_protocol.t
+++ b/stream_ssl_preread_protocol.t
@@ -23,7 +23,7 @@
 select STDOUT; $| = 1;
 
 my $t = Test::Nginx->new()->has(qw/stream stream_ssl_preread stream_return/)
-	->write_file_expand('nginx.conf', <<'EOF');
+	->write_file_expand('nginx.conf', <<'EOF')->plan(7)->run();
 
 %%TEST_GLOBALS%%
 
@@ -42,8 +42,6 @@
 
 EOF
 
-$t->try_run('no ssl_preread_protocol')->plan(7);
-
 ###############################################################################
 
 is(get('SSLv3'), 'SSLv3', 'client hello SSLv3');
diff --git a/stream_ssl_variables.t b/stream_ssl_variables.t
index 7575ef8..c86f78b 100644
--- a/stream_ssl_variables.t
+++ b/stream_ssl_variables.t
@@ -112,16 +112,10 @@
 ($s, $ssl) = get_ssl_socket(port(8082), undef, 'example.com');
 is(Net::SSLeay::ssl_read_all($ssl), 'example.com', 'ssl server name');
 
-TODO: {
-local $TODO = 'not yet' if $t->has_module('OpenSSL (1.1.1|3)')
-	&& !$t->has_version('1.15.10');
-
 my $ses = Net::SSLeay::get_session($ssl);
 ($s, $ssl) = get_ssl_socket(port(8082), $ses, 'example.com');
 is(Net::SSLeay::ssl_read_all($ssl), 'example.com', 'ssl server name - reused');
 
-}
-
 ($s, $ssl) = get_ssl_socket(port(8082));
 is(Net::SSLeay::ssl_read_all($ssl), '', 'ssl server name empty');
 
diff --git a/stream_udp_limit_conn.t b/stream_udp_limit_conn.t
index bc82a9e..977fb4e 100644
--- a/stream_udp_limit_conn.t
+++ b/stream_udp_limit_conn.t
@@ -90,13 +90,8 @@
 # regardless of incomplete responses, new requests in the same
 # socket will be treated as requests in existing session
 
-TODO: {
-local $TODO = 'not yet' unless $t->has_version('1.15.0');
-
 is($s->io('1', read_timeout => 0.4), '1', 'passed new request');
 
-}
-
 is(dgram('127.0.0.1:' . port(8981))->io('1', read_timeout => 0.1), '',
 	'rejected new session');
 is(dgram('127.0.0.1:' . port(8982))->io('1'), '1', 'passed different zone');
diff --git a/stream_udp_limit_rate.t b/stream_udp_limit_rate.t
index 68a15dd..fc848c5 100644
--- a/stream_udp_limit_rate.t
+++ b/stream_udp_limit_rate.t
@@ -23,7 +23,7 @@
 select STDERR; $| = 1;
 select STDOUT; $| = 1;
 
-my $t = Test::Nginx->new()->has(qw/stream udp/)
+my $t = Test::Nginx->new()->has(qw/stream udp/)->plan(8)
 	->write_file_expand('nginx.conf', <<'EOF');
 
 %%TEST_GLOBALS%%
@@ -59,7 +59,7 @@
 EOF
 
 $t->run_daemon(\&udp_daemon, port(8980), $t);
-$t->try_run('no proxy_requests')->plan(8);
+$t->run();
 
 $t->waitforfile($t->testdir . '/' . port(8980));
 
@@ -75,23 +75,14 @@
 
 # datagram doesn't get split
 
-my $t1;
-
-TODO: {
-local $TODO = 'split datagram' unless $t->has_version('1.15.9');
-
 $s = dgram('127.0.0.1:' . port(8983));
 is($s->io($str), $str, 'download');
-$t1 = time();
+my $t1 = time();
 is($s->io($str), $str, 'download 2');
-
-}
-
 my $t2 = time();
 cmp_ok($t1, '<', $t2, 'download 2 delayed');
 
-TODO: {
-todo_skip 'infinite event report', 3 unless $t->has_version('1.15.9');
+# infinite event report before 1.15.9
 
 $s = dgram('127.0.0.1:' . port(8984));
 is($s->io($str), $str, 'upload');
@@ -100,8 +91,6 @@
 select undef, undef, undef, 1.6;
 is($s->io($str), $str, 'upload passed');
 
-}
-
 ###############################################################################
 
 sub udp_daemon {
diff --git a/stream_udp_proxy_requests.t b/stream_udp_proxy_requests.t
index 242e5cd..315ae5b 100644
--- a/stream_udp_proxy_requests.t
+++ b/stream_udp_proxy_requests.t
@@ -23,7 +23,7 @@
 select STDERR; $| = 1;
 select STDOUT; $| = 1;
 
-my $t = Test::Nginx->new()->has(qw/stream udp/)
+my $t = Test::Nginx->new()->has(qw/stream udp/)->plan(26)
 	->write_file_expand('nginx.conf', <<'EOF');
 
 %%TEST_GLOBALS%%
@@ -87,7 +87,7 @@
 
 $t->run_daemon(\&udp_daemon, $t, port(8990));
 $t->run_daemon(\&udp_daemon, $t, port(8991));
-$t->try_run('no proxy_requests')->plan(26);
+$t->run();
 
 $t->waitforfile($t->testdir . '/' . port(8990));
 $t->waitforfile($t->testdir . '/' . port(8991));
diff --git a/stream_udp_stream.t b/stream_udp_stream.t
index e1943c8..5721081 100644
--- a/stream_udp_stream.t
+++ b/stream_udp_stream.t
@@ -62,17 +62,12 @@
 
 isnt($data, $data2, 'udp_stream two sessions');
 
-TODO: {
-local $TODO = 'not yet' unless $t->has_version('1.15.0');
-
 is($s->io('1'), $data, 'udp_stream session 1');
 is($s->io('1'), $data, 'udp_stream session 2');
 
 is($s2->io('1'), $data2, 'udp_stream another session 1');
 is($s2->io('1'), $data2, 'udp_stream another session 2');
 
-}
-
 select undef, undef, undef, 1.1;
 
 isnt($s->io('1'), $data, 'udp_stream new session');
diff --git a/stream_udp_upstream.t b/stream_udp_upstream.t
index 3f8acb9..6fe81b4 100644
--- a/stream_udp_upstream.t
+++ b/stream_udp_upstream.t
@@ -95,14 +95,9 @@
 
 is(many(10, port(8980)), "$port4: 5, $port5: 5", 'balanced');
 
-TODO: {
-local $TODO = 'not yet' unless $t->has_version('1.15.0');
-
 is(dgram('127.0.0.1:' . port(8981))->io('.', read_timeout => 0.5), '',
 	'no next upstream for dgram');
 
-}
-
 is(many(10, port(8981)), "$port4: 5, $port5: 5", 'failures');
 
 is(many(9, port(8982)), "$port4: 3, $port5: 6", 'weight');
diff --git a/stream_upstream_random.t b/stream_upstream_random.t
index a0303b8..ea87e4e 100644
--- a/stream_upstream_random.t
+++ b/stream_upstream_random.t
@@ -23,7 +23,7 @@
 select STDOUT; $| = 1;
 
 my $t = Test::Nginx->new()
-	->has(qw/stream stream_upstream_zone stream_upstream_random/)
+	->has(qw/stream stream_upstream_zone stream_upstream_random/)->plan(12)
 	->write_file_expand('nginx.conf', <<'EOF');
 
 %%TEST_GLOBALS%%
@@ -170,7 +170,7 @@
 
 $t->run_daemon(\&http_daemon, port(8081));
 $t->run_daemon(\&http_daemon, port(8082));
-$t->try_run('no upstream random')->plan(12);
+$t->run();
 
 $t->waitforsocket('127.0.0.1:' . port(8081));
 $t->waitforsocket('127.0.0.1:' . port(8082));
diff --git a/upstream_keepalive.t b/upstream_keepalive.t
index 848c836..5253bf6 100644
--- a/upstream_keepalive.t
+++ b/upstream_keepalive.t
@@ -22,7 +22,7 @@
 select STDERR; $| = 1;
 select STDOUT; $| = 1;
 
-my $t = Test::Nginx->new()->has(qw/http proxy upstream_keepalive/)
+my $t = Test::Nginx->new()->has(qw/http proxy upstream_keepalive/)->plan(7)
 	->write_file_expand('nginx.conf', <<'EOF');
 
 %%TEST_GLOBALS%%
@@ -67,7 +67,7 @@
 EOF
 
 $t->write_file('index.html', 'SEE-THIS');
-$t->try_run('no keepalive_requests')->plan(7);
+$t->run();
 
 ###############################################################################
 
diff --git a/upstream_random.t b/upstream_random.t
index 73713d8..67e8ddf 100644
--- a/upstream_random.t
+++ b/upstream_random.t
@@ -23,7 +23,7 @@
 select STDOUT; $| = 1;
 
 my $t = Test::Nginx->new()->has(qw/http proxy upstream_zone upstream_random/)
-	->write_file_expand('nginx.conf', <<'EOF');
+	->plan(12)->write_file_expand('nginx.conf', <<'EOF');
 
 %%TEST_GLOBALS%%
 
@@ -140,7 +140,7 @@
 
 $t->run_daemon(\&http_daemon, port(8081));
 $t->run_daemon(\&http_daemon, port(8082));
-$t->try_run('no upstream random')->plan(12);
+$t->run();
 
 $t->waitforsocket('127.0.0.1:' . port(8081));
 $t->waitforsocket('127.0.0.1:' . port(8082));
diff --git a/userid.t b/userid.t
index 80e3874..163ba71 100644
--- a/userid.t
+++ b/userid.t
@@ -227,13 +227,8 @@
 $addr = $bigendian ? "00000001" : "01000000";
 is(substr(uid_set(http_get('/ip6')), 0, 8), $addr, 'service ipv6');
 
-TODO: {
-local $TODO = 'not yet' unless $t->has_version('1.15.8');
-
 is(substr(uid_set(http_get('/unix')), 0, 8), "00000000", 'service unix');
 
-}
-
 # reset log
 
 send_uid('/?log', cookie($r, 'uid'));