Rajout de doctrine/orm
[zf2.biz/galerie.git] / vendor / doctrine / dbal / tests / Doctrine / Tests / DBAL / Functional / MasterSlaveConnectionTest.php
1 <?php
2
3 namespace Doctrine\Tests\DBAL\Functional;
4
5 use Doctrine\Tests\DbalFunctionalTestCase;
6 use Doctrine\DBAL\DriverManager;
7
8 /**
9  * @group DBAL-20
10  */
11 class MasterSlaveConnectionTest extends DbalFunctionalTestCase
12 {
13     public function setUp()
14     {
15         parent::setUp();
16
17         if ($this->_conn->getDatabasePlatform()->getName() == "sqlite") {
18             $this->markTestSkipped('Test does not work on sqlite.');
19         }
20
21         try {
22             /* @var $sm \Doctrine\DBAL\Schema\AbstractSchemaManager */
23             $table = new \Doctrine\DBAL\Schema\Table("master_slave_table");
24             $table->addColumn('test_int', 'integer');
25             $table->setPrimaryKey(array('test_int'));
26
27             $sm = $this->_conn->getSchemaManager();
28             $sm->createTable($table);
29
30             $this->_conn->insert('master_slave_table', array('test_int' => 1));
31         } catch(\Exception $e) {
32         }
33     }
34
35     public function createMasterSlaveConnection($keepSlave = false)
36     {
37         $params = $this->_conn->getParams();
38         $params['master']       = $params;
39         $params['slaves']       = array($params, $params);
40         $params['keepSlave']    = $keepSlave;
41         $params['wrapperClass'] = 'Doctrine\DBAL\Connections\MasterSlaveConnection';
42
43         return DriverManager::getConnection($params);
44     }
45
46     public function testMasterOnConnect()
47     {
48         $conn = $this->createMasterSlaveConnection();
49
50         $this->assertFalse($conn->isConnectedToMaster());
51         $conn->connect('slave');
52         $this->assertFalse($conn->isConnectedToMaster());
53         $conn->connect('master');
54         $this->assertTrue($conn->isConnectedToMaster());
55     }
56
57     public function testNoMasterOnExecuteQuery()
58     {
59         $conn = $this->createMasterSlaveConnection();
60
61         $sql = "SELECT count(*) as num FROM master_slave_table";
62         $data = $conn->fetchAll($sql);
63         $data[0] = array_change_key_case($data[0], CASE_LOWER);
64
65         $this->assertEquals(1, $data[0]['num']);
66         $this->assertFalse($conn->isConnectedToMaster());
67     }
68
69     public function testMasterOnWriteOperation()
70     {
71         $conn = $this->createMasterSlaveConnection();
72         $conn->insert('master_slave_table', array('test_int' => 30));
73
74         $this->assertTrue($conn->isConnectedToMaster());
75
76         $sql = "SELECT count(*) as num FROM master_slave_table";
77         $data = $conn->fetchAll($sql);
78         $data[0] = array_change_key_case($data[0], CASE_LOWER);
79
80         $this->assertEquals(2, $data[0]['num']);
81         $this->assertTrue($conn->isConnectedToMaster());
82     }
83
84     /**
85      * @group DBAL-335
86      */
87     public function testKeepSlaveBeginTransactionStaysOnMaster()
88     {
89         $conn = $this->createMasterSlaveConnection($keepSlave = true);
90         $conn->connect('slave');
91
92         $conn->insert('master_slave_table', array('test_int' => 40));
93
94         $this->assertTrue($conn->isConnectedToMaster());
95
96         $conn->connect();
97         $this->assertTrue($conn->isConnectedToMaster());
98
99         $conn->connect('slave');
100         $this->assertFalse($conn->isConnectedToMaster());
101     }
102 }