X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=tests%2Fphpunit%2Fincludes%2Fdb%2FLoadBalancerTest.php;h=6ced540ffd65a7ad4eaad30c278e6bef62c09c46;hb=740e157914a297a3ede390adb8db34c6d7c176f7;hp=5fd33dc1cfec228987b40bdfdd94ea855522c530;hpb=88dcf22da0d379a586496cc1749f4749703c96b2;p=lhc%2Fweb%2Fwiklou.git diff --git a/tests/phpunit/includes/db/LoadBalancerTest.php b/tests/phpunit/includes/db/LoadBalancerTest.php index 5fd33dc1cf..6ced540ffd 100644 --- a/tests/phpunit/includes/db/LoadBalancerTest.php +++ b/tests/phpunit/includes/db/LoadBalancerTest.php @@ -1,9 +1,5 @@ $wgDBserver, 'dbname' => $wgDBname, + 'tablePrefix' => $this->dbPrefix(), 'user' => $wgDBuser, 'password' => $wgDBpassword, 'type' => $wgDBtype, @@ -46,9 +51,13 @@ class LoadBalancerTest extends MediaWikiTestCase { $lb = new LoadBalancer( [ 'servers' => $servers, - 'localDomain' => wfWikiID() + 'localDomain' => new DatabaseDomain( $wgDBname, null, $this->dbPrefix() ) ] ); + $ld = DatabaseDomain::newFromId( $lb->getLocalDomainID() ); + $this->assertEquals( $wgDBname, $ld->getDatabase(), 'local domain DB set' ); + $this->assertEquals( $this->dbPrefix(), $ld->getTablePrefix(), 'local domain prefix set' ); + $dbw = $lb->getConnection( DB_MASTER ); $this->assertTrue( $dbw->getLBInfo( 'master' ), 'master shows as master' ); $this->assertTrue( $dbw->getFlag( $dbw::DBO_TRX ), "DBO_TRX set on master" ); @@ -81,6 +90,7 @@ class LoadBalancerTest extends MediaWikiTestCase { [ // master 'host' => $wgDBserver, 'dbname' => $wgDBname, + 'tablePrefix' => $this->dbPrefix(), 'user' => $wgDBuser, 'password' => $wgDBpassword, 'type' => $wgDBtype, @@ -91,6 +101,7 @@ class LoadBalancerTest extends MediaWikiTestCase { [ // emulated replica 'host' => $wgDBserver, 'dbname' => $wgDBname, + 'tablePrefix' => $this->dbPrefix(), 'user' => $wgDBuser, 'password' => $wgDBpassword, 'type' => $wgDBtype, @@ -102,8 +113,8 @@ class LoadBalancerTest extends MediaWikiTestCase { $lb = new LoadBalancer( [ 'servers' => $servers, - 'localDomain' => wfWikiID(), - 'loadMonitorClass' => 'LoadMonitorNull' + 'localDomain' => new DatabaseDomain( $wgDBname, null, $this->dbPrefix() ), + 'loadMonitorClass' => LoadMonitorNull::class ] ); $dbw = $lb->getConnection( DB_MASTER ); @@ -140,9 +151,9 @@ class LoadBalancerTest extends MediaWikiTestCase { $lb->closeAll(); } - private function assertWriteForbidden( IDatabase $db ) { + private function assertWriteForbidden( Database $db ) { try { - $db->delete( 'user', [ 'user_id' => 57634126 ], 'TEST' ); + $db->delete( 'some_table', [ 'id' => 57634126 ], __METHOD__ ); $this->fail( 'Write operation should have failed!' ); } catch ( DBError $ex ) { // check that the exception message contains "Write operation" @@ -157,12 +168,77 @@ class LoadBalancerTest extends MediaWikiTestCase { } } - private function assertWriteAllowed( IDatabase $db ) { + private function assertWriteAllowed( Database $db ) { + $table = $db->tableName( 'some_table' ); try { - $this->assertNotSame( false, $db->delete( 'user', [ 'user_id' => 57634126 ] ) ); + $db->dropTable( 'some_table' ); // clear for sanity + // Use only basic SQL and trivial types for these queries for compatibility + $this->assertNotSame( + false, + $db->query( "CREATE TABLE $table (id INT, time INT)", __METHOD__ ), + "table created" + ); + $this->assertNotSame( + false, + $db->query( "DELETE FROM $table WHERE id=57634126", __METHOD__ ), + "delete query" + ); + $this->assertNotSame( + false, + $db->query( "DROP TABLE $table", __METHOD__ ), + "table dropped" + ); } finally { $db->rollback( __METHOD__, 'flush' ); } } + public function testServerAttributes() { + $servers = [ + [ // master + 'dbname' => 'my_unittest_wiki', + 'tablePrefix' => 'unittest_', + 'type' => 'sqlite', + 'dbDirectory' => "some_directory", + 'load' => 0 + ] + ]; + + $lb = new LoadBalancer( [ + 'servers' => $servers, + 'localDomain' => new DatabaseDomain( 'my_unittest_wiki', null, 'unittest_' ), + 'loadMonitorClass' => LoadMonitorNull::class + ] ); + + $this->assertTrue( $lb->getServerAttributes( 0 )[Database::ATTR_DB_LEVEL_LOCKING] ); + + $servers = [ + [ // master + 'host' => 'db1001', + 'user' => 'wikiuser', + 'password' => 'none', + 'dbname' => 'my_unittest_wiki', + 'tablePrefix' => 'unittest_', + 'type' => 'mysql', + 'load' => 100 + ], + [ // emulated replica + 'host' => 'db1002', + 'user' => 'wikiuser', + 'password' => 'none', + 'dbname' => 'my_unittest_wiki', + 'tablePrefix' => 'unittest_', + 'type' => 'mysql', + 'load' => 100 + ] + ]; + + $lb = new LoadBalancer( [ + 'servers' => $servers, + 'localDomain' => new DatabaseDomain( 'my_unittest_wiki', null, 'unittest_' ), + 'loadMonitorClass' => LoadMonitorNull::class + ] ); + + $this->assertFalse( $lb->getServerAttributes( 1 )[Database::ATTR_DB_LEVEL_LOCKING] ); + } }