From 65ca7ae9461aeb98308f0e05410edeb2bbfba5ad Mon Sep 17 00:00:00 2001 From: greeflas Date: Sat, 8 Aug 2020 00:39:56 +0300 Subject: [PATCH 1/4] Remove slash from const name --- docs/en/reference/transactions.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/reference/transactions.rst b/docs/en/reference/transactions.rst index 58ac4a0cb5d..602a403b688 100644 --- a/docs/en/reference/transactions.rst +++ b/docs/en/reference/transactions.rst @@ -50,7 +50,7 @@ constants: The default transaction isolation level of a ``Doctrine\DBAL\Connection`` is chosen by the underlying platform -but it is always at least READ\_COMMITTED. +but it is always at least ``READ_COMMITTED``. Transaction Nesting ------------------- From 76564ab8cbc0820b63927cb606fefaf7309a1dc6 Mon Sep 17 00:00:00 2001 From: Sergei Morozov Date: Sun, 16 Aug 2020 21:18:53 -0700 Subject: [PATCH 2/4] Add the possibility to specify SSL-related parameters in test configuration --- tests/Doctrine/Tests/TestUtil.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tests/Doctrine/Tests/TestUtil.php b/tests/Doctrine/Tests/TestUtil.php index 54b793129f0..28c3d5a7149 100644 --- a/tests/Doctrine/Tests/TestUtil.php +++ b/tests/Doctrine/Tests/TestUtil.php @@ -175,6 +175,11 @@ private static function mapConnectionParameters(array $configuration, string $pr 'dbname', 'port', 'server', + 'ssl_key', + 'ssl_cert', + 'ssl_ca', + 'ssl_capath', + 'ssl_cipher', 'unix_socket', ] as $parameter ) { From c88c92670079dc88eefebc7b69d498a71618a5f4 Mon Sep 17 00:00:00 2001 From: Sergei Morozov Date: Sun, 16 Aug 2020 20:20:07 -0700 Subject: [PATCH 3/4] Add the possibility to specify driver options in test configuration --- .../DBAL/Functional/Driver/AbstractDriverTest.php | 7 ++++--- .../DBAL/Functional/Driver/Mysqli/ConnectionTest.php | 6 ++++++ .../DBAL/Functional/Driver/PDOSqlsrv/DriverTest.php | 6 ++++++ .../Schema/SchemaManagerFunctionalTestCase.php | 7 ++++--- .../Functional/Schema/SqliteSchemaManagerTest.php | 7 ++++--- tests/Doctrine/Tests/TestUtil.php | 11 +++++++++++ 6 files changed, 35 insertions(+), 9 deletions(-) diff --git a/tests/Doctrine/Tests/DBAL/Functional/Driver/AbstractDriverTest.php b/tests/Doctrine/Tests/DBAL/Functional/Driver/AbstractDriverTest.php index 27a910e42fe..e26b8db28e8 100644 --- a/tests/Doctrine/Tests/DBAL/Functional/Driver/AbstractDriverTest.php +++ b/tests/Doctrine/Tests/DBAL/Functional/Driver/AbstractDriverTest.php @@ -28,10 +28,11 @@ public function testConnectsWithoutDatabaseNameParameter(): void $params = $this->connection->getParams(); unset($params['dbname']); - $user = $params['user'] ?? null; - $password = $params['password'] ?? null; + $user = $params['user'] ?? null; + $password = $params['password'] ?? null; + $driverOptions = $params['driverOptions'] ?? []; - $connection = $this->driver->connect($params, $user, $password); + $connection = $this->driver->connect($params, $user, $password, $driverOptions); self::assertInstanceOf(DriverConnection::class, $connection); } diff --git a/tests/Doctrine/Tests/DBAL/Functional/Driver/Mysqli/ConnectionTest.php b/tests/Doctrine/Tests/DBAL/Functional/Driver/Mysqli/ConnectionTest.php index 20c6064bed1..08bf20a742d 100644 --- a/tests/Doctrine/Tests/DBAL/Functional/Driver/Mysqli/ConnectionTest.php +++ b/tests/Doctrine/Tests/DBAL/Functional/Driver/Mysqli/ConnectionTest.php @@ -8,6 +8,8 @@ use Doctrine\Tests\DbalFunctionalTestCase; use Doctrine\Tests\TestUtil; +use function array_merge; + use const MYSQLI_OPT_CONNECT_TIMEOUT; /** @@ -54,6 +56,10 @@ private function getConnection(array $driverOptions): MysqliConnection { $params = TestUtil::getConnectionParams(); + if (isset($params['driverOptions'])) { + $driverOptions = array_merge($params['driverOptions'], $driverOptions); + } + return new MysqliConnection( $params, $params['user'] ?? '', diff --git a/tests/Doctrine/Tests/DBAL/Functional/Driver/PDOSqlsrv/DriverTest.php b/tests/Doctrine/Tests/DBAL/Functional/Driver/PDOSqlsrv/DriverTest.php index c8e9c383e66..34ac0cad394 100644 --- a/tests/Doctrine/Tests/DBAL/Functional/Driver/PDOSqlsrv/DriverTest.php +++ b/tests/Doctrine/Tests/DBAL/Functional/Driver/PDOSqlsrv/DriverTest.php @@ -9,6 +9,8 @@ use Doctrine\Tests\TestUtil; use PDO; +use function array_merge; + /** * @requires extension pdo_sqlsrv */ @@ -42,6 +44,10 @@ private function getConnection(array $driverOptions): PDOConnection { $params = TestUtil::getConnectionParams(); + if (isset($params['driverOptions'])) { + $driverOptions = array_merge($params['driverOptions'], $driverOptions); + } + return $this->connection->getDriver()->connect( $params, $params['user'] ?? '', diff --git a/tests/Doctrine/Tests/DBAL/Functional/Schema/SchemaManagerFunctionalTestCase.php b/tests/Doctrine/Tests/DBAL/Functional/Schema/SchemaManagerFunctionalTestCase.php index fb02af72708..c8ac1200342 100644 --- a/tests/Doctrine/Tests/DBAL/Functional/Schema/SchemaManagerFunctionalTestCase.php +++ b/tests/Doctrine/Tests/DBAL/Functional/Schema/SchemaManagerFunctionalTestCase.php @@ -114,10 +114,11 @@ public function testDropsDatabaseWithActiveConnections(): void $params['dbname'] = 'test_drop_database'; } - $user = $params['user'] ?? null; - $password = $params['password'] ?? null; + $user = $params['user'] ?? null; + $password = $params['password'] ?? null; + $driverOptions = $params['driverOptions'] ?? []; - $connection = $this->connection->getDriver()->connect($params, $user, $password); + $connection = $this->connection->getDriver()->connect($params, $user, $password, $driverOptions); self::assertInstanceOf(Connection::class, $connection); diff --git a/tests/Doctrine/Tests/DBAL/Functional/Schema/SqliteSchemaManagerTest.php b/tests/Doctrine/Tests/DBAL/Functional/Schema/SqliteSchemaManagerTest.php index 9e5b57387f1..6764b1ed173 100644 --- a/tests/Doctrine/Tests/DBAL/Functional/Schema/SqliteSchemaManagerTest.php +++ b/tests/Doctrine/Tests/DBAL/Functional/Schema/SqliteSchemaManagerTest.php @@ -43,10 +43,11 @@ public function testDropsDatabaseWithActiveConnections(): void $params = $this->connection->getParams(); $params['dbname'] = 'test_drop_database'; - $user = $params['user'] ?? null; - $password = $params['password'] ?? null; + $user = $params['user'] ?? null; + $password = $params['password'] ?? null; + $driverOptions = $params['driverOptions'] ?? []; - $connection = $this->connection->getDriver()->connect($params, $user, $password); + $connection = $this->connection->getDriver()->connect($params, $user, $password, $driverOptions); self::assertInstanceOf(Connection::class, $connection); diff --git a/tests/Doctrine/Tests/TestUtil.php b/tests/Doctrine/Tests/TestUtil.php index 28c3d5a7149..bab3dc9be05 100644 --- a/tests/Doctrine/Tests/TestUtil.php +++ b/tests/Doctrine/Tests/TestUtil.php @@ -8,6 +8,9 @@ use function explode; use function extension_loaded; +use function strlen; +use function strpos; +use function substr; use function unlink; /** @@ -190,6 +193,14 @@ private static function mapConnectionParameters(array $configuration, string $pr $parameters[$parameter] = $configuration[$prefix . $parameter]; } + foreach ($configuration as $param => $value) { + if (strpos($param, $prefix . 'driver_option_') !== 0) { + continue; + } + + $parameters['driverOptions'][substr($param, strlen($prefix . 'driver_option_'))] = $value; + } + return $parameters; } From 9093b7b8cd5bbd43695e75c1a5500c53e63b13a5 Mon Sep 17 00:00:00 2001 From: Sergei Morozov Date: Sun, 16 Aug 2020 20:20:32 -0700 Subject: [PATCH 4/4] Test MySQLi connection via TLS on Travis --- .travis.yml | 3 ++ tests/travis/docker-run-mysql-or-mariadb.sh | 8 ++++ tests/travis/mysqli-tls.docker.travis.xml | 44 +++++++++++++++++++++ 3 files changed, 55 insertions(+) create mode 100644 tests/travis/mysqli-tls.docker.travis.xml diff --git a/.travis.yml b/.travis.yml index 341e475d264..72f3f85c973 100644 --- a/.travis.yml +++ b/.travis.yml @@ -185,6 +185,9 @@ jobs: - stage: Test php: 7.4 env: DB=mysqli.docker IMAGE=mysql:8.0 + - stage: Test + php: 7.4 + env: DB=mysqli-tls.docker IMAGE=mysql:8.0 TLS=yes - stage: Test php: 7.4 env: DB=mariadb.docker IMAGE=mariadb:10.3 diff --git a/tests/travis/docker-run-mysql-or-mariadb.sh b/tests/travis/docker-run-mysql-or-mariadb.sh index a78ce4adb6e..de0e53b9fcf 100644 --- a/tests/travis/docker-run-mysql-or-mariadb.sh +++ b/tests/travis/docker-run-mysql-or-mariadb.sh @@ -40,3 +40,11 @@ while true; do ;; esac done + +if [[ "$TLS" == "yes" ]] +then + for file in "ca.pem" "client-cert.pem" "client-key.pem" + do + docker cp "rdbms:/var/lib/mysql/$file" . + done +fi diff --git a/tests/travis/mysqli-tls.docker.travis.xml b/tests/travis/mysqli-tls.docker.travis.xml new file mode 100644 index 00000000000..95d6444522c --- /dev/null +++ b/tests/travis/mysqli-tls.docker.travis.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + ../Doctrine/Tests/DBAL + + + + + + ../../lib/Doctrine + + + + + + performance + locking_functional + + +