X-Git-Url: http://git.cyclocoop.org/?a=blobdiff_plain;f=tests%2Fphpunit%2Fincludes%2Fdb%2FLoadBalancerTest.php;h=e054569d03387719d736ec01bea703d010c7cf30;hb=c91a71c5f608675df6205a945bdc4be29d81d21e;hp=88cf0e04c6612e5c4cb5b5735e7efe7e655b1e1f;hpb=4660ce079ca78a66e4ec7386481868a52ecebda5;p=lhc%2Fweb%2Fwiklou.git diff --git a/tests/phpunit/includes/db/LoadBalancerTest.php b/tests/phpunit/includes/db/LoadBalancerTest.php index 88cf0e04c6..e054569d03 100644 --- a/tests/phpunit/includes/db/LoadBalancerTest.php +++ b/tests/phpunit/includes/db/LoadBalancerTest.php @@ -32,34 +32,42 @@ use Wikimedia\Rdbms\LoadMonitorNull; * @covers \Wikimedia\Rdbms\LoadBalancer */ class LoadBalancerTest extends MediaWikiTestCase { - public function testWithoutReplica() { + private function makeServerConfig() { global $wgDBserver, $wgDBname, $wgDBuser, $wgDBpassword, $wgDBtype, $wgSQLiteDataDir; - $servers = [ - [ - 'host' => $wgDBserver, - 'dbname' => $wgDBname, - 'tablePrefix' => $this->dbPrefix(), - 'user' => $wgDBuser, - 'password' => $wgDBpassword, - 'type' => $wgDBtype, - 'dbDirectory' => $wgSQLiteDataDir, - 'load' => 0, - 'flags' => DBO_TRX // REPEATABLE-READ for consistency - ], + return [ + 'host' => $wgDBserver, + 'dbname' => $wgDBname, + 'tablePrefix' => $this->dbPrefix(), + 'user' => $wgDBuser, + 'password' => $wgDBpassword, + 'type' => $wgDBtype, + 'dbDirectory' => $wgSQLiteDataDir, + 'load' => 0, + 'flags' => DBO_TRX // REPEATABLE-READ for consistency ]; + } + + public function testWithoutReplica() { + global $wgDBname; + $called = false; $lb = new LoadBalancer( [ - 'servers' => $servers, + 'servers' => [ $this->makeServerConfig() ], 'queryLogger' => MediaWiki\Logger\LoggerFactory::getInstance( 'DBQuery' ), - 'localDomain' => new DatabaseDomain( $wgDBname, null, $this->dbPrefix() ) + 'localDomain' => new DatabaseDomain( $wgDBname, null, $this->dbPrefix() ), + 'chronologyCallback' => function () use ( &$called ) { + $called = true; + } ] ); $ld = DatabaseDomain::newFromId( $lb->getLocalDomainID() ); $this->assertEquals( $wgDBname, $ld->getDatabase(), 'local domain DB set' ); $this->assertEquals( $this->dbPrefix(), $ld->getTablePrefix(), 'local domain prefix set' ); + $this->assertFalse( $called ); $dbw = $lb->getConnection( DB_MASTER ); + $this->assertTrue( $called ); $this->assertTrue( $dbw->getLBInfo( 'master' ), 'master shows as master' ); $this->assertTrue( $dbw->getFlag( $dbw::DBO_TRX ), "DBO_TRX set on master" ); $this->assertWriteAllowed( $dbw ); @@ -259,4 +267,39 @@ class LoadBalancerTest extends MediaWikiTestCase { $this->assertFalse( $lb->getServerAttributes( 1 )[Database::ATTR_DB_LEVEL_LOCKING] ); } + + /** + * @covers LoadBalancer::openConnection() + * @covers LoadBalancer::getAnyOpenConnection() + */ + function testOpenConnection() { + global $wgDBname; + + $lb = new LoadBalancer( [ + 'servers' => [ $this->makeServerConfig() ], + 'localDomain' => new DatabaseDomain( $wgDBname, null, $this->dbPrefix() ) + ] ); + + $i = $lb->getWriterIndex(); + $this->assertEquals( null, $lb->getAnyOpenConnection( $i ) ); + $conn1 = $lb->getConnection( $i ); + $this->assertNotEquals( null, $conn1 ); + $this->assertEquals( $conn1, $lb->getAnyOpenConnection( $i ) ); + $conn2 = $lb->getConnection( $i, [], false, $lb::CONN_TRX_AUTOCOMMIT ); + $this->assertNotEquals( null, $conn2 ); + if ( $lb->getServerAttributes( $i )[Database::ATTR_DB_LEVEL_LOCKING] ) { + $this->assertEquals( null, + $lb->getAnyOpenConnection( $i, $lb::CONN_TRX_AUTOCOMMIT ) ); + $this->assertEquals( $conn1, + $lb->getConnection( + $i, [], false, $lb::CONN_TRX_AUTOCOMMIT ), $lb::CONN_TRX_AUTOCOMMIT ); + } else { + $this->assertEquals( $conn2, + $lb->getAnyOpenConnection( $i, $lb::CONN_TRX_AUTOCOMMIT ) ); + $this->assertEquals( $conn2, + $lb->getConnection( $i, [], false, $lb::CONN_TRX_AUTOCOMMIT ) ); + } + + $lb->closeAll(); + } }