rdbms: make LoadBalancer::reallyOpenConnection() handle setting DBO_TRX
[lhc/web/wiklou.git] / tests / phpunit / includes / db / LBFactoryTest.php
index 424c64b..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;
@@ -451,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;
@@ -476,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(
                        '',
@@ -538,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;
@@ -558,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" );
 
@@ -611,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() ) {
@@ -628,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();
        }
 
        /**
@@ -645,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;