From: Aaron Schulz Date: Fri, 5 Apr 2019 04:18:37 +0000 (-0700) Subject: Clean up LoadBalancerTest and move more code to private methods X-Git-Tag: 1.34.0-rc.0~2150^2 X-Git-Url: http://git.cyclocoop.org/%7B%24www_url%7Dadmin/membres/fiche.php?a=commitdiff_plain;h=cd4e33a3b919bcccb161e9020421c4651a464e2a;p=lhc%2Fweb%2Fwiklou.git Clean up LoadBalancerTest and move more code to private methods Change-Id: I4c541537f9b95918f8d1a057ccbc29e8525ddc15 --- diff --git a/tests/phpunit/includes/db/LoadBalancerTest.php b/tests/phpunit/includes/db/LoadBalancerTest.php index 2c4e6b421b..cc01c7dbb5 100644 --- a/tests/phpunit/includes/db/LoadBalancerTest.php +++ b/tests/phpunit/includes/db/LoadBalancerTest.php @@ -32,7 +32,7 @@ use Wikimedia\Rdbms\LoadMonitorNull; * @covers \Wikimedia\Rdbms\LoadBalancer */ class LoadBalancerTest extends MediaWikiTestCase { - private function makeServerConfig() { + private function makeServerConfig( $flags = DBO_DEFAULT ) { global $wgDBserver, $wgDBname, $wgDBuser, $wgDBpassword, $wgDBtype, $wgSQLiteDataDir; return [ @@ -44,7 +44,7 @@ class LoadBalancerTest extends MediaWikiTestCase { 'type' => $wgDBtype, 'dbDirectory' => $wgSQLiteDataDir, 'load' => 0, - 'flags' => DBO_TRX // REPEATABLE-READ for consistency + 'flags' => $flags ]; } @@ -57,7 +57,8 @@ class LoadBalancerTest extends MediaWikiTestCase { $called = false; $lb = new LoadBalancer( [ - 'servers' => [ $this->makeServerConfig() ], + // Simulate web request with DBO_TRX + 'servers' => [ $this->makeServerConfig( DBO_TRX ) ], 'queryLogger' => MediaWiki\Logger\LoggerFactory::getInstance( 'DBQuery' ), 'localDomain' => new DatabaseDomain( $wgDBname, null, $this->dbPrefix() ), 'chronologyCallback' => function () use ( &$called ) { @@ -71,8 +72,8 @@ class LoadBalancerTest extends MediaWikiTestCase { $this->assertSame( 'my_test_wiki', $lb->resolveDomainID( 'my_test_wiki' ) ); $this->assertSame( $ld->getId(), $lb->resolveDomainID( false ) ); $this->assertSame( $ld->getId(), $lb->resolveDomainID( $ld ) ); - $this->assertFalse( $called ); + $dbw = $lb->getConnection( DB_MASTER ); $this->assertTrue( $called ); $this->assertTrue( $dbw->getLBInfo( 'master' ), 'master shows as master' ); @@ -106,39 +107,10 @@ class LoadBalancerTest extends MediaWikiTestCase { } public function testWithReplica() { - global $wgDBserver, $wgDBname, $wgDBuser, $wgDBpassword, $wgDBtype, $wgSQLiteDataDir; + global $wgDBserver; - $servers = [ - [ // master - 'host' => $wgDBserver, - 'dbname' => $wgDBname, - 'tablePrefix' => $this->dbPrefix(), - 'user' => $wgDBuser, - 'password' => $wgDBpassword, - 'type' => $wgDBtype, - 'dbDirectory' => $wgSQLiteDataDir, - 'load' => 0, - 'flags' => DBO_TRX // REPEATABLE-READ for consistency - ], - [ // emulated replica - 'host' => $wgDBserver, - 'dbname' => $wgDBname, - 'tablePrefix' => $this->dbPrefix(), - 'user' => $wgDBuser, - 'password' => $wgDBpassword, - 'type' => $wgDBtype, - 'dbDirectory' => $wgSQLiteDataDir, - 'load' => 100, - 'flags' => DBO_TRX // REPEATABLE-READ for consistency - ] - ]; - - $lb = new LoadBalancer( [ - 'servers' => $servers, - 'localDomain' => new DatabaseDomain( $wgDBname, null, $this->dbPrefix() ), - 'queryLogger' => MediaWiki\Logger\LoggerFactory::getInstance( 'DBQuery' ), - 'loadMonitorClass' => LoadMonitorNull::class - ] ); + // Simulate web request with DBO_TRX + $lb = $this->newMultiServerLocalLoadBalancer( DBO_TRX ); $dbw = $lb->getConnection( DB_MASTER ); $this->assertTrue( $dbw->getLBInfo( 'master' ), 'master shows as master' ); @@ -180,6 +152,51 @@ class LoadBalancerTest extends MediaWikiTestCase { $lb->closeAll(); } + private function newSingleServerLocalLoadBalancer() { + global $wgDBname; + + return new LoadBalancer( [ + 'servers' => [ $this->makeServerConfig() ], + 'localDomain' => new DatabaseDomain( $wgDBname, null, $this->dbPrefix() ) + ] ); + } + + private function newMultiServerLocalLoadBalancer( $flags = DBO_DEFAULT ) { + global $wgDBserver, $wgDBname, $wgDBuser, $wgDBpassword, $wgDBtype, $wgSQLiteDataDir; + + $servers = [ + [ // master + 'host' => $wgDBserver, + 'dbname' => $wgDBname, + 'tablePrefix' => $this->dbPrefix(), + 'user' => $wgDBuser, + 'password' => $wgDBpassword, + 'type' => $wgDBtype, + 'dbDirectory' => $wgSQLiteDataDir, + 'load' => 0, + 'flags' => $flags + ], + [ // emulated replica + 'host' => $wgDBserver, + 'dbname' => $wgDBname, + 'tablePrefix' => $this->dbPrefix(), + 'user' => $wgDBuser, + 'password' => $wgDBpassword, + 'type' => $wgDBtype, + 'dbDirectory' => $wgSQLiteDataDir, + 'load' => 100, + 'flags' => $flags + ] + ]; + + return new LoadBalancer( [ + 'servers' => $servers, + 'localDomain' => new DatabaseDomain( $wgDBname, null, $this->dbPrefix() ), + 'queryLogger' => MediaWiki\Logger\LoggerFactory::getInstance( 'DBQuery' ), + 'loadMonitorClass' => LoadMonitorNull::class + ] ); + } + private function assertWriteForbidden( Database $db ) { try { $db->delete( 'some_table', [ 'id' => 57634126 ], __METHOD__ ); @@ -286,12 +303,7 @@ class LoadBalancerTest extends MediaWikiTestCase { * @covers LoadBalancer::getAnyOpenConnection() */ function testOpenConnection() { - global $wgDBname; - - $lb = new LoadBalancer( [ - 'servers' => [ $this->makeServerConfig() ], - 'localDomain' => new DatabaseDomain( $wgDBname, null, $this->dbPrefix() ) - ] ); + $lb = $this->newSingleServerLocalLoadBalancer(); $i = $lb->getWriterIndex(); $this->assertEquals( null, $lb->getAnyOpenConnection( $i ) );