From fcf86b80b6a012fc6448e6edcb26e1e57b39c6a1 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Sat, 9 Nov 2019 03:36:19 +0000 Subject: [PATCH] Tests: Skip `test_readme()` if the HTTP request to `secure.php.net` or `dev.mysql.com` failed on timeout. Move `skipTestOnTimeout()` to `WP_UnitTestCase_Base` to avoid duplication. See #44613. git-svn-id: https://develop.svn.wordpress.org/trunk@46682 602fd350-edb4-49c9-b593-d223f7449a82 --- tests/phpunit/includes/abstract-testcase.php | 25 +++++++++++++++++++- tests/phpunit/tests/external-http/basic.php | 8 +++++++ tests/phpunit/tests/http/base.php | 21 ---------------- tests/phpunit/tests/http/functions.php | 21 ---------------- 4 files changed, 32 insertions(+), 43 deletions(-) diff --git a/tests/phpunit/includes/abstract-testcase.php b/tests/phpunit/includes/abstract-testcase.php index 749803dffc..64c3eddbaa 100644 --- a/tests/phpunit/includes/abstract-testcase.php +++ b/tests/phpunit/includes/abstract-testcase.php @@ -180,7 +180,7 @@ abstract class WP_UnitTestCase_Base extends PHPUnit_Framework_TestCase { } /** - * Allow tests to be skipped on some automated runs + * Allow tests to be skipped on some automated runs. * * For test runs on Travis for something other than trunk/master * we want to skip tests that only need to run for master. @@ -222,6 +222,29 @@ abstract class WP_UnitTestCase_Base extends PHPUnit_Framework_TestCase { } } + /** + * Allow tests to be skipped if the HTTP request times out. + * + * @param array|WP_Error $response HTTP response. + */ + public function skipTestOnTimeout( $response ) { + if ( ! is_wp_error( $response ) ) { + return; + } + if ( 'connect() timed out!' === $response->get_error_message() ) { + $this->markTestSkipped( 'HTTP timeout' ); + } + + if ( false !== strpos( $response->get_error_message(), 'timed out after' ) ) { + $this->markTestSkipped( 'HTTP timeout' ); + } + + if ( 0 === strpos( $response->get_error_message(), 'stream_socket_client(): unable to connect to tcp://s.w.org:80' ) ) { + $this->markTestSkipped( 'HTTP timeout' ); + } + + } + /** * Unregister existing post types and register defaults. * diff --git a/tests/phpunit/tests/external-http/basic.php b/tests/phpunit/tests/external-http/basic.php index 8596cbd472..427a991161 100644 --- a/tests/phpunit/tests/external-http/basic.php +++ b/tests/phpunit/tests/external-http/basic.php @@ -13,9 +13,13 @@ class Tests_External_HTTP_Basic extends WP_UnitTestCase { preg_match( '#Recommendations.*PHP version ([0-9.]*)#s', $readme, $matches ); $response = wp_remote_get( 'https://secure.php.net/supported-versions.php' ); + + $this->skipTestOnTimeout( $response ); + if ( 200 !== wp_remote_retrieve_response_code( $response ) ) { $this->fail( 'Could not contact PHP.net to check versions.' ); } + $php = wp_remote_retrieve_body( $response ); preg_match_all( '#\s*\s*]*>\s*([0-9.]*)#s', $php, $phpmatches ); @@ -25,9 +29,13 @@ class Tests_External_HTTP_Basic extends WP_UnitTestCase { preg_match( '#Recommendations.*MySQL version ([0-9.]*)#s', $readme, $matches ); $response = wp_remote_get( "https://dev.mysql.com/doc/relnotes/mysql/{$matches[1]}/en/" ); + + $this->skipTestOnTimeout( $response ); + if ( 200 !== wp_remote_retrieve_response_code( $response ) ) { $this->fail( 'Could not contact dev.MySQL.com to check versions.' ); } + $mysql = wp_remote_retrieve_body( $response ); preg_match( '#(\d{4}-\d{2}-\d{2}), General Availability#', $mysql, $mysqlmatches ); diff --git a/tests/phpunit/tests/http/base.php b/tests/phpunit/tests/http/base.php index 6cc6cc7d67..4e4526aa57 100644 --- a/tests/phpunit/tests/http/base.php +++ b/tests/phpunit/tests/http/base.php @@ -17,27 +17,6 @@ abstract class WP_HTTP_UnitTestCase extends WP_UnitTestCase { protected $http_request_args; - /** - * Mark test as skipped if the HTTP request times out. - */ - function skipTestOnTimeout( $response ) { - if ( ! is_wp_error( $response ) ) { - return; - } - if ( 'connect() timed out!' === $response->get_error_message() ) { - $this->markTestSkipped( 'HTTP timeout' ); - } - - if ( false !== strpos( $response->get_error_message(), 'timed out after' ) ) { - $this->markTestSkipped( 'HTTP timeout' ); - } - - if ( 0 === strpos( $response->get_error_message(), 'stream_socket_client(): unable to connect to tcp://s.w.org:80' ) ) { - $this->markTestSkipped( 'HTTP timeout' ); - } - - } - function setUp() { parent::setUp(); diff --git a/tests/phpunit/tests/http/functions.php b/tests/phpunit/tests/http/functions.php index 3b15c6856e..848085a30a 100644 --- a/tests/phpunit/tests/http/functions.php +++ b/tests/phpunit/tests/http/functions.php @@ -6,27 +6,6 @@ */ class Tests_HTTP_Functions extends WP_UnitTestCase { - /** - * Mark test as skipped if the HTTP request times out. - */ - function skipTestOnTimeout( $response ) { - if ( ! is_wp_error( $response ) ) { - return; - } - if ( 'connect() timed out!' === $response->get_error_message() ) { - $this->markTestSkipped( 'HTTP timeout' ); - } - - if ( false !== strpos( $response->get_error_message(), 'timed out after' ) ) { - $this->markTestSkipped( 'HTTP timeout' ); - } - - if ( 0 === strpos( $response->get_error_message(), 'stream_socket_client(): unable to connect to tcp://s.w.org:80' ) ) { - $this->markTestSkipped( 'HTTP timeout' ); - } - - } - public function setUp() { if ( ! extension_loaded( 'openssl' ) ) { $this->markTestSkipped( 'Tests_HTTP_Functions requires openssl.' );