Added tests for DB connections DSN.
This commit is contained in:
parent
c9087df799
commit
5a76868e0b
3 changed files with 77 additions and 21 deletions
|
|
@ -7,10 +7,41 @@ class Database extends \PDO
|
|||
const MYSQL_TYPE = 'mysql';
|
||||
const POSTGRESQL_TYPE = 'pgsql';
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected $type = 'read';
|
||||
|
||||
/**
|
||||
* @var boolean
|
||||
*/
|
||||
protected static $initialised = false;
|
||||
protected static $servers = ['read' => [], 'write' => []];
|
||||
protected static $connections = ['read' => null, 'write' => null];
|
||||
protected static $details = [];
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
protected static $servers = [
|
||||
'read' => [],
|
||||
'write' => []
|
||||
];
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
protected static $connections = [
|
||||
'read' => null,
|
||||
'write' => null
|
||||
];
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
protected static $dsn = [
|
||||
'read' => '',
|
||||
'write' => ''
|
||||
];
|
||||
|
||||
protected static $details = [];
|
||||
|
||||
/**
|
||||
* @param string $table
|
||||
|
|
@ -34,10 +65,10 @@ class Database extends \PDO
|
|||
self::$servers['read'] = $settings['servers']['read'];
|
||||
self::$servers['write'] = $settings['servers']['write'];
|
||||
|
||||
self::$details['type'] = $settings['type'];
|
||||
self::$details['db'] = $settings['name'];
|
||||
self::$details['user'] = $settings['username'];
|
||||
self::$details['pass'] = $settings['password'];
|
||||
self::$details['driver'] = $settings['type'];
|
||||
self::$details['db'] = $settings['name'];
|
||||
self::$details['user'] = $settings['username'];
|
||||
self::$details['pass'] = $settings['password'];
|
||||
|
||||
self::$initialised = true;
|
||||
}
|
||||
|
|
@ -67,29 +98,30 @@ class Database extends \PDO
|
|||
// Pull the next server:
|
||||
$server = array_shift($servers);
|
||||
|
||||
$dns = self::$details['type'] . ':host=' . $server['host'];
|
||||
self::$dsn[$type] = self::$details['driver'] . ':host=' . $server['host'];
|
||||
if (isset($server['port'])) {
|
||||
$dns .= ';port=' . (integer)$server['port'];
|
||||
self::$dsn[$type] .= ';port=' . (integer)$server['port'];
|
||||
}
|
||||
$dns .= ';dbname=' . self::$details['db'];
|
||||
self::$dsn[$type] .= ';dbname=' . self::$details['db'];
|
||||
|
||||
$pdoOptions = [
|
||||
\PDO::ATTR_PERSISTENT => false,
|
||||
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
|
||||
\PDO::ATTR_TIMEOUT => 2,
|
||||
\PDO::ATTR_PERSISTENT => false,
|
||||
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
|
||||
\PDO::ATTR_TIMEOUT => 2,
|
||||
];
|
||||
if (self::MYSQL_TYPE === self::$details['type']) {
|
||||
if (self::MYSQL_TYPE === self::$details['driver']) {
|
||||
$pdoOptions[\PDO::MYSQL_ATTR_INIT_COMMAND] = "SET NAMES 'UTF8'";
|
||||
}
|
||||
|
||||
// Try to connect:
|
||||
try {
|
||||
$connection = new self(
|
||||
$dns,
|
||||
self::$dsn[$type],
|
||||
self::$details['user'],
|
||||
self::$details['pass'],
|
||||
$pdoOptions
|
||||
);
|
||||
$connection->setType($type);
|
||||
} catch (\PDOException $ex) {
|
||||
$connection = false;
|
||||
}
|
||||
|
|
@ -119,6 +151,22 @@ class Database extends \PDO
|
|||
return self::$details;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getDsn()
|
||||
{
|
||||
return self::$dsn[$this->type];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $type
|
||||
*/
|
||||
public function setType($type)
|
||||
{
|
||||
$this->type = $type;
|
||||
}
|
||||
|
||||
public static function reset()
|
||||
{
|
||||
self::$connections = ['read' => null, 'write' => null];
|
||||
|
|
@ -133,9 +181,9 @@ class Database extends \PDO
|
|||
protected function quoteNames($statement)
|
||||
{
|
||||
$quote = '';
|
||||
if (self::MYSQL_TYPE === self::$details['type']) {
|
||||
if (self::MYSQL_TYPE === self::$details['driver']) {
|
||||
$quote = '`';
|
||||
} elseif (self::POSTGRESQL_TYPE === self::$details['type']) {
|
||||
} elseif (self::POSTGRESQL_TYPE === self::$details['driver']) {
|
||||
$quote = '"';
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -58,19 +58,21 @@ class DatabaseMysqlTest extends TestCase
|
|||
self::assertInstanceOf('\b8\Database', $writeConnection);
|
||||
self::assertInstanceOf('\b8\Database', $readConnection);
|
||||
|
||||
$writeDetails = Database::getConnection('write')->getDetails();
|
||||
$writeDetails = $writeConnection->getDetails();
|
||||
|
||||
self::assertTrue(is_array($writeDetails));
|
||||
self::assertEquals(MYSQL_DBNAME, $writeDetails['db']);
|
||||
self::assertEquals(MYSQL_USER, $writeDetails['user']);
|
||||
self::assertEquals(MYSQL_PASSWORD, $writeDetails['pass']);
|
||||
|
||||
$readDetails = Database::getConnection('read')->getDetails();
|
||||
$readDetails = $readConnection->getDetails();
|
||||
|
||||
self::assertTrue(is_array($readDetails));
|
||||
self::assertEquals(MYSQL_DBNAME, $readDetails['db']);
|
||||
self::assertEquals(MYSQL_USER, $readDetails['user']);
|
||||
self::assertEquals(MYSQL_PASSWORD, $readDetails['pass']);
|
||||
|
||||
self::assertEquals('mysql:host=localhost;dbname=b8_test', $readConnection->getDsn());
|
||||
}
|
||||
|
||||
public function testGetWriteConnectionWithPort()
|
||||
|
|
@ -108,6 +110,8 @@ class DatabaseMysqlTest extends TestCase
|
|||
|
||||
self::assertInstanceOf('\b8\Database', $writeConnection);
|
||||
self::assertInstanceOf('\b8\Database', $readConnection);
|
||||
|
||||
self::assertEquals('mysql:host=localhost;port=3306;dbname=b8_test', $readConnection->getDsn());
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -58,19 +58,21 @@ class DatabasePostgresqlTest extends TestCase
|
|||
self::assertInstanceOf('\b8\Database', $writeConnection);
|
||||
self::assertInstanceOf('\b8\Database', $readConnection);
|
||||
|
||||
$writeDetails = Database::getConnection('write')->getDetails();
|
||||
$writeDetails = $writeConnection->getDetails();
|
||||
|
||||
self::assertTrue(is_array($writeDetails));
|
||||
self::assertEquals(POSTGRESQL_DBNAME, $writeDetails['db']);
|
||||
self::assertEquals(POSTGRESQL_USER, $writeDetails['user']);
|
||||
self::assertEquals(POSTGRESQL_PASSWORD, $writeDetails['pass']);
|
||||
|
||||
$readDetails = Database::getConnection('read')->getDetails();
|
||||
$readDetails = $readConnection->getDetails();
|
||||
|
||||
self::assertTrue(is_array($readDetails));
|
||||
self::assertEquals(POSTGRESQL_DBNAME, $readDetails['db']);
|
||||
self::assertEquals(POSTGRESQL_USER, $readDetails['user']);
|
||||
self::assertEquals(POSTGRESQL_PASSWORD, $readDetails['pass']);
|
||||
|
||||
self::assertEquals('pgsql:host=localhost;dbname=b8_test', $readConnection->getDsn());
|
||||
}
|
||||
|
||||
public function testGetWriteConnectionWithPort()
|
||||
|
|
@ -108,6 +110,8 @@ class DatabasePostgresqlTest extends TestCase
|
|||
|
||||
self::assertInstanceOf('\b8\Database', $writeConnection);
|
||||
self::assertInstanceOf('\b8\Database', $readConnection);
|
||||
|
||||
self::assertEquals('pgsql:host=localhost;port=5432;dbname=b8_test', $readConnection->getDsn());
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue