From 9e24832a0e8fff44bb305b249a07027e3ae2b17b Mon Sep 17 00:00:00 2001 From: Andrew Nacin Date: Sun, 29 Jun 2014 22:50:44 +0000 Subject: [PATCH] Add initial unit tests for multisite's bootstrap. props jeremyfelt. fixes #27884. git-svn-id: https://develop.svn.wordpress.org/trunk@28910 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/ms-settings.php | 7 +- src/wp-settings.php | 3 + tests/phpunit/includes/bootstrap.php | 4 - tests/phpunit/tests/ms.php | 110 ++++++++++++++++++++++++++- 4 files changed, 114 insertions(+), 10 deletions(-) diff --git a/src/wp-includes/ms-settings.php b/src/wp-includes/ms-settings.php index d4383d3b91..da7e33f4f2 100644 --- a/src/wp-includes/ms-settings.php +++ b/src/wp-includes/ms-settings.php @@ -10,12 +10,9 @@ * @since 3.0.0 */ -/** Include Multisite initialization functions */ -require( ABSPATH . WPINC . '/ms-load.php' ); -require( ABSPATH . WPINC . '/ms-default-constants.php' ); - -if ( defined( 'SUNRISE' ) ) +if ( defined( 'SUNRISE' ) ) { include_once( WP_CONTENT_DIR . '/sunrise.php' ); +} /** Check for and define SUBDOMAIN_INSTALL and the deprecated VHOST constant. */ ms_subdomain_constants(); diff --git a/src/wp-settings.php b/src/wp-settings.php index 65e7bf906c..060b1b14c5 100644 --- a/src/wp-settings.php +++ b/src/wp-settings.php @@ -91,6 +91,9 @@ require( ABSPATH . WPINC . '/default-filters.php' ); // Initialize multisite if enabled. if ( is_multisite() ) { require( ABSPATH . WPINC . '/ms-blogs.php' ); + /** Include Multisite initialization functions */ + require( ABSPATH . WPINC . '/ms-load.php' ); + require( ABSPATH . WPINC . '/ms-default-constants.php' ); require( ABSPATH . WPINC . '/ms-settings.php' ); } elseif ( ! defined( 'MULTISITE' ) ) { define( 'MULTISITE', false ); diff --git a/tests/phpunit/includes/bootstrap.php b/tests/phpunit/includes/bootstrap.php index 885e148639..74e3654050 100644 --- a/tests/phpunit/includes/bootstrap.php +++ b/tests/phpunit/includes/bootstrap.php @@ -55,10 +55,6 @@ if ( $multisite ) { echo "Running as multisite..." . PHP_EOL; define( 'MULTISITE', true ); define( 'SUBDOMAIN_INSTALL', false ); - define( 'DOMAIN_CURRENT_SITE', WP_TESTS_DOMAIN ); - define( 'PATH_CURRENT_SITE', '/' ); - define( 'SITE_ID_CURRENT_SITE', 1 ); - define( 'BLOG_ID_CURRENT_SITE', 1 ); $GLOBALS['base'] = '/'; } else { echo "Running as single site... To run multisite, use -c tests/phpunit/multisite.xml" . PHP_EOL; diff --git a/tests/phpunit/tests/ms.php b/tests/phpunit/tests/ms.php index 251299b7cf..11ec9c96b4 100644 --- a/tests/phpunit/tests/ms.php +++ b/tests/phpunit/tests/ms.php @@ -455,7 +455,7 @@ class Tests_MS extends WP_UnitTestCase { $blog_id = $this->factory->blog->create( array( 'user_id' => $user_id, 'path' => '/test_blogname', 'title' => 'Test Title' ) ); $this->assertInternalType( 'int', $blog_id ); - $this->assertEquals( 'http://' . DOMAIN_CURRENT_SITE . PATH_CURRENT_SITE . 'test_blogname/', get_blogaddress_by_name('test_blogname') ); + $this->assertEquals( 'http://' . $current_site->domain . $current_site->path . 'test_blogname/', get_blogaddress_by_name('test_blogname') ); $this->assertEquals( $blog_id, get_id_from_blogname('test_blogname') ); } @@ -1410,6 +1410,114 @@ class Tests_MS extends WP_UnitTestCase { $details = get_blog_details( get_current_blog_id() ); $this->assertEquals( 'bar', $details->blogname ); } + + /** + * @ticket 27884 + * + * @expectedDeprecated define() + */ + function test_multisite_bootstrap() { + global $current_site, $current_blog; + + $network_ids = array( + 'wordpress.org/' => array( 'domain' => 'wordpress.org', 'path' => '/' ), + 'make.wordpress.org/' => array( 'domain' => 'make.wordpress.org', 'path' => '/' ), + ); + + foreach ( $network_ids as &$id ) { + $id = $this->factory->network->create( $id ); + } + unset( $id ); + + $ids = array( + 'wordpress.org/' => array( 'domain' => 'wordpress.org', 'path' => '/', 'site_id' => $network_ids['wordpress.org/'] ), + 'wordpress.org/foo/' => array( 'domain' => 'wordpress.org', 'path' => '/foo/', 'site_id' => $network_ids['wordpress.org/'] ), + 'wordpress.org/foo/bar/' => array( 'domain' => 'wordpress.org', 'path' => '/foo/bar/', 'site_id' => $network_ids['wordpress.org/'] ), + 'make.wordpress.org/' => array( 'domain' => 'make.wordpress.org', 'path' => '/', 'site_id' => $network_ids['make.wordpress.org/'] ), + 'make.wordpress.org/foo/' => array( 'domain' => 'make.wordpress.org', 'path' => '/foo/', 'site_id' => $network_ids['make.wordpress.org/'] ), + ); + + foreach ( $ids as &$id ) { + $id = $this->factory->blog->create( $id ); + } + unset( $id ); + + $this->_setup_host_request( 'wordpress.org', '/' ); + $this->assertEquals( $ids['wordpress.org/'], $current_blog->blog_id ); + $this->assertEquals( $network_ids['wordpress.org/'], $current_blog->site_id ); + + $this->_setup_host_request( 'wordpress.org', '/2014/04/23/hello-world/' ); + $this->assertEquals( $ids['wordpress.org/'], $current_blog->blog_id ); + $this->assertEquals( $network_ids['wordpress.org/'], $current_blog->site_id ); + + $this->_setup_host_request( 'wordpress.org', '/sample-page/' ); + $this->assertEquals( $ids['wordpress.org/'], $current_blog->blog_id ); + $this->assertEquals( $network_ids['wordpress.org/'], $current_blog->site_id ); + + $this->_setup_host_request( 'wordpress.org', '/?p=1' ); + $this->assertEquals( $ids['wordpress.org/'], $current_blog->blog_id ); + $this->assertEquals( $network_ids['wordpress.org/'], $current_blog->site_id ); + + $this->_setup_host_request( 'wordpress.org', '/wp-admin/' ); + $this->assertEquals( $ids['wordpress.org/'], $current_blog->blog_id ); + $this->assertEquals( $network_ids['wordpress.org/'], $current_blog->site_id ); + + $this->_setup_host_request( 'wordpress.org', '/foo/' ); + $this->assertEquals( $ids['wordpress.org/foo/'], $current_blog->blog_id ); + $this->assertEquals( $network_ids['wordpress.org/'], $current_blog->site_id ); + + $this->_setup_host_request( 'wordpress.org', '/FOO/' ); + $this->assertEquals( $ids['wordpress.org/foo/'], $current_blog->blog_id ); + $this->assertEquals( $network_ids['wordpress.org/'], $current_blog->site_id ); + + $this->_setup_host_request( 'wordpress.org', '/foo/2014/04/23/hello-world/' ); + $this->assertEquals( $ids['wordpress.org/foo/'], $current_blog->blog_id ); + $this->assertEquals( $network_ids['wordpress.org/'], $current_blog->site_id ); + + $this->_setup_host_request( 'wordpress.org', '/foo/sample-page/' ); + $this->assertEquals( $ids['wordpress.org/foo/'], $current_blog->blog_id ); + $this->assertEquals( $network_ids['wordpress.org/'], $current_blog->site_id ); + + $this->_setup_host_request( 'wordpress.org', '/foo/?p=1' ); + $this->assertEquals( $ids['wordpress.org/foo/'], $current_blog->blog_id ); + $this->assertEquals( $network_ids['wordpress.org/'], $current_blog->site_id ); + + $this->_setup_host_request( 'wordpress.org', '/foo/wp-admin/' ); + $this->assertEquals( $ids['wordpress.org/foo/'], $current_blog->blog_id ); + $this->assertEquals( $network_ids['wordpress.org/'], $current_blog->site_id ); + + // @todo not currently passing. + //$this->_setup_host_request( 'wordpress.org', '/foo/bar/' ); + //$this->assertEquals( $ids['wordpress.org/foo/bar/'], $current_blog->blog_id ); + //$this->assertEquals( $network_ids['wordpress.org/'], $current_blog->site_id ); + + $this->_setup_host_request( 'make.wordpress.org', '/' ); + $this->assertEquals( $ids['make.wordpress.org/'], $current_blog->blog_id ); + $this->assertEquals( $network_ids['make.wordpress.org/'], $current_blog->site_id ); + + $this->_setup_host_request( 'make.wordpress.org', '/foo/' ); + $this->assertEquals( $ids['make.wordpress.org/foo/'], $current_blog->blog_id ); + $this->assertEquals( $network_ids['make.wordpress.org/'], $current_blog->site_id ); + } + + /** + * Reset various globals required for a 'clean' multisite boot. + * + * The $wpdb and $table_prefix globals are required for ms-settings.php to + * load properly. + * + * @param string $domain HTTP_HOST of the bootstrap request. + * @param string $path REQUEST_URI of the boot strap request. + */ + function _setup_host_request( $domain, $path ) { + global $current_site, $current_blog, $wpdb, $table_prefix; + + $current_site = $current_blog = null; + $_SERVER['HTTP_HOST'] = $domain; + $_SERVER['REQUEST_URI'] = $path; + + include ABSPATH . '/wp-includes/ms-settings.php'; + } } endif;