rdbms: make LoadBalancer::reallyOpenConnection() handle setting DBO_TRX
[lhc/web/wiklou.git] / tests / phpunit / includes / db / LBFactoryTest.php
index 123b080..1296bb6 100644 (file)
@@ -23,6 +23,7 @@
  * @copyright © 2013 Wikimedia Foundation Inc.
  */
 
+use Wikimedia\AtEase\AtEase;
 use Wikimedia\Rdbms\IDatabase;
 use Wikimedia\Rdbms\IMaintainableDatabase;
 use Wikimedia\Rdbms\LBFactory;
@@ -315,6 +316,7 @@ class LBFactoryTest extends MediaWikiTestCase {
                                }
                        ) );
                $lb1->method( 'getMasterPos' )->willReturn( $m1Pos );
+               $lb1->method( 'getReplicaResumePos' )->willReturn( $m1Pos );
                $lb1->method( 'getServerName' )->with( 0 )->willReturn( 'master1' );
                // Master DB 2
                $mockDB2 = $this->getMockBuilder( IDatabase::class )
@@ -342,6 +344,7 @@ class LBFactoryTest extends MediaWikiTestCase {
                        }
                ) );
                $lb2->method( 'getMasterPos' )->willReturn( $m2Pos );
+               $lb2->method( 'getReplicaResumePos' )->willReturn( $m2Pos );
                $lb2->method( 'getServerName' )->with( 0 )->willReturn( 'master2' );
 
                $bag = new HashBagOStuff();
