X-Git-Url: https://git.cyclocoop.org/%242?a=blobdiff_plain;f=tests%2Fphpunit%2Fincludes%2Fdb%2FLBFactoryTest.php;h=aed2d83a7d7f5b35f1e39bd5af2da0c865e0b954;hb=bcd377cd008f8a8628ab727c3fa90090725d6c10;hp=364a6c29346b550c188443270f66feeba7f85f55;hpb=efe855145dfe509aa6c62f4bcee6fbf320fda957;p=lhc%2Fweb%2Fwiklou.git diff --git a/tests/phpunit/includes/db/LBFactoryTest.php b/tests/phpunit/includes/db/LBFactoryTest.php index 364a6c2934..aed2d83a7d 100644 --- a/tests/phpunit/includes/db/LBFactoryTest.php +++ b/tests/phpunit/includes/db/LBFactoryTest.php @@ -43,7 +43,7 @@ class LBFactoryTest extends MediaWikiTestCase { ]; $this->hideDeprecated( '$wgLBFactoryConf must be updated. See RELEASE-NOTES for details' ); - $result = LBFactory::getLBFactoryClass( $config ); + $result = MWLBFactory::getLBFactoryClass( $config ); $this->assertEquals( $expected, $result ); } @@ -58,9 +58,21 @@ class LBFactoryTest extends MediaWikiTestCase { } public function testLBFactorySimpleServer() { - $this->setMwGlobals( 'wgDBservers', false ); + global $wgDBserver, $wgDBname, $wgDBuser, $wgDBpassword, $wgDBtype; - $factory = new LBFactorySimple( [] ); + $servers = [ + [ + 'host' => $wgDBserver, + 'dbname' => $wgDBname, + 'user' => $wgDBuser, + 'password' => $wgDBpassword, + 'type' => $wgDBtype, + 'load' => 0, + 'flags' => DBO_TRX // REPEATABLE-READ for consistency + ], + ]; + + $factory = new LBFactorySimple( [ 'servers' => $servers ] ); $lb = $factory->getMainLB(); $dbw = $lb->getConnection( DB_MASTER ); @@ -76,28 +88,31 @@ class LBFactoryTest extends MediaWikiTestCase { public function testLBFactorySimpleServers() { global $wgDBserver, $wgDBname, $wgDBuser, $wgDBpassword, $wgDBtype; - $this->setMwGlobals( 'wgDBservers', [ + $servers = [ [ // master - 'host' => $wgDBserver, - 'dbname' => $wgDBname, - 'user' => $wgDBuser, - 'password' => $wgDBpassword, - 'type' => $wgDBtype, - 'load' => 0, - 'flags' => DBO_TRX // REPEATABLE-READ for consistency + 'host' => $wgDBserver, + 'dbname' => $wgDBname, + 'user' => $wgDBuser, + 'password' => $wgDBpassword, + 'type' => $wgDBtype, + 'load' => 0, + 'flags' => DBO_TRX // REPEATABLE-READ for consistency ], [ // emulated slave - 'host' => $wgDBserver, - 'dbname' => $wgDBname, - 'user' => $wgDBuser, - 'password' => $wgDBpassword, - 'type' => $wgDBtype, - 'load' => 100, - 'flags' => DBO_TRX // REPEATABLE-READ for consistency + 'host' => $wgDBserver, + 'dbname' => $wgDBname, + 'user' => $wgDBuser, + 'password' => $wgDBpassword, + 'type' => $wgDBtype, + 'load' => 100, + 'flags' => DBO_TRX // REPEATABLE-READ for consistency ] - ] ); + ]; - $factory = new LBFactorySimple( [ 'loadMonitorClass' => 'LoadMonitorNull' ] ); + $factory = new LBFactorySimple( [ + 'servers' => $servers, + 'loadMonitorClass' => 'LoadMonitorNull' + ] ); $lb = $factory->getMainLB(); $dbw = $lb->getConnection( DB_MASTER ); @@ -216,4 +231,148 @@ class LBFactoryTest extends MediaWikiTestCase { $cp->shutdownLB( $lb ); $cp->shutdown(); } + + private function newLBFactoryMulti( array $baseOverride = [], array $serverOverride = [] ) { + global $wgDBserver, $wgDBuser, $wgDBpassword, $wgDBname, $wgDBtype; + + return new LBFactoryMulti( $baseOverride + [ + 'sectionsByDB' => [], + 'sectionLoads' => [ + 'DEFAULT' => [ + 'test-db1' => 1, + ], + ], + 'serverTemplate' => $serverOverride + [ + 'dbname' => $wgDBname, + 'user' => $wgDBuser, + 'password' => $wgDBpassword, + 'type' => $wgDBtype, + 'flags' => DBO_DEFAULT + ], + 'hostsByName' => [ + 'test-db1' => $wgDBserver, + ], + 'loadMonitorClass' => 'LoadMonitorNull', + 'localDomain' => wfWikiID() + ] ); + } + + public function testNiceDomains() { + global $wgDBname; + + $factory = $this->newLBFactoryMulti(); + $lb = $factory->getMainLB(); + + $db = $lb->getConnectionRef( DB_MASTER ); + $this->assertEquals( + $wgDBname, + $db->getDomainID() + ); + unset( $db ); + + /** @var Database $db */ + $db = $lb->getConnection( DB_MASTER, [], '' ); + $lb->reuseConnection( $db ); // don't care + + $this->assertEquals( + '', + $db->getDomainID() + ); + + $this->assertEquals( + $db->addIdentifierQuotes( 'page' ), + $db->tableName( 'page' ), + "Correct full table name" + ); + + $this->assertEquals( + $db->addIdentifierQuotes( $wgDBname ) . '.' . $db->addIdentifierQuotes( 'page' ), + $db->tableName( "$wgDBname.page" ), + "Correct full table name" + ); + + $this->assertEquals( + $db->addIdentifierQuotes( 'nice_db' ) . '.' . $db->addIdentifierQuotes( 'page' ), + $db->tableName( 'nice_db.page' ), + "Correct full table name" + ); + + $factory->setDomainPrefix( 'my_' ); + $this->assertEquals( + '', + $db->getDomainID() + ); + $this->assertEquals( + $db->addIdentifierQuotes( 'my_page' ), + $db->tableName( 'page' ), + "Correct full table name" + ); + $this->assertEquals( + $db->addIdentifierQuotes( 'other_nice_db' ) . '.' . $db->addIdentifierQuotes( 'page' ), + $db->tableName( 'other_nice_db.page' ), + "Correct full table name" + ); + + $factory->closeAll(); + $factory->destroy(); + } + + public function testTrickyDomain() { + $dbname = 'unittest-domain'; + $factory = $this->newLBFactoryMulti( + [ 'localDomain' => $dbname ], [ 'dbname' => $dbname ] ); + $lb = $factory->getMainLB(); + /** @var Database $db */ + $db = $lb->getConnection( DB_MASTER, [], '' ); + $lb->reuseConnection( $db ); // don't care + + $this->assertEquals( + '', + $db->getDomainID() + ); + + $this->assertEquals( + $db->addIdentifierQuotes( 'page' ), + $db->tableName( 'page' ), + "Correct full table name" + ); + + $this->assertEquals( + $db->addIdentifierQuotes( $dbname ) . '.' . $db->addIdentifierQuotes( 'page' ), + $db->tableName( "$dbname.page" ), + "Correct full table name" + ); + + $this->assertEquals( + $db->addIdentifierQuotes( 'nice_db' ) . '.' . $db->addIdentifierQuotes( 'page' ), + $db->tableName( 'nice_db.page' ), + "Correct full table name" + ); + + $factory->setDomainPrefix( 'my_' ); + + $this->assertEquals( + $db->addIdentifierQuotes( 'my_page' ), + $db->tableName( 'page' ), + "Correct full table name" + ); + $this->assertEquals( + $db->addIdentifierQuotes( 'other_nice_db' ) . '.' . $db->addIdentifierQuotes( 'page' ), + $db->tableName( 'other_nice_db.page' ), + "Correct full table name" + ); + + \MediaWiki\suppressWarnings(); + $this->assertFalse( $db->selectDB( 'garbage-db' ) ); + \MediaWiki\restoreWarnings(); + + $this->assertEquals( + $db->addIdentifierQuotes( 'garbage-db' ) . '.' . $db->addIdentifierQuotes( 'page' ), + $db->tableName( 'garbage-db.page' ), + "Correct full table name" + ); + + $factory->closeAll(); + $factory->destroy(); + } }