From 5cac55bf2e628014aa474aaf29d2c24d8ede1340 Mon Sep 17 00:00:00 2001 From: Damiano Improta Date: Fri, 29 May 2026 17:46:21 +0200 Subject: [PATCH 1/4] fix test method --- tests/AbstractCache.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/AbstractCache.php b/tests/AbstractCache.php index 8390fbf..e76c5a9 100644 --- a/tests/AbstractCache.php +++ b/tests/AbstractCache.php @@ -178,14 +178,14 @@ public function testEmptyDecrement(): void public function testRemainingTTL(): void { - $key = 'test_clear'; + $key = 'test_remaining_ttl'; $x = 1; $res = $this->cache->set($key, $x); $this->assertTrue($res); sleep(2); $ttl = $this->cache->getRemainingTTL($key); $this->assertNotNull($ttl); - $this->assertLessThanOrEqual(60, $ttl); + $this->assertLessThan(60, $ttl); } public function testIsConnected(): void From 72ef7d39e372156f832fc9b4348675c4dc38ca52 Mon Sep 17 00:00:00 2001 From: Damiano Improta Date: Sun, 31 May 2026 22:41:49 +0200 Subject: [PATCH 2/4] Added test methods to cover additional paths and various fixes --- Dockerfile | 4 +- commands | 2 +- docker-compose.yml | 14 ++- entrypoint.sh | 2 +- src/Exception/CacheConnectionException.php | 15 +++ .../CacheMissingConfigurationException.php | 3 +- src/Service/ApcuCache.php | 11 +- src/Service/CacheManagerImpl.php | 10 +- src/Service/MemcacheCache.php | 32 ++--- src/Service/PRedisCache.php | 43 ++++--- src/Service/RedisCache.php | 4 +- tests/AbstractCache.php | 34 +++-- tests/AbstractCacheManager.php | 118 +++++++++++++++++- tests/ApcuCacheTest.php | 77 ++++++++---- tests/CacheManagerDryRunTest.php | 83 ++++++++++++ tests/CacheManagerMultiLevelTest.php | 78 ++++++++++-- tests/CacheManagerOneLevelTest.php | 77 ++++++++++-- tests/MemcacheCacheTest.php | 93 +++++++++++--- tests/PRedisCacheTest.php | 69 +++++++--- tests/RedisCacheTest.php | 69 +++++++--- 20 files changed, 684 insertions(+), 154 deletions(-) create mode 100644 src/Exception/CacheConnectionException.php diff --git a/Dockerfile b/Dockerfile index 01d12b4..5da5115 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,12 +11,12 @@ RUN apk add --no-cache \ autoconf \ libc-dev \ && pecl install apcu redis memcache \ + && rm -rf /tmp/pear \ && docker-php-ext-enable apcu redis memcache \ && apk del .build-deps COPY --from=composer:2.8 /usr/bin/composer /usr/bin/composer -RUN echo "apc.enable_cli=1" >> /usr/local/etc/php/php.ini -RUN echo "apc.enable=1" >> /usr/local/etc/php/php.ini +RUN printf "apc.enable_cli=1\napc.enable=1\n" >> /usr/local/etc/php/php.ini WORKDIR /app COPY ./src ./src diff --git a/commands b/commands index 06cf703..ae45a64 100644 --- a/commands +++ b/commands @@ -30,7 +30,7 @@ case "$1" in docker compose down ;; *) - echo "comands allowed" + echo "commands allowed" echo " - test-sw" echo " - update-vendor" echo " - php-cs-fixer" diff --git a/docker-compose.yml b/docker-compose.yml index d4f4728..b4fbe72 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -17,15 +17,25 @@ services: - cache-multi-layer-network depends_on: redis-server: - condition: service_started + condition: service_healthy memcache-server: - condition: service_started + condition: service_healthy redis-server: image: redis + healthcheck: + test: ["CMD", "redis-cli", "ping"] + interval: 5s + timeout: 3s + retries: 5 networks: - cache-multi-layer-network memcache-server: image: memcached + healthcheck: + test: ["CMD-SHELL", "bash -c 'exec 3<>/dev/tcp/localhost/11211'"] + interval: 5s + timeout: 3s + retries: 5 networks: - cache-multi-layer-network networks: diff --git a/entrypoint.sh b/entrypoint.sh index db3da10..ae826df 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -21,7 +21,7 @@ case "$1" in exec sh ;; *) - echo "comands allowed" + echo "commands allowed" echo " - test-sw" echo " - update-vendor" echo " - php-cs-fix" diff --git a/src/Exception/CacheConnectionException.php b/src/Exception/CacheConnectionException.php new file mode 100644 index 0000000..35dced9 --- /dev/null +++ b/src/Exception/CacheConnectionException.php @@ -0,0 +1,15 @@ + aka Drizella + */ +class CacheConnectionException extends Exception +{ + +} diff --git a/src/Exception/CacheMissingConfigurationException.php b/src/Exception/CacheMissingConfigurationException.php index 7c5de4b..8e083dc 100644 --- a/src/Exception/CacheMissingConfigurationException.php +++ b/src/Exception/CacheMissingConfigurationException.php @@ -9,6 +9,7 @@ * * @author Damiano Improta */ -class CacheMissingConfigurationException extends \Exception +class CacheMissingConfigurationException extends Exception { + } diff --git a/src/Service/ApcuCache.php b/src/Service/ApcuCache.php index 85fe71e..0414a95 100644 --- a/src/Service/ApcuCache.php +++ b/src/Service/ApcuCache.php @@ -14,6 +14,7 @@ */ class ApcuCache extends Cache { + #[\Override] public function get(string $key): int|float|string|Cacheable|array|null { @@ -63,8 +64,14 @@ public function increment(string $key, ?int $ttl = null): int|false public function getRemainingTTL(string $key): ?int { $keyInfo = apcu_key_info($this->getEffectiveKey($key)); - - return null !== $keyInfo ? $keyInfo['ttl'] : null; + if( null === $keyInfo){ + return null; + } + $result = $keyInfo['creation_time'] + $keyInfo['ttl'] - time(); + if($result < 0) { + return null; + } + return $result; } #[\Override] diff --git a/src/Service/CacheManagerImpl.php b/src/Service/CacheManagerImpl.php index 45c1c76..6e4c786 100644 --- a/src/Service/CacheManagerImpl.php +++ b/src/Service/CacheManagerImpl.php @@ -11,12 +11,13 @@ */ class CacheManagerImpl extends CacheManager { + private array $caches = []; #[\Override] public function appendCache(Cache $cache): bool { - if (!empty(array_filter($this->caches, fn (Cache $current): bool => $cache->getEnum() === $current->getEnum()))) { + if (!empty(array_filter($this->caches, fn(Cache $current): bool => $cache->getEnum() === $current->getEnum()))) { return false; } @@ -37,7 +38,7 @@ public function set(string $key, int|float|string|Cacheable|array $val, ?int $tt $res[$i] = $this->caches[$i]->set($key, $val, $ttl); } - return array_reduce($res, fn (bool $carry, bool $item) => $carry && $item, true); + return array_reduce($res, fn(bool $carry, bool $item) => $carry && $item, true); } #[\Override] @@ -53,8 +54,11 @@ public function get(string $key): int|float|string|Cacheable|array|null return null; } $ttlRemaining = $this->caches[$i - 1]->getRemainingTTL($key); + if ($ttlRemaining <= 0) { + $ttlRemaining = null; + } for ($j = $i - 2; $j >= 0; --$j) { - $ttl = min($this->caches[$j]->getTtl(), $ttlRemaining); + $ttl = null !== $ttlRemaining ? min($this->caches[$j]->getTtl(), $ttlRemaining) : null; $this->caches[$j]->set($key, $data, $ttl); } diff --git a/src/Service/MemcacheCache.php b/src/Service/MemcacheCache.php index 5b0608a..6bdf19c 100644 --- a/src/Service/MemcacheCache.php +++ b/src/Service/MemcacheCache.php @@ -3,8 +3,9 @@ namespace CacheMultiLayer\Service; use CacheMultiLayer\Enum\CacheEnum; +use CacheMultiLayer\Exception\CacheConnectionException; use CacheMultiLayer\Interface\Cacheable; -use Memcache; +use Override; /** * MEMCACHE cache implementation. @@ -13,25 +14,26 @@ */ class MemcacheCache extends Cache { - #[\Override] + + #[Override] protected function getMandatoryConfig(): array { return $this->mandatoryKeys; } - #[\Override] + #[Override] public function clear(string $key): bool { return $this->memcache->delete($this->getEffectiveKey($key)); } - #[\Override] + #[Override] public function clearAllCache(): bool { return $this->memcache->flush(); } - #[\Override] + #[Override] public function decrement(string $key, ?int $ttl = null): int|false { $pair = $this->memcache->get($this->getEffectiveKey($key)); @@ -53,7 +55,7 @@ public function decrement(string $key, ?int $ttl = null): int|false return $value; } - #[\Override] + #[Override] public function get(string $key): int|float|string|Cacheable|array|null { $val = $this->memcache->get($this->getEffectiveKey($key)); @@ -66,24 +68,24 @@ public function get(string $key): int|float|string|Cacheable|array|null return is_array($valDecoded) ? $this->unserializeVal($valDecoded) : $valDecoded; } - #[\Override] + #[Override] public function getEnum(): CacheEnum { return CacheEnum::MEMCACHE; } - #[\Override] + #[Override] public function getRemainingTTL(string $key): ?int { $val = $this->memcache->get($this->getEffectiveKey($key)); if (empty($val)) { return null; } - - return $val['expires_at'] - time(); + $res = $val['expires_at'] - time(); + return $res >= 0 ? $res : null; } - #[\Override] + #[Override] public function increment(string $key, ?int $ttl = null): int|false { $pair = $this->memcache->get($this->getEffectiveKey($key)); @@ -105,13 +107,13 @@ public function increment(string $key, ?int $ttl = null): int|false return $value; } - #[\Override] + #[Override] public function isConnected(): bool { return false !== $this->memcache->getStats(); } - #[\Override] + #[Override] public function set(string $key, int|float|string|Cacheable|array $val, ?int $ttl = null): bool { $values = is_array($val) ? $this->serializeValArray($val) : $this->serializeVal($val); @@ -123,7 +125,7 @@ public function set(string $key, int|float|string|Cacheable|array $val, ?int $tt return $this->memcache->set($this->getEffectiveKey($key), $dataToStore, $this->compress ? MEMCACHE_COMPRESSED : 0, $ttlToUse); } - #[\Override] + #[Override] protected function checkInstanceIsCorrect(object $instance): bool { return $instance instanceof \Memcache; @@ -144,7 +146,7 @@ protected function __construct(int $ttl, array $configuration = []) } if (!$resultConnection) { - throw new \Exception('Connection not found'); + throw new CacheConnectionException('Connection not found'); } } diff --git a/src/Service/PRedisCache.php b/src/Service/PRedisCache.php index 27093ff..20beff0 100644 --- a/src/Service/PRedisCache.php +++ b/src/Service/PRedisCache.php @@ -4,7 +4,9 @@ use CacheMultiLayer\Enum\CacheEnum; use CacheMultiLayer\Interface\Cacheable; +use Override; use Predis\Client as PredisClient; +use Predis\Response\ServerException; /** * PREDIS cache implementation. @@ -13,10 +15,16 @@ */ class PRedisCache extends Cache { - #[\Override] + + #[Override] public function decrement(string $key, ?int $ttl = null): int|false { - $value = $this->predisClient->decr($this->getEffectiveKey($key)); + try{ + $value = $this->predisClient->decr($this->getEffectiveKey($key)); + } catch (ServerException) { + //value has not numeric value + return false; + } if (empty($this->getRemainingTTL($key))) { $this->predisClient->expire($this->getEffectiveKey($key), $this->getTtlToUse($ttl)); } @@ -24,7 +32,7 @@ public function decrement(string $key, ?int $ttl = null): int|false return $value; } - #[\Override] + #[Override] public function get(string $key): int|float|string|Cacheable|array|null { $val = $this->predisClient->get($this->getEffectiveKey($key)); @@ -37,7 +45,7 @@ public function get(string $key): int|float|string|Cacheable|array|null return is_array($valDecoded) ? $this->unserializeVal($valDecoded) : $valDecoded; } - #[\Override] + #[Override] public function set(string $key, int|float|string|Cacheable|array $val, ?int $ttl = null): bool { $data = is_array($val) ? $this->serializeValArray($val) : $this->serializeVal($val); @@ -45,10 +53,15 @@ public function set(string $key, int|float|string|Cacheable|array $val, ?int $tt return null !== $this->predisClient->setex($this->getEffectiveKey($key), $this->getTtlToUse($ttl), json_encode($data)); } - #[\Override] + #[Override] public function increment(string $key, ?int $ttl = null): int|false { - $value = $this->predisClient->incr($this->getEffectiveKey($key)); + try{ + $value = $this->predisClient->incr($this->getEffectiveKey($key)); + } catch (ServerException) { + //value has not numeric value + return false; + } if (empty($this->getRemainingTTL($key))) { $this->predisClient->expire($this->getEffectiveKey($key), $this->getTtlToUse($ttl)); } @@ -56,39 +69,39 @@ public function increment(string $key, ?int $ttl = null): int|false return $value; } - #[\Override] + #[Override] public function clear(string $key): bool { return (bool) $this->predisClient->del($this->getEffectiveKey($key)); } - #[\Override] + #[Override] public function clearAllCache(): bool { - return null !== $this->predisClient->flushall(); + return 'OK' === (string) $this->predisClient->flushall(); } - #[\Override] + #[Override] public function getRemainingTTL(string $key): ?int { - $ttl = $this->predisClient->ttl($key); + $ttl = $this->predisClient->ttl($this->getEffectiveKey($key)); return $ttl >= 0 ? $ttl : null; } - #[\Override] + #[Override] public function isConnected(): bool { return null !== $this->predisClient->ping(); } - #[\Override] + #[Override] public function getEnum(): CacheEnum { return CacheEnum::PREDIS; } - #[\Override] + #[Override] protected function checkInstanceIsCorrect(object $instance): bool { return $instance instanceof PredisClient; @@ -112,7 +125,7 @@ protected function __construct(int $ttl, array $configuration = []) } } - #[\Override] + #[Override] protected function getMandatoryConfig(): array { return $this->mandatoryKeys; diff --git a/src/Service/RedisCache.php b/src/Service/RedisCache.php index 22a5e0e..7fb4ede 100644 --- a/src/Service/RedisCache.php +++ b/src/Service/RedisCache.php @@ -64,7 +64,7 @@ public function clear(string $key): bool #[\Override] public function clearAllCache(): bool { - return null !== $this->redis->flushall(); + return (bool)$this->redis->flushall(); } #[\Override] @@ -78,7 +78,7 @@ public function getRemainingTTL(string $key): ?int #[\Override] public function isConnected(): bool { - return null !== $this->redis->ping(); + return (bool)$this->redis->ping(); } #[\Override] diff --git a/tests/AbstractCache.php b/tests/AbstractCache.php index e76c5a9..33f9327 100644 --- a/tests/AbstractCache.php +++ b/tests/AbstractCache.php @@ -5,6 +5,7 @@ use CacheMultiLayer\Enum\CacheEnum; use CacheMultiLayer\Service\Cache; use CacheMultiLayer\Tests\Entity\Foo; +use Override; use PHPUnit\Framework\TestCase; /** @@ -23,14 +24,14 @@ final public function setCache(?Cache $cache): void $this->cache = $cache; } - #[\Override] + #[Override] public static function tearDownAfterClass(): void { parent::tearDownAfterClass(); restore_error_handler(); } - #[\Override] + #[Override] protected function setUp(): void { $this->foo = (new Foo()) @@ -175,17 +176,36 @@ public function testEmptyDecrement(): void $actual = $this->cache->decrement($key); $this->assertEquals($expected, $actual); } + + public function testFailStringIncrement(): void + { + $key = 'test_fail_increment'; + $value = 'foo'; + $this->cache->set($key, $value); + $actual = $this->cache->increment($key); + $this->assertFalse($actual); + } + + public function testFailStringDecrement(): void + { + $key = 'test_fail_decrement'; + $value = 'foo'; + $this->cache->set($key, $value); + $actual = $this->cache->decrement($key); + $this->assertFalse($actual); + } public function testRemainingTTL(): void { $key = 'test_remaining_ttl'; - $x = 1; - $res = $this->cache->set($key, $x); + $val = 1; + $ttl = 10; + $res = $this->cache->set($key, $val,$ttl); $this->assertTrue($res); sleep(2); - $ttl = $this->cache->getRemainingTTL($key); - $this->assertNotNull($ttl); - $this->assertLessThan(60, $ttl); + $ttlActual = $this->cache->getRemainingTTL($key); + $this->assertNotNull($ttlActual); + $this->assertLessThan(60, $ttlActual); } public function testIsConnected(): void diff --git a/tests/AbstractCacheManager.php b/tests/AbstractCacheManager.php index 26affc3..26da0b2 100644 --- a/tests/AbstractCacheManager.php +++ b/tests/AbstractCacheManager.php @@ -2,8 +2,12 @@ namespace CacheMultiLayer\Tests; +use CacheMultiLayer\Enum\CacheEnum; +use CacheMultiLayer\Service\Cache; +use CacheMultiLayer\Service\CacheConfiguration; use CacheMultiLayer\Service\CacheManager; use CacheMultiLayer\Tests\Entity\Foo; +use Override; use PHPUnit\Framework\TestCase; /** @@ -14,8 +18,8 @@ */ class AbstractCacheManager extends TestCase { - private ?CacheManager $cacheManager = null; + private ?CacheManager $cacheManager = null; private ?Foo $foo = null; final public function setCacheManager(?CacheManager $cacheManager): void @@ -28,7 +32,7 @@ final public function getCacheManager(): ?CacheManager return $this->cacheManager; } - #[\Override] + #[Override] protected function setUp(): void { $this->foo = (new Foo()) @@ -156,4 +160,114 @@ public function testClearAllCache(): void $val2 = $this->cacheManager->get($key2); $this->assertNull($val2); } + + public function testEmptyCache(): void + { + $key = 'foo'; + $val = 'bar'; + $res = CacheManager::factory()->set($key, $val); + $this->assertFalse($res); + } + + public function testDuplicateCache(): void + { + $cc = CacheManager::factory(); + $appendTrue = $cc->appendCache(Cache::factory(CacheEnum::APCU, 10)); + $appendFalse = $cc->appendCache(Cache::factory(CacheEnum::APCU, 10)); + $this->assertTrue($appendTrue); + $this->assertFalse($appendFalse); + } + + public function testDuplicateConfig(): void + { + $cc = new CacheConfiguration(); + $appendTrue = $cc->appendCacheLevel(CacheEnum::APCU, 10); + $appendFalse = $cc->appendCacheLevel(CacheEnum::APCU, 10); + $this->assertTrue($appendTrue); + $this->assertFalse($appendFalse); + } + + public function testArrayDepth(): void + { + $x = [1, 2, 3, null, [ + 1, 2, 3, null, [ + 1, 2, 3, null, + ], + ], + ]; + $key = 'test_array_depth_manager'; + $res = $this->cacheManager->set($key, $x); + $this->assertTrue($res); + $val = $this->cacheManager->get($key); + $this->testRecursiveArray($x, $val); + } + + public function testEmptyIncrement(): void + { + $key = 'test_empty_increment_manager'; + $expected = 1; + $resultSet = $this->cacheManager->increment($key); + foreach ($resultSet as $cacheKey => $actual) { + $this->assertEquals($expected, $actual, "cache current " . $cacheKey); + } + } + + public function testEmptyDecrement(): void + { + $key = 'test_empty_decrement_manager'; + $expected = -1; + $resultSet = $this->cacheManager->decrement($key); + foreach ($resultSet as $cacheKey => $actual) { + $this->assertEquals($expected, $actual, "cache current " . $cacheKey); + } + } + + public function testFailStringIncrement(): void + { + $key = 'test_fail_increment_manager'; + $value = 'foo'; + $this->cacheManager->set($key, $value); + $resultSet = $this->cacheManager->increment($key); + foreach ($resultSet as $cacheKey => $actual) { + $this->assertFalse($actual, "cache current " . $cacheKey); + } + } + + public function testFailStringDecrement(): void + { + $key = 'test_fail_decrement_manager'; + $value = 'foo'; + $this->cacheManager->set($key, $value); + $resultSet = $this->cacheManager->decrement($key); + foreach ($resultSet as $cacheKey => $actual) { + $this->assertFalse($actual, "cache current " . $cacheKey); + } + } + + public function testRemainingTTL(): void + { + $key = 'test_remaining_ttl_manager'; + $val = 1; + $ttl = 10; + $res = $this->cacheManager->set($key, $val, $ttl); + $this->assertTrue($res); + sleep(2); + $resultSet = $this->cacheManager->getRemainingTTL($key); + foreach ($resultSet as $cacheKey => $actual) { + $this->assertNotNull($actual, "cache current " . $cacheKey); + $this->assertLessThan(60, $actual, "cache current " . $cacheKey); + } + } + + private function testRecursiveArray(array $actual, array $expected): void + { + foreach ($expected as $key => $value) { + $this->assertArrayHasKey($key, $actual); + if (is_array($value)) { + $this->testRecursiveArray($value, $actual[$key]); + } else { + $this->assertEquals($value, $actual[$key]); + } + } + } } diff --git a/tests/ApcuCacheTest.php b/tests/ApcuCacheTest.php index c0ef1de..c316aa0 100644 --- a/tests/ApcuCacheTest.php +++ b/tests/ApcuCacheTest.php @@ -4,6 +4,9 @@ use CacheMultiLayer\Enum\CacheEnum; use CacheMultiLayer\Service\Cache; +use Exception; +use InvalidArgumentException; +use Override; /** * APCU unit test class implementation. @@ -12,7 +15,8 @@ */ class ApcuCacheTest extends AbstractCache { - #[\Override] + + #[Override] public static function setUpBeforeClass(): void { parent::setUpBeforeClass(); @@ -22,102 +26,114 @@ public static function setUpBeforeClass(): void return false; } - throw new \Exception($errstr.' -> '.$errfile.':'.$errline, 0); + throw new Exception($errstr . ' -> ' . $errfile . ':' . $errline, 0); // throw new ErrorException($errstr, 0, $errno, $errfile, $errline); }); try { self::checkBeforeClass(); - } catch (\Exception) { - echo PHP_EOL.'[APCU]'.PHP_EOL.' apc.enable_cli=1'.PHP_EOL; + } catch (Exception) { + echo PHP_EOL . '[APCU]' . PHP_EOL . ' apc.enable_cli=1' . PHP_EOL; exit; } } - #[\Override] + #[Override] protected function setUp(): void { parent::setUp(); $this->setCache(Cache::factory(CacheEnum::APCU, 60, ['key_prefix' => 'pre_'])); } - #[\Override] + #[Override] public function testArray(): void { parent::testArray(); } - #[\Override] + #[Override] public function testClass(): void { parent::testClass(); } - #[\Override] + #[Override] public function testClear(): void { parent::testClear(); } - #[\Override] + #[Override] public function testClearAllCache(): void { parent::testClearAllCache(); } - #[\Override] + #[Override] public function testExpireTtl(): void { parent::testExpireTtl(); } - #[\Override] + #[Override] public function testFloat(): void { parent::testFloat(); } - #[\Override] + #[Override] public function testIncrDecr(): void { parent::testIncrDecr(); } - #[\Override] + #[Override] public function testInteger(): void { parent::testInteger(); } - #[\Override] + #[Override] public function testString(): void { parent::testString(); } - #[\Override] + #[Override] public function testIsConnected(): void { parent::testIsConnected(); } - #[\Override] + #[Override] public function testRemainingTTL(): void { parent::testRemainingTTL(); } - #[\Override] + #[Override] public function testEmptyDecrement(): void { parent::testEmptyDecrement(); } - #[\Override] + #[Override] public function testEmptyIncrement(): void { parent::testEmptyIncrement(); } + #[\Override] + public function testFailStringDecrement(): void + { + parent::testFailStringDecrement(); + } + + #[\Override] + public function testFailStringIncrement(): void + { + parent::testFailStringIncrement(); + } + public function testEnum(): void { $this->doTestRealEnum(CacheEnum::APCU); @@ -134,26 +150,43 @@ public function testPrefix(): void $this->assertNull($cacheOtherPrefix->get($key)); } - #[\Override] + public function testPrefixTTL(): void + { + $val = 10; // maradona + $key = 'test_prefix'; + $cacheSamePrefix = Cache::factory(CacheEnum::APCU, 60, ['key_prefix' => 'pre_']); + $cacheOtherPrefix = Cache::factory(CacheEnum::APCU, 10, ['key_prefix' => 'other_']); + $this->getCache()->set($key, $val); + $this->assertIsInt($cacheSamePrefix->getRemainingTTL($key)); + $this->assertNull($cacheOtherPrefix->getRemainingTTL($key)); + } + + public function testNegativeTTL(): void + { + $this->expectException(InvalidArgumentException::class); + Cache::factory(CacheEnum::APCU, -1, ['key_prefix' => 'pre_']); + } + + #[Override] public static function tearDownAfterClass(): void { parent::tearDownAfterClass(); Cache::factory(CacheEnum::APCU, 60)->clearAllCache(); } - #[\Override] + #[Override] public function testArrayDepth(): void { parent::testArrayDepth(); } /** - * @throws \Exception + * @throws Exception */ private static function checkBeforeClass(): void { if (false === apcu_cache_info()) { - throw new \Exception('apcu cache info not loaded'); + throw new Exception('apcu cache info not loaded'); } } } diff --git a/tests/CacheManagerDryRunTest.php b/tests/CacheManagerDryRunTest.php index 7bae934..ebc8275 100644 --- a/tests/CacheManagerDryRunTest.php +++ b/tests/CacheManagerDryRunTest.php @@ -14,6 +14,7 @@ */ class CacheManagerDryRunTest extends AbstractCacheManager { + #[\Override] protected function setUp(): void { @@ -125,6 +126,88 @@ public function testClearAllCache(): void $this->assertNull($val2); } + #[\Override] + public function testArrayDepth(): void + { + $x = [1, 2, 3, null, [ + 1, 2, 3, null, [ + 1, 2, 3, null, + ], + ], + ]; + $key = 'test_array_depth'; + $res = $this->getCacheManager()->set($key, $x); + $this->assertTrue($res); + $val = $this->getCacheManager()->get($key); + $this->assertEmpty($val); + } + + #[\Override] + public function testDuplicateCache(): void + { + parent::testDuplicateCache(); + } + + #[\Override] + public function testDuplicateConfig(): void + { + parent::testDuplicateConfig(); + } + + #[\Override] + public function testEmptyCache(): void + { + parent::testEmptyCache(); + } + + #[\Override] + public function testEmptyIncrement(): void + { + $key = 'test_empty_increment'; + $resultSet = $this->getCacheManager()->increment($key); + $this->assertEmpty($resultSet); + } + + #[\Override] + public function testEmptyDecrement(): void + { + $key = 'test_empty_decrement'; + $resultSet = $this->getCacheManager()->decrement($key); + $this->assertEmpty($resultSet); + } + + #[\Override] + public function testFailStringIncrement(): void + { + $key = 'test_fail_increment'; + $value = 'foo'; + $this->getCacheManager()->set($key, $value); + $resultSet = $this->getCacheManager()->increment($key); + $this->assertEmpty($resultSet); + } + + #[\Override] + public function testFailStringDecrement(): void + { + $key = 'test_fail_decrement'; + $value = 'foo'; + $this->getCacheManager()->set($key, $value); + $resultSet = $this->getCacheManager()->decrement($key); + $this->assertEmpty($resultSet); + } + + #[\Override] + public function testRemainingTTL(): void + { + $key = 'test_remaining_ttl'; + $x = 1; + $res = $this->getCacheManager()->set($key, $x); + $this->assertTrue($res); + sleep(2); + $resultSet = $this->getCacheManager()->getRemainingTTL($key); + $this->assertEmpty($resultSet); + } + #[\Override] public static function tearDownAfterClass(): void { diff --git a/tests/CacheManagerMultiLevelTest.php b/tests/CacheManagerMultiLevelTest.php index 2bd12bd..6064baf 100644 --- a/tests/CacheManagerMultiLevelTest.php +++ b/tests/CacheManagerMultiLevelTest.php @@ -6,6 +6,7 @@ use CacheMultiLayer\Service\Cache; use CacheMultiLayer\Service\CacheConfiguration; use CacheMultiLayer\Service\CacheManager; +use Override; /** * manager multi levels cache unit test class implementation. @@ -14,67 +15,122 @@ */ class CacheManagerMultiLevelTest extends AbstractCacheManager { - #[\Override] + + #[Override] protected function setUp(): void { parent::setUp(); $this->setCacheManager(CacheManager::factory(self::getConfig())); } - #[\Override] + #[Override] public function testArray(): void { parent::testArray(); } - #[\Override] + #[Override] public function testClass(): void { parent::testClass(); } - #[\Override] + #[Override] public function testClear(): void { parent::testClear(); } - #[\Override] + #[Override] public function testClearAllCache(): void { parent::testClearAllCache(); } - #[\Override] + #[Override] public function testExpireTtl(): void { parent::testExpireTtl(); } - #[\Override] + #[Override] public function testFloat(): void { parent::testFloat(); } - #[\Override] + #[Override] public function testIncrDecr(): void { parent::testIncrDecr(); } - #[\Override] + #[Override] public function testInteger(): void { parent::testInteger(); } - #[\Override] + #[Override] public function testString(): void { parent::testString(); } + #[Override] + public function testEmptyCache(): void + { + parent::testEmptyCache(); + } + + #[Override] + public function testDuplicateCache(): void + { + parent::testDuplicateCache(); + } + + #[Override] + public function testDuplicateConfig(): void + { + parent::testDuplicateConfig(); + } + + #[\Override] + public function testArrayDepth(): void + { + parent::testArrayDepth(); + } + + #[\Override] + public function testEmptyDecrement(): void + { + parent::testEmptyDecrement(); + } + + #[\Override] + public function testEmptyIncrement(): void + { + parent::testEmptyIncrement(); + } + + #[\Override] + public function testFailStringDecrement(): void + { + parent::testFailStringDecrement(); + } + + #[\Override] + public function testFailStringIncrement(): void + { + parent::testFailStringIncrement(); + } + + #[\Override] + public function testRemainingTTL(): void + { + parent::testRemainingTTL(); + } + public function testUpdateHighestLevels(): void { $key = 'test_update_highest'; @@ -92,7 +148,7 @@ public function testUpdateHighestLevels(): void $this->assertEquals($val, $apcuCache->get($key)); } - #[\Override] + #[Override] public static function tearDownAfterClass(): void { CacheManager::factory(self::getConfig())->clearAllCache(); diff --git a/tests/CacheManagerOneLevelTest.php b/tests/CacheManagerOneLevelTest.php index 32d777d..dfc6a55 100644 --- a/tests/CacheManagerOneLevelTest.php +++ b/tests/CacheManagerOneLevelTest.php @@ -5,6 +5,7 @@ use CacheMultiLayer\Enum\CacheEnum; use CacheMultiLayer\Service\CacheConfiguration; use CacheMultiLayer\Service\CacheManager; +use Override; /** * manager one level cache unit test class implementation. @@ -13,67 +14,123 @@ */ class CacheManagerOneLevelTest extends AbstractCacheManager { - #[\Override] + + #[Override] protected function setUp(): void { parent::setUp(); $this->setCacheManager(CacheManager::factory(self::getConfig())); } - #[\Override] + #[Override] public function testArray(): void { parent::testArray(); } - #[\Override] + #[Override] public function testClass(): void { parent::testClass(); } - #[\Override] + #[Override] public function testClear(): void { parent::testClear(); } - #[\Override] + #[Override] public function testClearAllCache(): void { parent::testClearAllCache(); } - #[\Override] + #[Override] public function testExpireTtl(): void { parent::testExpireTtl(); } - #[\Override] + #[Override] public function testFloat(): void { parent::testFloat(); } - #[\Override] + #[Override] public function testIncrDecr(): void { parent::testIncrDecr(); } - #[\Override] + #[Override] public function testInteger(): void { parent::testInteger(); } - #[\Override] + #[Override] public function testString(): void { parent::testString(); } + #[Override] + public function testEmptyCache(): void + { + parent::testEmptyCache(); + } + + #[Override] + public function testDuplicateCache(): void + { + parent::testDuplicateCache(); + } + + #[Override] + public function testDuplicateConfig(): void + { + parent::testDuplicateConfig(); + } + + #[Override] + public function testArrayDepth(): void + { + parent::testArrayDepth(); + } + + #[Override] + public function testEmptyDecrement(): void + { + parent::testEmptyDecrement(); + } + + #[Override] + public function testEmptyIncrement(): void + { + parent::testEmptyIncrement(); + } + + #[Override] + public function testFailStringDecrement(): void + { + parent::testFailStringDecrement(); + } + + #[Override] + public function testFailStringIncrement(): void + { + parent::testFailStringIncrement(); + } + + #[Override] + public function testRemainingTTL(): void + { + parent::testRemainingTTL(); + } + + private static function getConfig(): CacheConfiguration { $cacheConfiguration = new CacheConfiguration(); diff --git a/tests/MemcacheCacheTest.php b/tests/MemcacheCacheTest.php index bec0142..4442677 100644 --- a/tests/MemcacheCacheTest.php +++ b/tests/MemcacheCacheTest.php @@ -6,7 +6,9 @@ use CacheMultiLayer\Exception\CacheMissingConfigurationException; use CacheMultiLayer\Service\Cache; use Exception; +use InvalidArgumentException; use Memcache; +use Override; /** * MEMCACHE unit test class implementation. @@ -15,14 +17,15 @@ */ class MemcacheCacheTest extends AbstractCache { - #[\Override] + + #[Override] protected function setUp(): void { parent::setUp(); $this->setCache(Cache::factory(CacheEnum::MEMCACHE, 60, ['server_address' => 'memcache-server'])); } - #[\Override] + #[Override] public static function setUpBeforeClass(): void { parent::setUpBeforeClass(); @@ -34,106 +37,134 @@ public static function setUpBeforeClass(): void return match ($errno) { E_USER_WARNING => true, - default => throw new \Exception($errstr.' -> '.$errfile.':'.$errline, 0), + default => throw new Exception($errstr . ' -> ' . $errfile . ':' . $errline, 0), }; // throw new ErrorException($errstr, 0, $errno, $errfile, $errline); }); } - #[\Override] + #[Override] public function testArray(): void { parent::testArray(); } - #[\Override] + #[Override] public function testClass(): void { parent::testClass(); } - #[\Override] + #[Override] public function testClear(): void { parent::testClear(); } - #[\Override] + #[Override] public function testClearAllCache(): void { parent::testClearAllCache(); } - #[\Override] + #[Override] public function testExpireTtl(): void { parent::testExpireTtl(); } - #[\Override] + #[Override] public function testFloat(): void { parent::testFloat(); } - #[\Override] + #[Override] public function testIncrDecr(): void { parent::testIncrDecr(); } - #[\Override] + #[Override] public function testInteger(): void { parent::testInteger(); } - #[\Override] + #[Override] public function testString(): void { parent::testString(); } - #[\Override] + #[Override] public function testIsConnected(): void { parent::testIsConnected(); } - #[\Override] + #[Override] public function testEmptyDecrement(): void { parent::testEmptyDecrement(); } - #[\Override] + #[Override] public function testEmptyIncrement(): void { parent::testEmptyIncrement(); } - #[\Override] + #[Override] public function testRemainingTTL(): void { parent::testRemainingTTL(); } + #[\Override] + public function testFailStringDecrement(): void + { + parent::testFailStringDecrement(); + } + + #[\Override] + public function testFailStringIncrement(): void + { + parent::testFailStringIncrement(); + } + public function testMissingServer(): void { $this->expectException(CacheMissingConfigurationException::class); Cache::factory(CacheEnum::MEMCACHE, 60, ['port' => 11211]); } + public function testNegativeTTL(): void + { + $this->expectException(InvalidArgumentException::class); + Cache::factory(CacheEnum::MEMCACHE, -1, ['server_address' => 'memcache-server']); + } + + public function testConnectionPersistent(): void + { + $this->assertTrue( + Cache::factory(CacheEnum::MEMCACHE, 60, [ + 'server_address' => 'memcache-server', + 'persistent' => true, + ])->isConnected() + ); + } + public function testConnectionNotFound(): void { - $this->expectException(\Exception::class); + $this->expectException(Exception::class); Cache::factory(CacheEnum::MEMCACHE, 60, ['server_address' => 'ip-no-memcache'])->isConnected(); } public function testInstance(): void { - $memcache = new \Memcache(); + $memcache = new Memcache(); $memcache->connect('memcache-server', 11211); Cache::factory(CacheEnum::MEMCACHE, 60, ['instance' => $memcache]); $this->assertTrue(true); // no exception throwns @@ -161,13 +192,35 @@ public function testPrefix(): void $this->assertNull($cacheOtherPrefix->get($key)); } - #[\Override] + public function testCompression(): void + { + $cache = Cache::factory(CacheEnum::MEMCACHE, 60, ['key_prefix' => 'compressed_', 'server_address' => 'memcache-server', 'compress' => 1]); + $key = 'test_compression'; + $val = 1; + $resSet = $cache->set($key, $val); + $this->assertTrue($resSet); + $actual = $cache->get($key); + $this->assertEquals($val, $actual); + } + + public function testPrefixTTL(): void + { + $val = 10; // maradona + $key = 'test_prefix'; + $cacheSamePrefix = Cache::factory(CacheEnum::MEMCACHE, 60, ['key_prefix' => '', 'server_address' => 'memcache-server']); + $cacheOtherPrefix = Cache::factory(CacheEnum::MEMCACHE, 10, ['key_prefix' => 'other_', 'server_address' => 'memcache-server']); + $this->getCache()->set($key, $val); + $this->assertIsInt($cacheSamePrefix->getRemainingTTL($key)); + $this->assertNull($cacheOtherPrefix->getRemainingTTL($key)); + } + + #[Override] public function testArrayDepth(): void { parent::testArrayDepth(); } - #[\Override] + #[Override] public static function tearDownAfterClass(): void { restore_error_handler(); diff --git a/tests/PRedisCacheTest.php b/tests/PRedisCacheTest.php index ce3bf5c..93cfc0f 100644 --- a/tests/PRedisCacheTest.php +++ b/tests/PRedisCacheTest.php @@ -5,7 +5,8 @@ use CacheMultiLayer\Enum\CacheEnum; use CacheMultiLayer\Exception\CacheMissingConfigurationException; use CacheMultiLayer\Service\Cache; -use Exception; +use InvalidArgumentException; +use Override; use Predis\Client; /** @@ -15,14 +16,15 @@ */ class PRedisCacheTest extends AbstractCache { - #[\Override] + + #[Override] protected function setUp(): void { parent::setUp(); $this->setCache(Cache::factory(CacheEnum::PREDIS, 60, ['server_address' => 'redis-server'])); } - #[\Override] + #[Override] public static function setUpBeforeClass(): void { parent::setUpBeforeClass(); @@ -34,88 +36,100 @@ public static function setUpBeforeClass(): void return match ($errno) { E_USER_WARNING => true, - default => throw new \Exception($errstr.' -> '.$errfile.':'.$errline, 0), + default => throw new \Exception($errstr . ' -> ' . $errfile . ':' . $errline, 0), }; }); } - #[\Override] + #[Override] public function testArray(): void { parent::testArray(); } - #[\Override] + #[Override] public function testClass(): void { parent::testClass(); } - #[\Override] + #[Override] public function testClear(): void { parent::testClear(); } - #[\Override] + #[Override] public function testClearAllCache(): void { parent::testClearAllCache(); } - #[\Override] + #[Override] public function testExpireTtl(): void { parent::testExpireTtl(); } - #[\Override] + #[Override] public function testFloat(): void { parent::testFloat(); } - #[\Override] + #[Override] public function testIncrDecr(): void { parent::testIncrDecr(); } - #[\Override] + #[Override] public function testInteger(): void { parent::testInteger(); } - #[\Override] + #[Override] public function testString(): void { parent::testString(); } - #[\Override] + #[Override] public function testIsConnected(): void { parent::testIsConnected(); } - #[\Override] + #[Override] public function testRemainingTTL(): void { parent::testRemainingTTL(); } - #[\Override] + #[Override] public function testEmptyDecrement(): void { parent::testEmptyDecrement(); } - #[\Override] + #[Override] public function testEmptyIncrement(): void { parent::testEmptyIncrement(); } + + #[\Override] + public function testFailStringDecrement(): void + { + parent::testFailStringDecrement(); + } + + #[\Override] + public function testFailStringIncrement(): void + { + parent::testFailStringIncrement(); + } public function testMissingServer(): void { @@ -149,6 +163,12 @@ public function testInstance(): void $this->assertTrue(true); // no exception throwns } + public function testNegativeTTL(): void + { + $this->expectException(InvalidArgumentException::class); + Cache::factory(CacheEnum::PREDIS, -1, ['server_address' => 'redis-server']); + } + public function testMissingInstance(): void { $this->expectException(CacheMissingConfigurationException::class); @@ -166,13 +186,24 @@ public function testPrefix(): void $this->assertNull($cacheOtherPrefix->get($key)); } - #[\Override] + public function testPrefixTTL(): void + { + $val = 10; // maradona + $key = 'test_prefix'; + $cacheSamePrefix = Cache::factory(CacheEnum::PREDIS, 60, ['key_prefix' => '', 'server_address' => 'redis-server']); + $cacheOtherPrefix = Cache::factory(CacheEnum::PREDIS, 10, ['key_prefix' => 'other_', 'server_address' => 'redis-server']); + $this->getCache()->set($key, $val); + $this->assertIsInt($cacheSamePrefix->getRemainingTTL($key)); + $this->assertNull($cacheOtherPrefix->getRemainingTTL($key)); + } + + #[Override] public function testArrayDepth(): void { parent::testArrayDepth(); } - #[\Override] + #[Override] public static function tearDownAfterClass(): void { restore_error_handler(); diff --git a/tests/RedisCacheTest.php b/tests/RedisCacheTest.php index ecebe07..30adc8d 100644 --- a/tests/RedisCacheTest.php +++ b/tests/RedisCacheTest.php @@ -5,7 +5,8 @@ use CacheMultiLayer\Enum\CacheEnum; use CacheMultiLayer\Exception\CacheMissingConfigurationException; use CacheMultiLayer\Service\Cache; -use Exception; +use InvalidArgumentException; +use Override; /** * REDIS unit test class implementation. @@ -14,14 +15,15 @@ */ class RedisCacheTest extends AbstractCache { - #[\Override] + + #[Override] protected function setUp(): void { parent::setUp(); $this->setCache(Cache::factory(CacheEnum::REDIS, 60, ['server_address' => 'redis-server'])); } - #[\Override] + #[Override] public static function setUpBeforeClass(): void { parent::setUpBeforeClass(); @@ -33,88 +35,100 @@ public static function setUpBeforeClass(): void return match ($errno) { E_USER_WARNING => true, - default => throw new \Exception($errstr.' -> '.$errfile.':'.$errline, 0), + default => throw new \Exception($errstr . ' -> ' . $errfile . ':' . $errline, 0), }; }); } - #[\Override] + #[Override] public function testArray(): void { parent::testArray(); } - #[\Override] + #[Override] public function testClass(): void { parent::testClass(); } - #[\Override] + #[Override] public function testClear(): void { parent::testClear(); } - #[\Override] + #[Override] public function testClearAllCache(): void { parent::testClearAllCache(); } - #[\Override] + #[Override] public function testExpireTtl(): void { parent::testExpireTtl(); } - #[\Override] + #[Override] public function testFloat(): void { parent::testFloat(); } - #[\Override] + #[Override] public function testIncrDecr(): void { parent::testIncrDecr(); } - #[\Override] + #[Override] public function testInteger(): void { parent::testInteger(); } - #[\Override] + #[Override] public function testString(): void { parent::testString(); } - #[\Override] + #[Override] public function testIsConnected(): void { parent::testIsConnected(); } - #[\Override] + #[Override] public function testRemainingTTL(): void { parent::testRemainingTTL(); } - #[\Override] + #[Override] public function testEmptyDecrement(): void { parent::testEmptyDecrement(); } - #[\Override] + #[Override] public function testEmptyIncrement(): void { parent::testEmptyIncrement(); } + + #[\Override] + public function testFailStringDecrement(): void + { + parent::testFailStringDecrement(); + } + + #[\Override] + public function testFailStringIncrement(): void + { + parent::testFailStringIncrement(); + } public function testMissingServer(): void { @@ -163,13 +177,30 @@ public function testPrefix(): void $this->assertNull($cacheOtherPrefix->get($key)); } - #[\Override] + public function testPrefixTTL(): void + { + $val = 10; // maradona + $key = 'test_prefix'; + $cacheSamePrefix = Cache::factory(CacheEnum::REDIS, 60, ['key_prefix' => '', 'server_address' => 'redis-server']); + $cacheOtherPrefix = Cache::factory(CacheEnum::REDIS, 10, ['key_prefix' => 'other_', 'server_address' => 'redis-server']); + $this->getCache()->set($key, $val); + $this->assertIsInt($cacheSamePrefix->getRemainingTTL($key)); + $this->assertNull($cacheOtherPrefix->getRemainingTTL($key)); + } + + public function testNegativeTTL(): void + { + $this->expectException(InvalidArgumentException::class); + Cache::factory(CacheEnum::REDIS, -1, ['server_address' => 'redis-server']); + } + + #[Override] public function testArrayDepth(): void { parent::testArrayDepth(); } - #[\Override] + #[Override] public static function tearDownAfterClass(): void { restore_error_handler(); From 76e22aee0917fb5e0312c2ad3dddceb5e1fdf55e Mon Sep 17 00:00:00 2001 From: github-actions Date: Sun, 31 May 2026 20:43:11 +0000 Subject: [PATCH 3/4] chore: update CHANGELOG for PR #41 --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b9e9640..ff1d44a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,3 +30,5 @@ - [2026-01-16] DamImpr: test method with depth array greater than 1 [#38](https://github.com/DamImpr/cache-multi-layer/pull/38) - [2026-03-25] DamImpr: Fix code review [#40](https://github.com/DamImpr/cache-multi-layer/pull/40) + +- [2026-05-31] DamImpr: Code review [#41](https://github.com/DamImpr/cache-multi-layer/pull/41) From c7b0648b22d1a6d7215b7b356d0135087c98ad86 Mon Sep 17 00:00:00 2001 From: Damiano Improta Date: Sun, 31 May 2026 22:47:38 +0200 Subject: [PATCH 4/4] format code --- src/Exception/CacheConnectionException.php | 3 +- .../CacheMissingConfigurationException.php | 3 +- src/Service/ApcuCache.php | 6 +-- src/Service/CacheManagerImpl.php | 5 +- src/Service/MemcacheCache.php | 25 +++++---- src/Service/PRedisCache.php | 32 ++++++----- src/Service/RedisCache.php | 4 +- tests/AbstractCache.php | 9 ++-- tests/AbstractCacheManager.php | 22 ++++---- tests/ApcuCacheTest.php | 50 ++++++++--------- tests/CacheManagerDryRunTest.php | 7 ++- tests/CacheManagerMultiLevelTest.php | 30 +++++------ tests/CacheManagerOneLevelTest.php | 41 +++++++------- tests/MemcacheCacheTest.php | 53 +++++++++---------- tests/PRedisCacheTest.php | 43 +++++++-------- tests/RedisCacheTest.php | 43 +++++++-------- 16 files changed, 174 insertions(+), 202 deletions(-) diff --git a/src/Exception/CacheConnectionException.php b/src/Exception/CacheConnectionException.php index 35dced9..dcc5e8c 100644 --- a/src/Exception/CacheConnectionException.php +++ b/src/Exception/CacheConnectionException.php @@ -9,7 +9,6 @@ * * @author Damiano Improta aka Drizella */ -class CacheConnectionException extends Exception +class CacheConnectionException extends \Exception { - } diff --git a/src/Exception/CacheMissingConfigurationException.php b/src/Exception/CacheMissingConfigurationException.php index 8e083dc..7c5de4b 100644 --- a/src/Exception/CacheMissingConfigurationException.php +++ b/src/Exception/CacheMissingConfigurationException.php @@ -9,7 +9,6 @@ * * @author Damiano Improta */ -class CacheMissingConfigurationException extends Exception +class CacheMissingConfigurationException extends \Exception { - } diff --git a/src/Service/ApcuCache.php b/src/Service/ApcuCache.php index 0414a95..1759457 100644 --- a/src/Service/ApcuCache.php +++ b/src/Service/ApcuCache.php @@ -14,7 +14,6 @@ */ class ApcuCache extends Cache { - #[\Override] public function get(string $key): int|float|string|Cacheable|array|null { @@ -64,13 +63,14 @@ public function increment(string $key, ?int $ttl = null): int|false public function getRemainingTTL(string $key): ?int { $keyInfo = apcu_key_info($this->getEffectiveKey($key)); - if( null === $keyInfo){ + if (null === $keyInfo) { return null; } $result = $keyInfo['creation_time'] + $keyInfo['ttl'] - time(); - if($result < 0) { + if ($result < 0) { return null; } + return $result; } diff --git a/src/Service/CacheManagerImpl.php b/src/Service/CacheManagerImpl.php index 6e4c786..cfb8b16 100644 --- a/src/Service/CacheManagerImpl.php +++ b/src/Service/CacheManagerImpl.php @@ -11,13 +11,12 @@ */ class CacheManagerImpl extends CacheManager { - private array $caches = []; #[\Override] public function appendCache(Cache $cache): bool { - if (!empty(array_filter($this->caches, fn(Cache $current): bool => $cache->getEnum() === $current->getEnum()))) { + if (!empty(array_filter($this->caches, fn (Cache $current): bool => $cache->getEnum() === $current->getEnum()))) { return false; } @@ -38,7 +37,7 @@ public function set(string $key, int|float|string|Cacheable|array $val, ?int $tt $res[$i] = $this->caches[$i]->set($key, $val, $ttl); } - return array_reduce($res, fn(bool $carry, bool $item) => $carry && $item, true); + return array_reduce($res, fn (bool $carry, bool $item) => $carry && $item, true); } #[\Override] diff --git a/src/Service/MemcacheCache.php b/src/Service/MemcacheCache.php index 6bdf19c..0ac0f1c 100644 --- a/src/Service/MemcacheCache.php +++ b/src/Service/MemcacheCache.php @@ -5,7 +5,6 @@ use CacheMultiLayer\Enum\CacheEnum; use CacheMultiLayer\Exception\CacheConnectionException; use CacheMultiLayer\Interface\Cacheable; -use Override; /** * MEMCACHE cache implementation. @@ -14,26 +13,25 @@ */ class MemcacheCache extends Cache { - - #[Override] + #[\Override] protected function getMandatoryConfig(): array { return $this->mandatoryKeys; } - #[Override] + #[\Override] public function clear(string $key): bool { return $this->memcache->delete($this->getEffectiveKey($key)); } - #[Override] + #[\Override] public function clearAllCache(): bool { return $this->memcache->flush(); } - #[Override] + #[\Override] public function decrement(string $key, ?int $ttl = null): int|false { $pair = $this->memcache->get($this->getEffectiveKey($key)); @@ -55,7 +53,7 @@ public function decrement(string $key, ?int $ttl = null): int|false return $value; } - #[Override] + #[\Override] public function get(string $key): int|float|string|Cacheable|array|null { $val = $this->memcache->get($this->getEffectiveKey($key)); @@ -68,13 +66,13 @@ public function get(string $key): int|float|string|Cacheable|array|null return is_array($valDecoded) ? $this->unserializeVal($valDecoded) : $valDecoded; } - #[Override] + #[\Override] public function getEnum(): CacheEnum { return CacheEnum::MEMCACHE; } - #[Override] + #[\Override] public function getRemainingTTL(string $key): ?int { $val = $this->memcache->get($this->getEffectiveKey($key)); @@ -82,10 +80,11 @@ public function getRemainingTTL(string $key): ?int return null; } $res = $val['expires_at'] - time(); + return $res >= 0 ? $res : null; } - #[Override] + #[\Override] public function increment(string $key, ?int $ttl = null): int|false { $pair = $this->memcache->get($this->getEffectiveKey($key)); @@ -107,13 +106,13 @@ public function increment(string $key, ?int $ttl = null): int|false return $value; } - #[Override] + #[\Override] public function isConnected(): bool { return false !== $this->memcache->getStats(); } - #[Override] + #[\Override] public function set(string $key, int|float|string|Cacheable|array $val, ?int $ttl = null): bool { $values = is_array($val) ? $this->serializeValArray($val) : $this->serializeVal($val); @@ -125,7 +124,7 @@ public function set(string $key, int|float|string|Cacheable|array $val, ?int $tt return $this->memcache->set($this->getEffectiveKey($key), $dataToStore, $this->compress ? MEMCACHE_COMPRESSED : 0, $ttlToUse); } - #[Override] + #[\Override] protected function checkInstanceIsCorrect(object $instance): bool { return $instance instanceof \Memcache; diff --git a/src/Service/PRedisCache.php b/src/Service/PRedisCache.php index 20beff0..bad0cea 100644 --- a/src/Service/PRedisCache.php +++ b/src/Service/PRedisCache.php @@ -4,7 +4,6 @@ use CacheMultiLayer\Enum\CacheEnum; use CacheMultiLayer\Interface\Cacheable; -use Override; use Predis\Client as PredisClient; use Predis\Response\ServerException; @@ -15,14 +14,13 @@ */ class PRedisCache extends Cache { - - #[Override] + #[\Override] public function decrement(string $key, ?int $ttl = null): int|false { - try{ + try { $value = $this->predisClient->decr($this->getEffectiveKey($key)); } catch (ServerException) { - //value has not numeric value + // value has not numeric value return false; } if (empty($this->getRemainingTTL($key))) { @@ -32,7 +30,7 @@ public function decrement(string $key, ?int $ttl = null): int|false return $value; } - #[Override] + #[\Override] public function get(string $key): int|float|string|Cacheable|array|null { $val = $this->predisClient->get($this->getEffectiveKey($key)); @@ -45,7 +43,7 @@ public function get(string $key): int|float|string|Cacheable|array|null return is_array($valDecoded) ? $this->unserializeVal($valDecoded) : $valDecoded; } - #[Override] + #[\Override] public function set(string $key, int|float|string|Cacheable|array $val, ?int $ttl = null): bool { $data = is_array($val) ? $this->serializeValArray($val) : $this->serializeVal($val); @@ -53,13 +51,13 @@ public function set(string $key, int|float|string|Cacheable|array $val, ?int $tt return null !== $this->predisClient->setex($this->getEffectiveKey($key), $this->getTtlToUse($ttl), json_encode($data)); } - #[Override] + #[\Override] public function increment(string $key, ?int $ttl = null): int|false { - try{ + try { $value = $this->predisClient->incr($this->getEffectiveKey($key)); } catch (ServerException) { - //value has not numeric value + // value has not numeric value return false; } if (empty($this->getRemainingTTL($key))) { @@ -69,19 +67,19 @@ public function increment(string $key, ?int $ttl = null): int|false return $value; } - #[Override] + #[\Override] public function clear(string $key): bool { return (bool) $this->predisClient->del($this->getEffectiveKey($key)); } - #[Override] + #[\Override] public function clearAllCache(): bool { return 'OK' === (string) $this->predisClient->flushall(); } - #[Override] + #[\Override] public function getRemainingTTL(string $key): ?int { $ttl = $this->predisClient->ttl($this->getEffectiveKey($key)); @@ -89,19 +87,19 @@ public function getRemainingTTL(string $key): ?int return $ttl >= 0 ? $ttl : null; } - #[Override] + #[\Override] public function isConnected(): bool { return null !== $this->predisClient->ping(); } - #[Override] + #[\Override] public function getEnum(): CacheEnum { return CacheEnum::PREDIS; } - #[Override] + #[\Override] protected function checkInstanceIsCorrect(object $instance): bool { return $instance instanceof PredisClient; @@ -125,7 +123,7 @@ protected function __construct(int $ttl, array $configuration = []) } } - #[Override] + #[\Override] protected function getMandatoryConfig(): array { return $this->mandatoryKeys; diff --git a/src/Service/RedisCache.php b/src/Service/RedisCache.php index 7fb4ede..24e3182 100644 --- a/src/Service/RedisCache.php +++ b/src/Service/RedisCache.php @@ -64,7 +64,7 @@ public function clear(string $key): bool #[\Override] public function clearAllCache(): bool { - return (bool)$this->redis->flushall(); + return (bool) $this->redis->flushall(); } #[\Override] @@ -78,7 +78,7 @@ public function getRemainingTTL(string $key): ?int #[\Override] public function isConnected(): bool { - return (bool)$this->redis->ping(); + return (bool) $this->redis->ping(); } #[\Override] diff --git a/tests/AbstractCache.php b/tests/AbstractCache.php index 33f9327..4907b12 100644 --- a/tests/AbstractCache.php +++ b/tests/AbstractCache.php @@ -5,7 +5,6 @@ use CacheMultiLayer\Enum\CacheEnum; use CacheMultiLayer\Service\Cache; use CacheMultiLayer\Tests\Entity\Foo; -use Override; use PHPUnit\Framework\TestCase; /** @@ -24,14 +23,14 @@ final public function setCache(?Cache $cache): void $this->cache = $cache; } - #[Override] + #[\Override] public static function tearDownAfterClass(): void { parent::tearDownAfterClass(); restore_error_handler(); } - #[Override] + #[\Override] protected function setUp(): void { $this->foo = (new Foo()) @@ -176,7 +175,7 @@ public function testEmptyDecrement(): void $actual = $this->cache->decrement($key); $this->assertEquals($expected, $actual); } - + public function testFailStringIncrement(): void { $key = 'test_fail_increment'; @@ -200,7 +199,7 @@ public function testRemainingTTL(): void $key = 'test_remaining_ttl'; $val = 1; $ttl = 10; - $res = $this->cache->set($key, $val,$ttl); + $res = $this->cache->set($key, $val, $ttl); $this->assertTrue($res); sleep(2); $ttlActual = $this->cache->getRemainingTTL($key); diff --git a/tests/AbstractCacheManager.php b/tests/AbstractCacheManager.php index 26da0b2..8ba452e 100644 --- a/tests/AbstractCacheManager.php +++ b/tests/AbstractCacheManager.php @@ -7,7 +7,6 @@ use CacheMultiLayer\Service\CacheConfiguration; use CacheMultiLayer\Service\CacheManager; use CacheMultiLayer\Tests\Entity\Foo; -use Override; use PHPUnit\Framework\TestCase; /** @@ -18,7 +17,6 @@ */ class AbstractCacheManager extends TestCase { - private ?CacheManager $cacheManager = null; private ?Foo $foo = null; @@ -32,7 +30,7 @@ final public function getCacheManager(): ?CacheManager return $this->cacheManager; } - #[Override] + #[\Override] protected function setUp(): void { $this->foo = (new Foo()) @@ -190,10 +188,10 @@ public function testDuplicateConfig(): void public function testArrayDepth(): void { $x = [1, 2, 3, null, [ - 1, 2, 3, null, [ - 1, 2, 3, null, - ], + 1, 2, 3, null, [ + 1, 2, 3, null, ], + ], ]; $key = 'test_array_depth_manager'; $res = $this->cacheManager->set($key, $x); @@ -208,7 +206,7 @@ public function testEmptyIncrement(): void $expected = 1; $resultSet = $this->cacheManager->increment($key); foreach ($resultSet as $cacheKey => $actual) { - $this->assertEquals($expected, $actual, "cache current " . $cacheKey); + $this->assertEquals($expected, $actual, 'cache current '.$cacheKey); } } @@ -218,7 +216,7 @@ public function testEmptyDecrement(): void $expected = -1; $resultSet = $this->cacheManager->decrement($key); foreach ($resultSet as $cacheKey => $actual) { - $this->assertEquals($expected, $actual, "cache current " . $cacheKey); + $this->assertEquals($expected, $actual, 'cache current '.$cacheKey); } } @@ -229,7 +227,7 @@ public function testFailStringIncrement(): void $this->cacheManager->set($key, $value); $resultSet = $this->cacheManager->increment($key); foreach ($resultSet as $cacheKey => $actual) { - $this->assertFalse($actual, "cache current " . $cacheKey); + $this->assertFalse($actual, 'cache current '.$cacheKey); } } @@ -240,7 +238,7 @@ public function testFailStringDecrement(): void $this->cacheManager->set($key, $value); $resultSet = $this->cacheManager->decrement($key); foreach ($resultSet as $cacheKey => $actual) { - $this->assertFalse($actual, "cache current " . $cacheKey); + $this->assertFalse($actual, 'cache current '.$cacheKey); } } @@ -254,8 +252,8 @@ public function testRemainingTTL(): void sleep(2); $resultSet = $this->cacheManager->getRemainingTTL($key); foreach ($resultSet as $cacheKey => $actual) { - $this->assertNotNull($actual, "cache current " . $cacheKey); - $this->assertLessThan(60, $actual, "cache current " . $cacheKey); + $this->assertNotNull($actual, 'cache current '.$cacheKey); + $this->assertLessThan(60, $actual, 'cache current '.$cacheKey); } } diff --git a/tests/ApcuCacheTest.php b/tests/ApcuCacheTest.php index c316aa0..39d239e 100644 --- a/tests/ApcuCacheTest.php +++ b/tests/ApcuCacheTest.php @@ -4,9 +4,6 @@ use CacheMultiLayer\Enum\CacheEnum; use CacheMultiLayer\Service\Cache; -use Exception; -use InvalidArgumentException; -use Override; /** * APCU unit test class implementation. @@ -15,8 +12,7 @@ */ class ApcuCacheTest extends AbstractCache { - - #[Override] + #[\Override] public static function setUpBeforeClass(): void { parent::setUpBeforeClass(); @@ -26,97 +22,97 @@ public static function setUpBeforeClass(): void return false; } - throw new Exception($errstr . ' -> ' . $errfile . ':' . $errline, 0); + throw new \Exception($errstr.' -> '.$errfile.':'.$errline, 0); // throw new ErrorException($errstr, 0, $errno, $errfile, $errline); }); try { self::checkBeforeClass(); - } catch (Exception) { - echo PHP_EOL . '[APCU]' . PHP_EOL . ' apc.enable_cli=1' . PHP_EOL; + } catch (\Exception) { + echo PHP_EOL.'[APCU]'.PHP_EOL.' apc.enable_cli=1'.PHP_EOL; exit; } } - #[Override] + #[\Override] protected function setUp(): void { parent::setUp(); $this->setCache(Cache::factory(CacheEnum::APCU, 60, ['key_prefix' => 'pre_'])); } - #[Override] + #[\Override] public function testArray(): void { parent::testArray(); } - #[Override] + #[\Override] public function testClass(): void { parent::testClass(); } - #[Override] + #[\Override] public function testClear(): void { parent::testClear(); } - #[Override] + #[\Override] public function testClearAllCache(): void { parent::testClearAllCache(); } - #[Override] + #[\Override] public function testExpireTtl(): void { parent::testExpireTtl(); } - #[Override] + #[\Override] public function testFloat(): void { parent::testFloat(); } - #[Override] + #[\Override] public function testIncrDecr(): void { parent::testIncrDecr(); } - #[Override] + #[\Override] public function testInteger(): void { parent::testInteger(); } - #[Override] + #[\Override] public function testString(): void { parent::testString(); } - #[Override] + #[\Override] public function testIsConnected(): void { parent::testIsConnected(); } - #[Override] + #[\Override] public function testRemainingTTL(): void { parent::testRemainingTTL(); } - #[Override] + #[\Override] public function testEmptyDecrement(): void { parent::testEmptyDecrement(); } - #[Override] + #[\Override] public function testEmptyIncrement(): void { parent::testEmptyIncrement(); @@ -163,30 +159,30 @@ public function testPrefixTTL(): void public function testNegativeTTL(): void { - $this->expectException(InvalidArgumentException::class); + $this->expectException(\InvalidArgumentException::class); Cache::factory(CacheEnum::APCU, -1, ['key_prefix' => 'pre_']); } - #[Override] + #[\Override] public static function tearDownAfterClass(): void { parent::tearDownAfterClass(); Cache::factory(CacheEnum::APCU, 60)->clearAllCache(); } - #[Override] + #[\Override] public function testArrayDepth(): void { parent::testArrayDepth(); } /** - * @throws Exception + * @throws \Exception */ private static function checkBeforeClass(): void { if (false === apcu_cache_info()) { - throw new Exception('apcu cache info not loaded'); + throw new \Exception('apcu cache info not loaded'); } } } diff --git a/tests/CacheManagerDryRunTest.php b/tests/CacheManagerDryRunTest.php index ebc8275..3e3837c 100644 --- a/tests/CacheManagerDryRunTest.php +++ b/tests/CacheManagerDryRunTest.php @@ -14,7 +14,6 @@ */ class CacheManagerDryRunTest extends AbstractCacheManager { - #[\Override] protected function setUp(): void { @@ -130,10 +129,10 @@ public function testClearAllCache(): void public function testArrayDepth(): void { $x = [1, 2, 3, null, [ - 1, 2, 3, null, [ - 1, 2, 3, null, - ], + 1, 2, 3, null, [ + 1, 2, 3, null, ], + ], ]; $key = 'test_array_depth'; $res = $this->getCacheManager()->set($key, $x); diff --git a/tests/CacheManagerMultiLevelTest.php b/tests/CacheManagerMultiLevelTest.php index 6064baf..dabaa06 100644 --- a/tests/CacheManagerMultiLevelTest.php +++ b/tests/CacheManagerMultiLevelTest.php @@ -6,7 +6,6 @@ use CacheMultiLayer\Service\Cache; use CacheMultiLayer\Service\CacheConfiguration; use CacheMultiLayer\Service\CacheManager; -use Override; /** * manager multi levels cache unit test class implementation. @@ -15,81 +14,80 @@ */ class CacheManagerMultiLevelTest extends AbstractCacheManager { - - #[Override] + #[\Override] protected function setUp(): void { parent::setUp(); $this->setCacheManager(CacheManager::factory(self::getConfig())); } - #[Override] + #[\Override] public function testArray(): void { parent::testArray(); } - #[Override] + #[\Override] public function testClass(): void { parent::testClass(); } - #[Override] + #[\Override] public function testClear(): void { parent::testClear(); } - #[Override] + #[\Override] public function testClearAllCache(): void { parent::testClearAllCache(); } - #[Override] + #[\Override] public function testExpireTtl(): void { parent::testExpireTtl(); } - #[Override] + #[\Override] public function testFloat(): void { parent::testFloat(); } - #[Override] + #[\Override] public function testIncrDecr(): void { parent::testIncrDecr(); } - #[Override] + #[\Override] public function testInteger(): void { parent::testInteger(); } - #[Override] + #[\Override] public function testString(): void { parent::testString(); } - #[Override] + #[\Override] public function testEmptyCache(): void { parent::testEmptyCache(); } - #[Override] + #[\Override] public function testDuplicateCache(): void { parent::testDuplicateCache(); } - #[Override] + #[\Override] public function testDuplicateConfig(): void { parent::testDuplicateConfig(); @@ -148,7 +146,7 @@ public function testUpdateHighestLevels(): void $this->assertEquals($val, $apcuCache->get($key)); } - #[Override] + #[\Override] public static function tearDownAfterClass(): void { CacheManager::factory(self::getConfig())->clearAllCache(); diff --git a/tests/CacheManagerOneLevelTest.php b/tests/CacheManagerOneLevelTest.php index dfc6a55..fb43f74 100644 --- a/tests/CacheManagerOneLevelTest.php +++ b/tests/CacheManagerOneLevelTest.php @@ -5,7 +5,6 @@ use CacheMultiLayer\Enum\CacheEnum; use CacheMultiLayer\Service\CacheConfiguration; use CacheMultiLayer\Service\CacheManager; -use Override; /** * manager one level cache unit test class implementation. @@ -14,122 +13,120 @@ */ class CacheManagerOneLevelTest extends AbstractCacheManager { - - #[Override] + #[\Override] protected function setUp(): void { parent::setUp(); $this->setCacheManager(CacheManager::factory(self::getConfig())); } - #[Override] + #[\Override] public function testArray(): void { parent::testArray(); } - #[Override] + #[\Override] public function testClass(): void { parent::testClass(); } - #[Override] + #[\Override] public function testClear(): void { parent::testClear(); } - #[Override] + #[\Override] public function testClearAllCache(): void { parent::testClearAllCache(); } - #[Override] + #[\Override] public function testExpireTtl(): void { parent::testExpireTtl(); } - #[Override] + #[\Override] public function testFloat(): void { parent::testFloat(); } - #[Override] + #[\Override] public function testIncrDecr(): void { parent::testIncrDecr(); } - #[Override] + #[\Override] public function testInteger(): void { parent::testInteger(); } - #[Override] + #[\Override] public function testString(): void { parent::testString(); } - #[Override] + #[\Override] public function testEmptyCache(): void { parent::testEmptyCache(); } - #[Override] + #[\Override] public function testDuplicateCache(): void { parent::testDuplicateCache(); } - #[Override] + #[\Override] public function testDuplicateConfig(): void { parent::testDuplicateConfig(); } - #[Override] + #[\Override] public function testArrayDepth(): void { parent::testArrayDepth(); } - #[Override] + #[\Override] public function testEmptyDecrement(): void { parent::testEmptyDecrement(); } - #[Override] + #[\Override] public function testEmptyIncrement(): void { parent::testEmptyIncrement(); } - #[Override] + #[\Override] public function testFailStringDecrement(): void { parent::testFailStringDecrement(); } - #[Override] + #[\Override] public function testFailStringIncrement(): void { parent::testFailStringIncrement(); } - #[Override] + #[\Override] public function testRemainingTTL(): void { parent::testRemainingTTL(); } - private static function getConfig(): CacheConfiguration { diff --git a/tests/MemcacheCacheTest.php b/tests/MemcacheCacheTest.php index 4442677..cf11d9d 100644 --- a/tests/MemcacheCacheTest.php +++ b/tests/MemcacheCacheTest.php @@ -6,9 +6,7 @@ use CacheMultiLayer\Exception\CacheMissingConfigurationException; use CacheMultiLayer\Service\Cache; use Exception; -use InvalidArgumentException; use Memcache; -use Override; /** * MEMCACHE unit test class implementation. @@ -17,15 +15,14 @@ */ class MemcacheCacheTest extends AbstractCache { - - #[Override] + #[\Override] protected function setUp(): void { parent::setUp(); $this->setCache(Cache::factory(CacheEnum::MEMCACHE, 60, ['server_address' => 'memcache-server'])); } - #[Override] + #[\Override] public static function setUpBeforeClass(): void { parent::setUpBeforeClass(); @@ -37,86 +34,86 @@ public static function setUpBeforeClass(): void return match ($errno) { E_USER_WARNING => true, - default => throw new Exception($errstr . ' -> ' . $errfile . ':' . $errline, 0), + default => throw new \Exception($errstr.' -> '.$errfile.':'.$errline, 0), }; // throw new ErrorException($errstr, 0, $errno, $errfile, $errline); }); } - #[Override] + #[\Override] public function testArray(): void { parent::testArray(); } - #[Override] + #[\Override] public function testClass(): void { parent::testClass(); } - #[Override] + #[\Override] public function testClear(): void { parent::testClear(); } - #[Override] + #[\Override] public function testClearAllCache(): void { parent::testClearAllCache(); } - #[Override] + #[\Override] public function testExpireTtl(): void { parent::testExpireTtl(); } - #[Override] + #[\Override] public function testFloat(): void { parent::testFloat(); } - #[Override] + #[\Override] public function testIncrDecr(): void { parent::testIncrDecr(); } - #[Override] + #[\Override] public function testInteger(): void { parent::testInteger(); } - #[Override] + #[\Override] public function testString(): void { parent::testString(); } - #[Override] + #[\Override] public function testIsConnected(): void { parent::testIsConnected(); } - #[Override] + #[\Override] public function testEmptyDecrement(): void { parent::testEmptyDecrement(); } - #[Override] + #[\Override] public function testEmptyIncrement(): void { parent::testEmptyIncrement(); } - #[Override] + #[\Override] public function testRemainingTTL(): void { parent::testRemainingTTL(); @@ -142,29 +139,29 @@ public function testMissingServer(): void public function testNegativeTTL(): void { - $this->expectException(InvalidArgumentException::class); + $this->expectException(\InvalidArgumentException::class); Cache::factory(CacheEnum::MEMCACHE, -1, ['server_address' => 'memcache-server']); } public function testConnectionPersistent(): void { $this->assertTrue( - Cache::factory(CacheEnum::MEMCACHE, 60, [ - 'server_address' => 'memcache-server', - 'persistent' => true, - ])->isConnected() + Cache::factory(CacheEnum::MEMCACHE, 60, [ + 'server_address' => 'memcache-server', + 'persistent' => true, + ])->isConnected() ); } public function testConnectionNotFound(): void { - $this->expectException(Exception::class); + $this->expectException(\Exception::class); Cache::factory(CacheEnum::MEMCACHE, 60, ['server_address' => 'ip-no-memcache'])->isConnected(); } public function testInstance(): void { - $memcache = new Memcache(); + $memcache = new \Memcache(); $memcache->connect('memcache-server', 11211); Cache::factory(CacheEnum::MEMCACHE, 60, ['instance' => $memcache]); $this->assertTrue(true); // no exception throwns @@ -214,13 +211,13 @@ public function testPrefixTTL(): void $this->assertNull($cacheOtherPrefix->getRemainingTTL($key)); } - #[Override] + #[\Override] public function testArrayDepth(): void { parent::testArrayDepth(); } - #[Override] + #[\Override] public static function tearDownAfterClass(): void { restore_error_handler(); diff --git a/tests/PRedisCacheTest.php b/tests/PRedisCacheTest.php index 93cfc0f..78753cb 100644 --- a/tests/PRedisCacheTest.php +++ b/tests/PRedisCacheTest.php @@ -5,8 +5,6 @@ use CacheMultiLayer\Enum\CacheEnum; use CacheMultiLayer\Exception\CacheMissingConfigurationException; use CacheMultiLayer\Service\Cache; -use InvalidArgumentException; -use Override; use Predis\Client; /** @@ -16,15 +14,14 @@ */ class PRedisCacheTest extends AbstractCache { - - #[Override] + #[\Override] protected function setUp(): void { parent::setUp(); $this->setCache(Cache::factory(CacheEnum::PREDIS, 60, ['server_address' => 'redis-server'])); } - #[Override] + #[\Override] public static function setUpBeforeClass(): void { parent::setUpBeforeClass(); @@ -36,89 +33,89 @@ public static function setUpBeforeClass(): void return match ($errno) { E_USER_WARNING => true, - default => throw new \Exception($errstr . ' -> ' . $errfile . ':' . $errline, 0), + default => throw new \Exception($errstr.' -> '.$errfile.':'.$errline, 0), }; }); } - #[Override] + #[\Override] public function testArray(): void { parent::testArray(); } - #[Override] + #[\Override] public function testClass(): void { parent::testClass(); } - #[Override] + #[\Override] public function testClear(): void { parent::testClear(); } - #[Override] + #[\Override] public function testClearAllCache(): void { parent::testClearAllCache(); } - #[Override] + #[\Override] public function testExpireTtl(): void { parent::testExpireTtl(); } - #[Override] + #[\Override] public function testFloat(): void { parent::testFloat(); } - #[Override] + #[\Override] public function testIncrDecr(): void { parent::testIncrDecr(); } - #[Override] + #[\Override] public function testInteger(): void { parent::testInteger(); } - #[Override] + #[\Override] public function testString(): void { parent::testString(); } - #[Override] + #[\Override] public function testIsConnected(): void { parent::testIsConnected(); } - #[Override] + #[\Override] public function testRemainingTTL(): void { parent::testRemainingTTL(); } - #[Override] + #[\Override] public function testEmptyDecrement(): void { parent::testEmptyDecrement(); } - #[Override] + #[\Override] public function testEmptyIncrement(): void { parent::testEmptyIncrement(); } - + #[\Override] public function testFailStringDecrement(): void { @@ -165,7 +162,7 @@ public function testInstance(): void public function testNegativeTTL(): void { - $this->expectException(InvalidArgumentException::class); + $this->expectException(\InvalidArgumentException::class); Cache::factory(CacheEnum::PREDIS, -1, ['server_address' => 'redis-server']); } @@ -197,13 +194,13 @@ public function testPrefixTTL(): void $this->assertNull($cacheOtherPrefix->getRemainingTTL($key)); } - #[Override] + #[\Override] public function testArrayDepth(): void { parent::testArrayDepth(); } - #[Override] + #[\Override] public static function tearDownAfterClass(): void { restore_error_handler(); diff --git a/tests/RedisCacheTest.php b/tests/RedisCacheTest.php index 30adc8d..f7b0e1f 100644 --- a/tests/RedisCacheTest.php +++ b/tests/RedisCacheTest.php @@ -5,8 +5,6 @@ use CacheMultiLayer\Enum\CacheEnum; use CacheMultiLayer\Exception\CacheMissingConfigurationException; use CacheMultiLayer\Service\Cache; -use InvalidArgumentException; -use Override; /** * REDIS unit test class implementation. @@ -15,15 +13,14 @@ */ class RedisCacheTest extends AbstractCache { - - #[Override] + #[\Override] protected function setUp(): void { parent::setUp(); $this->setCache(Cache::factory(CacheEnum::REDIS, 60, ['server_address' => 'redis-server'])); } - #[Override] + #[\Override] public static function setUpBeforeClass(): void { parent::setUpBeforeClass(); @@ -35,89 +32,89 @@ public static function setUpBeforeClass(): void return match ($errno) { E_USER_WARNING => true, - default => throw new \Exception($errstr . ' -> ' . $errfile . ':' . $errline, 0), + default => throw new \Exception($errstr.' -> '.$errfile.':'.$errline, 0), }; }); } - #[Override] + #[\Override] public function testArray(): void { parent::testArray(); } - #[Override] + #[\Override] public function testClass(): void { parent::testClass(); } - #[Override] + #[\Override] public function testClear(): void { parent::testClear(); } - #[Override] + #[\Override] public function testClearAllCache(): void { parent::testClearAllCache(); } - #[Override] + #[\Override] public function testExpireTtl(): void { parent::testExpireTtl(); } - #[Override] + #[\Override] public function testFloat(): void { parent::testFloat(); } - #[Override] + #[\Override] public function testIncrDecr(): void { parent::testIncrDecr(); } - #[Override] + #[\Override] public function testInteger(): void { parent::testInteger(); } - #[Override] + #[\Override] public function testString(): void { parent::testString(); } - #[Override] + #[\Override] public function testIsConnected(): void { parent::testIsConnected(); } - #[Override] + #[\Override] public function testRemainingTTL(): void { parent::testRemainingTTL(); } - #[Override] + #[\Override] public function testEmptyDecrement(): void { parent::testEmptyDecrement(); } - #[Override] + #[\Override] public function testEmptyIncrement(): void { parent::testEmptyIncrement(); } - + #[\Override] public function testFailStringDecrement(): void { @@ -190,17 +187,17 @@ public function testPrefixTTL(): void public function testNegativeTTL(): void { - $this->expectException(InvalidArgumentException::class); + $this->expectException(\InvalidArgumentException::class); Cache::factory(CacheEnum::REDIS, -1, ['server_address' => 'redis-server']); } - #[Override] + #[\Override] public function testArrayDepth(): void { parent::testArrayDepth(); } - #[Override] + #[\Override] public static function tearDownAfterClass(): void { restore_error_handler();