X-Git-Url: http://git.cyclocoop.org/?a=blobdiff_plain;f=tests%2Fphpunit%2Fincludes%2Fdb%2FLoadBalancerTest.php;h=5a748ccd0ef3fed4d576e3b235448f6cdca79bf6;hb=2fd62f5dc9941cc269d6c4faa9a8fbe11975d479;hp=7462f1d530244ccf02c5e2028895e80868c192e6;hpb=20670b2ef91c3afbfacdd0a881648a27be0d282d;p=lhc%2Fweb%2Fwiklou.git diff --git a/tests/phpunit/includes/db/LoadBalancerTest.php b/tests/phpunit/includes/db/LoadBalancerTest.php index 7462f1d530..5a748ccd0e 100644 --- a/tests/phpunit/includes/db/LoadBalancerTest.php +++ b/tests/phpunit/includes/db/LoadBalancerTest.php @@ -48,6 +48,10 @@ class LoadBalancerTest extends MediaWikiTestCase { ]; } + /** + * @covers LoadBalancer::getLocalDomainID() + * @covers LoadBalancer::resolveDomainID() + */ public function testWithoutReplica() { global $wgDBname; @@ -64,6 +68,9 @@ class LoadBalancerTest extends MediaWikiTestCase { $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->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 ); @@ -190,32 +197,38 @@ class LoadBalancerTest extends MediaWikiTestCase { private function assertWriteAllowed( Database $db ) { $table = $db->tableName( 'some_table' ); + // Trigger a transaction so that rollback() will remove all the tables. + // Don't do this for MySQL/Oracle as they auto-commit transactions for DDL + // statements such as CREATE TABLE. + $useAtomicSection = in_array( $db->getType(), [ 'sqlite', 'postgres', 'mssql' ], true ); try { $db->dropTable( 'some_table' ); // clear for sanity + $this->assertNotEquals( $db::STATUS_TRX_ERROR, $db->trxStatus() ); - // Trigger DBO_TRX to create a transaction so the flush below will - // roll everything here back in sqlite. But don't actually do the - // code below inside an atomic section becaue MySQL and Oracle - // auto-commit transactions for DDL statements like CREATE TABLE. - $db->startAtomic( __METHOD__ ); - $db->endAtomic( __METHOD__ ); - + if ( $useAtomicSection ) { + $db->startAtomic( __METHOD__ ); + } // 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->assertNotEquals( $db::STATUS_TRX_ERROR, $db->trxStatus() ); $this->assertNotSame( false, $db->query( "DELETE FROM $table WHERE id=57634126", __METHOD__ ), "delete query" ); + $this->assertNotEquals( $db::STATUS_TRX_ERROR, $db->trxStatus() ); } finally { - // Drop the table to clean up, ignoring any error. - $db->query( "DROP TABLE $table", __METHOD__, true ); - // Rollback the DBO_TRX transaction for sqlite's benefit. + if ( !$useAtomicSection ) { + // Drop the table to clean up, ignoring any error. + $db->dropTable( 'some_table' ); + } + // Rollback the atomic section for sqlite's benefit. $db->rollback( __METHOD__, 'flush' ); + $this->assertNotEquals( $db::STATUS_TRX_ERROR, $db->trxStatus() ); } } @@ -365,13 +378,13 @@ class LoadBalancerTest extends MediaWikiTestCase { $tlCalls = 0; $lb->beginMasterChanges( __METHOD__ ); $ac = array_fill_keys( [ 'a', 'b', 'c', 'd' ], 0 ); - $conn1->onTransactionIdle( function () use ( &$ac, $conn1, $conn2 ) { + $conn1->onTransactionCommitOrIdle( function () use ( &$ac, $conn1, $conn2 ) { $ac['a'] = 1; - $conn2->onTransactionIdle( function () use ( &$ac, $conn1, $conn2 ) { + $conn2->onTransactionCommitOrIdle( function () use ( &$ac, $conn1, $conn2 ) { $ac['b'] = 1; - $conn1->onTransactionIdle( function () use ( &$ac, $conn1, $conn2 ) { + $conn1->onTransactionCommitOrIdle( function () use ( &$ac, $conn1, $conn2 ) { $ac['c'] = 1; - $conn1->onTransactionIdle( function () use ( &$ac, $conn1, $conn2 ) { + $conn1->onTransactionCommitOrIdle( function () use ( &$ac, $conn1, $conn2 ) { $ac['d'] = 1; } ); } );