PageRenderTime 52ms CodeModel.GetById 25ms RepoModel.GetById 1ms app.codeStats 0ms

/tests/Doctrine/Tests/DBAL/Functional/Driver/PDOPgSql/DriverTest.php

http://github.com/doctrine/dbal
PHP | 113 lines | 81 code | 21 blank | 11 comment | 3 complexity | 8e237d7986724dd55f12b1131c268a0c MD5 | raw file
Possible License(s): Unlicense
  1. <?php
  2. namespace Doctrine\Tests\DBAL\Functional\Driver\PDOPgSql;
  3. use Doctrine\DBAL\Connection;
  4. use Doctrine\DBAL\Driver as DriverInterface;
  5. use Doctrine\DBAL\Driver\PDOPgSql\Driver;
  6. use Doctrine\Tests\DBAL\Functional\Driver\AbstractDriverTest;
  7. use Doctrine\Tests\TestUtil;
  8. use function array_key_exists;
  9. use function extension_loaded;
  10. use function microtime;
  11. use function sprintf;
  12. class DriverTest extends AbstractDriverTest
  13. {
  14. protected function setUp() : void
  15. {
  16. if (! extension_loaded('pdo_pgsql')) {
  17. $this->markTestSkipped('pdo_pgsql is not installed.');
  18. }
  19. parent::setUp();
  20. if ($this->connection->getDriver() instanceof Driver) {
  21. return;
  22. }
  23. $this->markTestSkipped('pdo_pgsql only test.');
  24. }
  25. /**
  26. * @dataProvider getDatabaseParameter
  27. */
  28. public function testDatabaseParameters(?string $databaseName, ?string $defaultDatabaseName, ?string $expectedDatabaseName) : void
  29. {
  30. $params = $this->connection->getParams();
  31. $params['dbname'] = $databaseName;
  32. $params['default_dbname'] = $defaultDatabaseName;
  33. $connection = new Connection(
  34. $params,
  35. $this->connection->getDriver(),
  36. $this->connection->getConfiguration(),
  37. $this->connection->getEventManager()
  38. );
  39. self::assertSame(
  40. $expectedDatabaseName,
  41. $this->driver->getDatabase($connection)
  42. );
  43. }
  44. /**
  45. * @return mixed[][]
  46. */
  47. public static function getDatabaseParameter() : iterable
  48. {
  49. $params = TestUtil::getConnectionParams();
  50. $realDatabaseName = $params['dbname'] ?? '';
  51. $dummyDatabaseName = $realDatabaseName . 'a';
  52. return [
  53. // dbname, default_dbname, expected
  54. [$realDatabaseName, null, $realDatabaseName],
  55. [$realDatabaseName, $dummyDatabaseName, $realDatabaseName],
  56. [null, $realDatabaseName, $realDatabaseName],
  57. [null, null, static::getDatabaseNameForConnectionWithoutDatabaseNameParameter()],
  58. ];
  59. }
  60. /**
  61. * @group DBAL-1146
  62. */
  63. public function testConnectsWithApplicationNameParameter() : void
  64. {
  65. $parameters = $this->connection->getParams();
  66. $parameters['application_name'] = 'doctrine';
  67. $user = $parameters['user'] ?? null;
  68. $password = $parameters['password'] ?? null;
  69. $connection = $this->driver->connect($parameters, $user, $password);
  70. $hash = microtime(true); // required to identify the record in the results uniquely
  71. $sql = sprintf('SELECT * FROM pg_stat_activity WHERE %d = %d', $hash, $hash);
  72. $statement = $connection->query($sql);
  73. $records = $statement->fetchAll();
  74. foreach ($records as $record) {
  75. // The query column is named "current_query" on PostgreSQL < 9.2
  76. $queryColumnName = array_key_exists('current_query', $record) ? 'current_query' : 'query';
  77. if ($record[$queryColumnName] === $sql) {
  78. self::assertSame('doctrine', $record['application_name']);
  79. return;
  80. }
  81. }
  82. $this->fail(sprintf('Query result does not contain a record where column "query" equals "%s".', $sql));
  83. }
  84. protected function createDriver() : DriverInterface
  85. {
  86. return new Driver();
  87. }
  88. protected static function getDatabaseNameForConnectionWithoutDatabaseNameParameter() : ?string
  89. {
  90. return 'postgres';
  91. }
  92. }