X-Git-Url: http://git.inspyration.org/?a=blobdiff_plain;f=vendor%2Fdoctrine%2Fdbal%2Ftests%2FDoctrine%2FTests%2FDBAL%2FFunctional%2FMasterSlaveConnectionTest.php;fp=vendor%2Fdoctrine%2Fdbal%2Ftests%2FDoctrine%2FTests%2FDBAL%2FFunctional%2FMasterSlaveConnectionTest.php;h=3317c6b6fc17d071766827d87041d79396168447;hb=8b04b2d11798dee4f3e1358e4f43e97a6df851f6;hp=0000000000000000000000000000000000000000;hpb=73568cf05a785a45f94ca3f2351d9e07bf917958;p=zf2.biz%2Fgalerie.git diff --git a/vendor/doctrine/dbal/tests/Doctrine/Tests/DBAL/Functional/MasterSlaveConnectionTest.php b/vendor/doctrine/dbal/tests/Doctrine/Tests/DBAL/Functional/MasterSlaveConnectionTest.php new file mode 100644 index 0000000..3317c6b --- /dev/null +++ b/vendor/doctrine/dbal/tests/Doctrine/Tests/DBAL/Functional/MasterSlaveConnectionTest.php @@ -0,0 +1,102 @@ +_conn->getDatabasePlatform()->getName() == "sqlite") { + $this->markTestSkipped('Test does not work on sqlite.'); + } + + try { + /* @var $sm \Doctrine\DBAL\Schema\AbstractSchemaManager */ + $table = new \Doctrine\DBAL\Schema\Table("master_slave_table"); + $table->addColumn('test_int', 'integer'); + $table->setPrimaryKey(array('test_int')); + + $sm = $this->_conn->getSchemaManager(); + $sm->createTable($table); + + $this->_conn->insert('master_slave_table', array('test_int' => 1)); + } catch(\Exception $e) { + } + } + + public function createMasterSlaveConnection($keepSlave = false) + { + $params = $this->_conn->getParams(); + $params['master'] = $params; + $params['slaves'] = array($params, $params); + $params['keepSlave'] = $keepSlave; + $params['wrapperClass'] = 'Doctrine\DBAL\Connections\MasterSlaveConnection'; + + return DriverManager::getConnection($params); + } + + public function testMasterOnConnect() + { + $conn = $this->createMasterSlaveConnection(); + + $this->assertFalse($conn->isConnectedToMaster()); + $conn->connect('slave'); + $this->assertFalse($conn->isConnectedToMaster()); + $conn->connect('master'); + $this->assertTrue($conn->isConnectedToMaster()); + } + + public function testNoMasterOnExecuteQuery() + { + $conn = $this->createMasterSlaveConnection(); + + $sql = "SELECT count(*) as num FROM master_slave_table"; + $data = $conn->fetchAll($sql); + $data[0] = array_change_key_case($data[0], CASE_LOWER); + + $this->assertEquals(1, $data[0]['num']); + $this->assertFalse($conn->isConnectedToMaster()); + } + + public function testMasterOnWriteOperation() + { + $conn = $this->createMasterSlaveConnection(); + $conn->insert('master_slave_table', array('test_int' => 30)); + + $this->assertTrue($conn->isConnectedToMaster()); + + $sql = "SELECT count(*) as num FROM master_slave_table"; + $data = $conn->fetchAll($sql); + $data[0] = array_change_key_case($data[0], CASE_LOWER); + + $this->assertEquals(2, $data[0]['num']); + $this->assertTrue($conn->isConnectedToMaster()); + } + + /** + * @group DBAL-335 + */ + public function testKeepSlaveBeginTransactionStaysOnMaster() + { + $conn = $this->createMasterSlaveConnection($keepSlave = true); + $conn->connect('slave'); + + $conn->insert('master_slave_table', array('test_int' => 40)); + + $this->assertTrue($conn->isConnectedToMaster()); + + $conn->connect(); + $this->assertTrue($conn->isConnectedToMaster()); + + $conn->connect('slave'); + $this->assertFalse($conn->isConnectedToMaster()); + } +}