Completed
Push — master ( c7757e...39cb21 )
by Luís
16s
created

DBAL/Functional/MasterSlaveConnectionTest.php (1 issue)

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
The method isConnectedToMaster() does not exist on Doctrine\DBAL\Connection. Did you maybe mean isConnected()? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

56
        self::assertFalse($conn->/** @scrutinizer ignore-call */ isConnectedToMaster());

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.

Loading history...
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