From ef084ac427fec746a475a5b8446a9ef3518d420b Mon Sep 17 00:00:00 2001 From: Gary Pendergast Date: Wed, 21 Dec 2016 05:07:05 +0000 Subject: [PATCH] Tests: Restore the database connection earlier when switching test groups. When plugins don't disable the `backupGlobals` PHPUnit option in their own tests, `$wpdb` is backed up and restored between classes of tests. The serialisation process used for this broke the database connection. This previously wasn't a problem, as it was reconnecting before each test. [38398] introduced some changes that required the connection to be available in `setUpBeforeClass()`, earlier than in was previously reconnecting. This didn't cause warnings in Core, but it did cause warnings for plugins that don't disable the `backupGlobals` option. The database connection now reconnects in `setUpBeforeClass()`. This change also fixes a few Core tests that weren't calling `parent::setUpBeforeClass()` or `parent::tearDown()` correctly. Merges [39626] to the 4.7 branch. Fixes #39327. git-svn-id: https://develop.svn.wordpress.org/branches/4.7@39627 602fd350-edb4-49c9-b593-d223f7449a82 --- tests/phpunit/includes/testcase.php | 14 +++++++++----- tests/phpunit/includes/utils.php | 5 +++++ tests/phpunit/tests/db.php | 6 ++++++ tests/phpunit/tests/db/charset.php | 2 ++ tests/phpunit/tests/rewrite/numericSlugs.php | 1 + 5 files changed, 23 insertions(+), 5 deletions(-) diff --git a/tests/phpunit/includes/testcase.php b/tests/phpunit/includes/testcase.php index 344f9eb331..899050455d 100644 --- a/tests/phpunit/includes/testcase.php +++ b/tests/phpunit/includes/testcase.php @@ -57,6 +57,13 @@ class WP_UnitTestCase extends PHPUnit_Framework_TestCase { } public static function setUpBeforeClass() { + global $wpdb; + + $wpdb->suppress_errors = false; + $wpdb->show_errors = true; + $wpdb->db_connect(); + ini_set('display_errors', 1 ); + parent::setUpBeforeClass(); $c = self::get_called_class(); @@ -98,11 +105,8 @@ class WP_UnitTestCase extends PHPUnit_Framework_TestCase { $this->_backup_hooks(); } - global $wpdb, $wp_rewrite; - $wpdb->suppress_errors = false; - $wpdb->show_errors = true; - $wpdb->db_connect(); - ini_set('display_errors', 1 ); + global $wp_rewrite; + $this->clean_up_global_scope(); /* diff --git a/tests/phpunit/includes/utils.php b/tests/phpunit/includes/utils.php index a1513605b8..66c8756bf7 100644 --- a/tests/phpunit/includes/utils.php +++ b/tests/phpunit/includes/utils.php @@ -389,6 +389,11 @@ class wpdb_exposed_methods_for_testing extends wpdb { $this->ready = true; $this->field_types = $wpdb->field_types; $this->charset = $wpdb->charset; + + $this->dbuser = $wpdb->dbuser; + $this->dbpassword = $wpdb->dbpassword; + $this->dbname = $wpdb->dbname; + $this->dbhost = $wpdb->dbhost; } public function __call( $name, $arguments ) { diff --git a/tests/phpunit/tests/db.php b/tests/phpunit/tests/db.php index beac5f2e89..9595d3df18 100644 --- a/tests/phpunit/tests/db.php +++ b/tests/phpunit/tests/db.php @@ -20,6 +20,7 @@ class Tests_DB extends WP_UnitTestCase { protected static $_wpdb; public static function setUpBeforeClass() { + parent::setUpBeforeClass(); self::$_wpdb = new wpdb_exposed_methods_for_testing(); } @@ -63,6 +64,11 @@ class Tests_DB extends WP_UnitTestCase { $wpdb->close(); $var = $wpdb->get_var( "SELECT ID FROM $wpdb->users LIMIT 1" ); + + // Ensure all database handles have been properly reconnected after this test. + $wpdb->db_connect(); + self::$_wpdb->db_connect(); + $this->assertGreaterThan( 0, $var ); } diff --git a/tests/phpunit/tests/db/charset.php b/tests/phpunit/tests/db/charset.php index 524e46b8b2..e6a796c5d7 100644 --- a/tests/phpunit/tests/db/charset.php +++ b/tests/phpunit/tests/db/charset.php @@ -22,6 +22,8 @@ class Tests_DB_Charset extends WP_UnitTestCase { private static $server_info; public static function setUpBeforeClass() { + parent::setUpBeforeClass(); + require_once( dirname( dirname( __FILE__ ) ) . '/db.php' ); self::$_wpdb = new wpdb_exposed_methods_for_testing(); diff --git a/tests/phpunit/tests/rewrite/numericSlugs.php b/tests/phpunit/tests/rewrite/numericSlugs.php index 9ed8ff8898..1ff50fda5b 100644 --- a/tests/phpunit/tests/rewrite/numericSlugs.php +++ b/tests/phpunit/tests/rewrite/numericSlugs.php @@ -16,6 +16,7 @@ class Tests_Rewrite_NumericSlugs extends WP_UnitTestCase { } public function tearDown() { + parent::tearDown(); remove_filter( 'wp_unique_post_slug', array( $this, 'filter_unique_post_slug' ), 10, 6 ); }