@@ -449,8 +452,6 @@ class LBFactoryTest extends MediaWikiTestCase {
         * @covers \Wikimedia\Rdbms\LoadBalancer::getConnection
         * @covers \Wikimedia\Rdbms\DatabaseMysqlBase::doSelectDomain
         * @covers \Wikimedia\Rdbms\DatabaseMysqlBase::selectDB
-        * @covers \Wikimedia\Rdbms\DatabaseMssql::selectDB
-        * @covers DatabaseOracle::selectDB
         */
        public function testNiceDomains() {
                global $wgDBname;
@@ -474,7 +475,7 @@ class LBFactoryTest extends MediaWikiTestCase {
                unset( $db );
 
                /** @var IMaintainableDatabase $db */
-               $db = $lb->getConnection( DB_MASTER, [], '' );
+               $db = $lb->getConnection( DB_MASTER, [], $lb::DOMAIN_ANY );
 
                $this->assertEquals(
                        '',
@@ -536,8 +537,6 @@ class LBFactoryTest extends MediaWikiTestCase {
         * @covers \Wikimedia\Rdbms\LoadBalancer::getConnection
         * @covers \Wikimedia\Rdbms\DatabaseMysqlBase::doSelectDomain
         * @covers \Wikimedia\Rdbms\DatabaseMysqlBase::selectDB
-        * @covers \Wikimedia\Rdbms\DatabaseMssql::selectDB
-        * @covers DatabaseOracle::selectDB
         */
        public function testTrickyDomain() {
                global $wgDBname;
@@ -556,7 +555,7 @@ class LBFactoryTest extends MediaWikiTestCase {
                );
                $lb = $factory->getMainLB();
                /** @var IMaintainableDatabase $db */
-               $db = $lb->getConnection( DB_MASTER, [], '' );
+               $db = $lb->getConnection( DB_MASTER, [], $lb::DOMAIN_ANY );
 
                $this->assertEquals( '', $db->getDomainID(), "Null domain used" );
 
@@ -609,8 +608,6 @@ class LBFactoryTest extends MediaWikiTestCase {
         * @covers \Wikimedia\Rdbms\LoadBalancer::getConnection
         * @covers \Wikimedia\Rdbms\DatabaseMysqlBase::doSelectDomain
         * @covers \Wikimedia\Rdbms\DatabaseMysqlBase::selectDB
-        * @covers \Wikimedia\Rdbms\DatabaseMssql::selectDB
-        * @covers DatabaseOracle::selectDB
         */
        public function testInvalidSelectDB() {
                if ( wfGetDB( DB_MASTER )->databasesAreIndependent() ) {
@@ -626,16 +623,16 @@ class LBFactoryTest extends MediaWikiTestCase {
                );
                $lb = $factory->getMainLB();
                /** @var IDatabase $db */
-               $db = $lb->getConnection( DB_MASTER, [], '' );
+               $db = $lb->getConnection( DB_MASTER, [], $lb::DOMAIN_ANY );
 
-               \Wikimedia\suppressWarnings();
+               AtEase::suppressWarnings();
                try {
-                       $this->assertFalse( $db->selectDB( 'garbage-db' ) );
+                       $this->assertFalse( $db->selectDomain( 'garbagedb' ) );
                        $this->fail( "No error thrown." );
                } catch ( \Wikimedia\Rdbms\DBQueryError $e ) {
-                       $this->assertRegExp( '/[\'"]garbage-db[\'"]/', $e->getMessage() );
+                       $this->assertRegExp( '/[\'"]garbagedb[\'"]/', $e->getMessage() );
                }
-               \Wikimedia\restoreWarnings();
+               AtEase::restoreWarnings();
        }
 
        /**
@@ -643,55 +640,53 @@ class LBFactoryTest extends MediaWikiTestCase {
         * @covers \Wikimedia\Rdbms\DatabasePostgres::selectDB
         * @expectedException \Wikimedia\Rdbms\DBConnectionError
         */
-       public function testInvalidSelectDBIndependant() {
+       public function testInvalidSelectDBIndependent() {
                $dbname = 'unittest-domain'; // explodes if DB is selected
                $factory = $this->newLBFactoryMulti(
                        [ 'localDomain' => ( new DatabaseDomain( $dbname, null, '' ) )->getId() ],
                        [
-                               'dbname' => 'do_not_select_me' // explodes if DB is selected
+                               // Explodes with SQLite and Postgres during open/USE
+                               'dbname' => 'bad_dir/do_not_select_me'
                        ]
                );
                $lb = $factory->getMainLB();
 
-               if ( !wfGetDB( DB_MASTER )->databasesAreIndependent() ) {
-                       $this->markTestSkipped( "Not applicable per databasesAreIndependent()" );
+               if ( !$factory->getMainLB()->getServerAttributes( 0 )[Database::ATTR_DB_IS_FILE] ) {
+                       $this->markTestSkipped( "Not applicable per ATTR_DB_IS_FILE" );
                }
 
                /** @var IDatabase $db */
-               $lb->getConnection( DB_MASTER, [], '' );
+               $this->assertNotNull( $lb->getConnection( DB_MASTER, [], $lb::DOMAIN_ANY ) );
        }
 
        /**
         * @covers \Wikimedia\Rdbms\DatabaseSqlite::selectDB
         * @covers \Wikimedia\Rdbms\DatabasePostgres::selectDB
-        * @expectedException \Wikimedia\Rdbms\DBConnectionError
+        * @expectedException \Wikimedia\Rdbms\DBExpectedError
         */
-       public function testInvalidSelectDBIndependant2() {
+       public function testInvalidSelectDBIndependent2() {
                $dbname = 'unittest-domain'; // explodes if DB is selected
                $factory = $this->newLBFactoryMulti(
                        [ 'localDomain' => ( new DatabaseDomain( $dbname, null, '' ) )->getId() ],
                        [
-                               'dbname' => 'do_not_select_me' // explodes if DB is selected
+                               // Explodes with SQLite and Postgres during open/USE
+                               'dbname' => 'bad_dir/do_not_select_me'
                        ]
                );
                $lb = $factory->getMainLB();
 
-               if ( !wfGetDB( DB_MASTER )->databasesAreIndependent() ) {
+               if ( !$lb->getConnection( DB_MASTER )->databasesAreIndependent() ) {
                        $this->markTestSkipped( "Not applicable per databasesAreIndependent()" );
                }
 
                $db = $lb->getConnection( DB_MASTER );
-               \Wikimedia\suppressWarnings();
-               $db->selectDB( 'garbage-db' );
-               \Wikimedia\restoreWarnings();
+               $db->selectDomain( 'garbage-db' );
        }
 
        /**
         * @covers \Wikimedia\Rdbms\LoadBalancer::getConnection
         * @covers \Wikimedia\Rdbms\LoadBalancer::redefineLocalDomain
         * @covers \Wikimedia\Rdbms\DatabaseMysqlBase::selectDB
-        * @covers \Wikimedia\Rdbms\DatabaseMssql::selectDB
-        * @covers DatabaseOracle::selectDB
         */
        public function testRedefineLocalDomain() {
                global $wgDBname;