/
githubmirror
/
symfony
Обзор
Документация
Войти
/
githubmirror
/
symfony
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
8.2
src/Symfony/Component/Cache/Tests/Adapter/PdoAdapterTest.php
137 строк
4 KB
Dariusz Ruminski
PHP CS Fixer: enable static_lambda
19 дек 2025, 11:33
19 дек 2025, 11:33
3274fbc
Код
Авторство
О чём код?
<?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Cache\Tests\Adapter; use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\Attributes\Group; use PHPUnit\Framework\Attributes\RequiresPhpExtension; use Psr\Cache\CacheItemPoolInterface; use Symfony\Component\Cache\Adapter\AbstractAdapter; use Symfony\Component\Cache\Adapter\PdoAdapter; #[RequiresPhpExtension('pdo_sqlite')] #[Group('time-sensitive')] class PdoAdapterTest extends AdapterTestCase { protected static string $dbFile; public static function setUpBeforeClass(): void { self::$dbFile = tempnam(sys_get_temp_dir(), 'sf_sqlite_cache'); $pool = new PdoAdapter('sqlite:'.self::$dbFile); $pool->createTable(); } public static function tearDownAfterClass(): void { @unlink(self::$dbFile); } public function createCachePool(int $defaultLifetime = 0): CacheItemPoolInterface { return new PdoAdapter('sqlite:'.self::$dbFile, 'ns', $defaultLifetime); } public function testCreateConnectionReturnsStringWithLazyTrue() { self::assertSame('sqlite:'.self::$dbFile, AbstractAdapter::createConnection('sqlite:'.self::$dbFile)); } public function testCreateConnectionReturnsPDOWithLazyFalse() { self::assertInstanceOf(\PDO::class, AbstractAdapter::createConnection('sqlite:'.self::$dbFile, ['lazy' => false])); } public function testCleanupExpiredItems() { $pdo = new \PDO('sqlite:'.self::$dbFile); $getCacheItemCount = static fn () => (int) $pdo->query('SELECT COUNT(*) FROM cache_items')->fetch(\PDO::FETCH_COLUMN); $this->assertSame(0, $getCacheItemCount()); $cache = $this->createCachePool(); $item = $cache->getItem('some_nice_key'); $item->expiresAfter(1); $item->set(1); $cache->save($item); $this->assertSame(1, $getCacheItemCount()); sleep(2); $newItem = $cache->getItem($item->getKey()); $this->assertFalse($newItem->isHit()); $this->assertSame(0, $getCacheItemCount(), 'PDOAdapter must clean up expired items'); } #[DataProvider('provideDsnSQLite')] public function testDsnWithSQLite(string $dsn, ?string $file = null) { try { $pool = new PdoAdapter($dsn); $item = $pool->getItem('key'); $item->set('value'); $this->assertTrue($pool->save($item)); } finally { if (null !== $file) { @unlink($file); } } } public static function provideDsnSQLite() { $dbFile = tempnam(sys_get_temp_dir(), 'sf_sqlite_cache'); yield 'SQLite file' => ['sqlite:'.$dbFile.'2', $dbFile.'2']; yield 'SQLite in memory' => ['sqlite::memory:']; } #[RequiresPhpExtension('pdo_pgsql')] #[Group('integration')] public function testDsnWithPostgreSQL() { if (!$host = getenv('POSTGRES_HOST')) { $this->markTestSkipped('Missing POSTGRES_HOST env variable'); } $dsn = 'pgsql:host='.$host.';user=postgres;password=password'; try { $pool = new PdoAdapter($dsn); $item = $pool->getItem('key'); $item->set('value'); $this->assertTrue($pool->save($item)); } finally { $pdo = new \PDO($dsn); $pdo->exec('DROP TABLE IF EXISTS cache_items'); } } protected function isPruned(PdoAdapter $cache, string $name): bool { $o = new \ReflectionObject($cache); $getPdoConn = $o->getMethod('getConnection'); /** @var \PDOStatement $select */ $select = $getPdoConn->invoke($cache)->prepare('SELECT 1 FROM cache_items WHERE item_id LIKE :id'); $select->bindValue(':id', \sprintf('%%%s', $name)); $select->execute(); return 1 !== (int) $select->fetch(\PDO::FETCH_COLUMN); } }