1 | <?php |
||
2 | |||
3 | namespace Doctrine\Tests\DBAL\Functional; |
||
4 | |||
5 | use Doctrine\DBAL\DriverManager; |
||
6 | use Doctrine\Tests\DbalFunctionalTestCase; |
||
7 | |||
8 | /** |
||
9 | * @group DBAL-20 |
||
10 | */ |
||
11 | class MasterSlaveConnectionTest extends DbalFunctionalTestCase |
||
12 | { |
||
13 | protected function setUp() |
||
14 | { |
||
15 | parent::setUp(); |
||
16 | |||
17 | $platformName = $this->_conn->getDatabasePlatform()->getName(); |
||
18 | |||
19 | // This is a MySQL specific test, skip other vendors. |
||
20 | if ($platformName != 'mysql') { |
||
21 | $this->markTestSkipped(sprintf('Test does not work on %s.', $platformName)); |
||
22 | } |
||
23 | |||
24 | try { |
||
25 | /* @var $sm \Doctrine\DBAL\Schema\AbstractSchemaManager */ |
||
26 | $table = new \Doctrine\DBAL\Schema\Table("master_slave_table"); |
||
27 | $table->addColumn('test_int', 'integer'); |
||
28 | $table->setPrimaryKey(array('test_int')); |
||
29 | |||
30 | $sm = $this->_conn->getSchemaManager(); |
||
31 | $sm->createTable($table); |
||
32 | |||
33 | |||
34 | } catch(\Exception $e) { |
||
35 | } |
||
36 | |||
37 | $this->_conn->executeUpdate('DELETE FROM master_slave_table'); |
||
38 | $this->_conn->insert('master_slave_table', array('test_int' => 1)); |
||
39 | } |
||
40 | |||
41 | public function createMasterSlaveConnection($keepSlave = false) |
||
42 | { |
||
43 | $params = $this->_conn->getParams(); |
||
44 | $params['master'] = $params; |
||
45 | $params['slaves'] = array($params, $params); |
||
46 | $params['keepSlave'] = $keepSlave; |
||
47 | $params['wrapperClass'] = 'Doctrine\DBAL\Connections\MasterSlaveConnection'; |
||
48 | |||
49 | return DriverManager::getConnection($params); |
||
50 | } |
||
51 | |||
52 | View Code Duplication | public function testMasterOnConnect() |
|
53 | { |
||
54 | $conn = $this->createMasterSlaveConnection(); |
||
55 | |||
56 | self::assertFalse($conn->isConnectedToMaster()); |
||
0 ignored issues
–
show
|
|||
57 | $conn->connect('slave'); |
||
58 | self::assertFalse($conn->isConnectedToMaster()); |
||
59 | $conn->connect('master'); |
||
60 | self::assertTrue($conn->isConnectedToMaster()); |
||
61 | } |
||
62 | |||
63 | public function testNoMasterOnExecuteQuery() |
||
64 | { |
||
65 | $conn = $this->createMasterSlaveConnection(); |
||
66 | |||
67 | $sql = "SELECT count(*) as num FROM master_slave_table"; |
||
68 | $data = $conn->fetchAll($sql); |
||
69 | $data[0] = array_change_key_case($data[0], CASE_LOWER); |
||
70 | |||
71 | self::assertEquals(1, $data[0]['num']); |
||
72 | self::assertFalse($conn->isConnectedToMaster()); |
||
73 | } |
||
74 | |||
75 | public function testMasterOnWriteOperation() |
||
76 | { |
||
77 | $conn = $this->createMasterSlaveConnection(); |
||
78 | $conn->insert('master_slave_table', array('test_int' => 30)); |
||
79 | |||
80 | self::assertTrue($conn->isConnectedToMaster()); |
||
81 | |||
82 | $sql = "SELECT count(*) as num FROM master_slave_table"; |
||
83 | $data = $conn->fetchAll($sql); |
||
84 | $data[0] = array_change_key_case($data[0], CASE_LOWER); |
||
85 | |||
86 | self::assertEquals(2, $data[0]['num']); |
||
87 | self::assertTrue($conn->isConnectedToMaster()); |
||
88 | } |
||
89 | |||
90 | /** |
||
91 | * @group DBAL-335 |
||
92 | */ |
||
93 | View Code Duplication | public function testKeepSlaveBeginTransactionStaysOnMaster() |
|
94 | { |
||
95 | $conn = $this->createMasterSlaveConnection($keepSlave = true); |
||
96 | $conn->connect('slave'); |
||
97 | |||
98 | $conn->beginTransaction(); |
||
99 | $conn->insert('master_slave_table', array('test_int' => 30)); |
||
100 | $conn->commit(); |
||
101 | |||
102 | self::assertTrue($conn->isConnectedToMaster()); |
||
103 | |||
104 | $conn->connect(); |
||
105 | self::assertTrue($conn->isConnectedToMaster()); |
||
106 | |||
107 | $conn->connect('slave'); |
||
108 | self::assertFalse($conn->isConnectedToMaster()); |
||
109 | } |
||
110 | |||
111 | /** |
||
112 | * @group DBAL-335 |
||
113 | */ |
||
114 | View Code Duplication | public function testKeepSlaveInsertStaysOnMaster() |
|
115 | { |
||
116 | $conn = $this->createMasterSlaveConnection($keepSlave = true); |
||
117 | $conn->connect('slave'); |
||
118 | |||
119 | $conn->insert('master_slave_table', array('test_int' => 30)); |
||
120 | |||
121 | self::assertTrue($conn->isConnectedToMaster()); |
||
122 | |||
123 | $conn->connect(); |
||
124 | self::assertTrue($conn->isConnectedToMaster()); |
||
125 | |||
126 | $conn->connect('slave'); |
||
127 | self::assertFalse($conn->isConnectedToMaster()); |
||
128 | } |
||
129 | |||
130 | View Code Duplication | public function testMasterSlaveConnectionCloseAndReconnect() |
|
131 | { |
||
132 | $conn = $this->createMasterSlaveConnection(); |
||
133 | $conn->connect('master'); |
||
134 | self::assertTrue($conn->isConnectedToMaster()); |
||
135 | |||
136 | $conn->close(); |
||
137 | self::assertFalse($conn->isConnectedToMaster()); |
||
138 | |||
139 | $conn->connect('master'); |
||
140 | self::assertTrue($conn->isConnectedToMaster()); |
||
141 | } |
||
142 | } |
||
143 |
This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.
This is most likely a typographical error or the method has been renamed.