diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml index ce3b57a5e8..545b5cfbd3 100644 --- a/.github/workflows/continuous-integration.yml +++ b/.github/workflows/continuous-integration.yml @@ -372,7 +372,7 @@ jobs: mysql-version: - "5.7" - "8.0" - - "9.0" + - "9.1" extension: - "mysqli" - "pdo_mysql" @@ -401,10 +401,10 @@ jobs: custom-entrypoint: >- --entrypoint sh mysql:8.4 -c "exec docker-entrypoint.sh mysqld --mysql-native-password=ON" - php-version: "8.4" - mysql-version: "9.0" + mysql-version: "9.1" extension: "mysqli" - php-version: "8.4" - mysql-version: "9.0" + mysql-version: "9.1" extension: "pdo_mysql" services: diff --git a/tests/ConnectionTest.php b/tests/ConnectionTest.php index 3d085ca931..f9702ba303 100644 --- a/tests/ConnectionTest.php +++ b/tests/ConnectionTest.php @@ -25,6 +25,7 @@ use PHPUnit\Framework\TestCase; use Psr\Cache\CacheItemInterface; use Psr\Cache\CacheItemPoolInterface; +use RuntimeException; /** @psalm-import-type Params from DriverManager */ #[RequiresPhpExtension('pdo_mysql')] @@ -172,6 +173,36 @@ public function testCommitStartsTransactionInNoAutoCommitMode(): void self::assertTrue($conn->isTransactionActive()); } + public function testBeginTransactionFailureAfterCommitInNoAutoCommitMode(): void + { + $driverConnectionMock = $this->createMock(DriverConnection::class); + $driverConnectionMock->expects(self::exactly(2)) + ->method('beginTransaction') + ->willReturnOnConsecutiveCalls( + true, + self::throwException(new RuntimeException()), + ); + + $driver = self::createStub(Driver::class); + $driver + ->method('connect') + ->willReturn( + $driverConnectionMock, + ); + $conn = new Connection([], $driver); + + $conn->setAutoCommit(false); + + /** Invoke protected {@see Connection::connect()} */ + $conn->getServerVersion(); + try { + $conn->commit(); + } catch (RuntimeException) { + } + + self::assertTrue($conn->isTransactionActive()); + } + /** @return bool[][] */ public static function resultProvider(): array {