diff --git a/.laminas-ci.json b/.laminas-ci.json index d9d0511..6e300b0 100644 --- a/.laminas-ci.json +++ b/.laminas-ci.json @@ -6,5 +6,15 @@ "redis.clusters.seeds = 'cluster[]=redis-cluster:6379&cluster[]=redis-cluster:6380&cluster[]=redis-cluster:6381&cluster[]=redis-cluster:6382&cluster[]=redis-cluster:6383&cluster[]=redis-cluster:6384'", "redis.clusters.timeout = 'cluster=5'", "redis.clusters.read_timeout = 'cluster=10'" + ], + "additional_checks": [ + { + "name": "Run tests on ext-redis 5.3.7", + "job": { + "php": "*", + "dependencies": "locked", + "command": "REDIS_VERSION=5.3.7 vendor/bin/phpunit" + } + } ] } diff --git a/.laminas-ci/pre-install.sh b/.laminas-ci/pre-install.sh new file mode 100755 index 0000000..bf0f70c --- /dev/null +++ b/.laminas-ci/pre-install.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +JOB=$3 + +COMMAND=$(echo "${JOB}" | jq -r '.command // ""') +[[ "${COMMAND}" =~ ^REDIS_VERSION=([0-9\.]+) ]] || exit 0 + +PHP=$(echo "${JOB}" | jq -r '.php // ""') +REDIS_VERSION=${BASH_REMATCH[1]} + +pecl install -f --configureoptions 'enable-redis-igbinary="yes" enable-redis-lzf="yes"' igbinary redis-${REDIS_VERSION} +echo "extension=redis.so" > /etc/php/${PHP}/mods-available/redis.ini diff --git a/benchmark/RedisClusterStorageAdapterBench.php b/benchmark/RedisClusterStorageAdapterBench.php index e74fb3a..5197659 100644 --- a/benchmark/RedisClusterStorageAdapterBench.php +++ b/benchmark/RedisClusterStorageAdapterBench.php @@ -9,7 +9,7 @@ use PhpBench\Benchmark\Metadata\Annotations\Iterations; use PhpBench\Benchmark\Metadata\Annotations\Revs; use PhpBench\Benchmark\Metadata\Annotations\Warmup; -use RedisCluster; +use Redis; /** * @Revs(100) @@ -23,7 +23,7 @@ class RedisClusterStorageAdapterBench extends AbstractStorageAdapterBenchmark public function __construct() { parent::__construct($this->createRedisClusterStorage( - RedisCluster::SERIALIZER_NONE, + Redis::SERIALIZER_NONE, true )); } diff --git a/benchmark/RedisClusterWithIgbinarySerializerStorageAdapterBench.php b/benchmark/RedisClusterWithIgbinarySerializerStorageAdapterBench.php index e527894..05b8b33 100644 --- a/benchmark/RedisClusterWithIgbinarySerializerStorageAdapterBench.php +++ b/benchmark/RedisClusterWithIgbinarySerializerStorageAdapterBench.php @@ -9,7 +9,7 @@ use PhpBench\Benchmark\Metadata\Annotations\Iterations; use PhpBench\Benchmark\Metadata\Annotations\Revs; use PhpBench\Benchmark\Metadata\Annotations\Warmup; -use RedisCluster; +use Redis; /** * @Revs(100) @@ -23,7 +23,7 @@ class RedisClusterWithIgbinarySerializerStorageAdapterBench extends AbstractStor public function __construct() { parent::__construct($this->createRedisClusterStorage( - RedisCluster::SERIALIZER_IGBINARY, + Redis::SERIALIZER_IGBINARY, false )); } diff --git a/benchmark/RedisClusterWithPhpSerializerStorageAdapterBench.php b/benchmark/RedisClusterWithPhpSerializerStorageAdapterBench.php index 4fcb398..3dca4a9 100644 --- a/benchmark/RedisClusterWithPhpSerializerStorageAdapterBench.php +++ b/benchmark/RedisClusterWithPhpSerializerStorageAdapterBench.php @@ -9,7 +9,7 @@ use PhpBench\Benchmark\Metadata\Annotations\Iterations; use PhpBench\Benchmark\Metadata\Annotations\Revs; use PhpBench\Benchmark\Metadata\Annotations\Warmup; -use RedisCluster; +use Redis; /** * @Revs(100) @@ -23,7 +23,7 @@ class RedisClusterWithPhpSerializerStorageAdapterBench extends AbstractStorageAd public function __construct() { parent::__construct($this->createRedisClusterStorage( - RedisCluster::SERIALIZER_PHP, + Redis::SERIALIZER_PHP, false )); } diff --git a/composer.json b/composer.json index f3a5a62..2e888f3 100644 --- a/composer.json +++ b/composer.json @@ -8,7 +8,7 @@ "license": "BSD-3-Clause", "require": { "php": "~8.0.0 || ~8.1.0 || ~8.2.0", - "ext-redis": "^4.3 || ^5.0.2", + "ext-redis": "^5.0.2 || ^6.0", "laminas/laminas-cache": "^3.0" }, "provide": { diff --git a/composer.lock b/composer.lock index 382c130..c89e26b 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "b5d463ffa3dcb62e7978d7c0aea88386", + "content-hash": "db5d4d153a3d73f9ced9e06dd61fb53c", "packages": [ { "name": "laminas/laminas-cache", @@ -5650,7 +5650,7 @@ "prefer-lowest": false, "platform": { "php": "~8.0.0 || ~8.1.0 || ~8.2.0", - "ext-redis": "^4.3 || ^5.0.2" + "ext-redis": "^5.0.2 || ^6.0" }, "platform-dev": [], "platform-overrides": { diff --git a/src/RedisCluster.php b/src/RedisCluster.php index 7847cb6..b3af157 100644 --- a/src/RedisCluster.php +++ b/src/RedisCluster.php @@ -11,7 +11,7 @@ use Laminas\Cache\Storage\ClearByNamespaceInterface; use Laminas\Cache\Storage\ClearByPrefixInterface; use Laminas\Cache\Storage\FlushableInterface; -use Redis; +use Redis as RedisFromExtension; use RedisCluster as RedisClusterFromExtension; use RedisClusterException; use RedisException; @@ -76,7 +76,7 @@ public function setOptions($options) * In RedisCluster, it is totally okay if just one primary server is being flushed. * If one or more primaries are not reachable, they will re-sync if they're coming back online. * - * One has to connect to the primaries directly using {@see Redis::connect}. + * One has to connect to the primaries directly using {@see RedisFromExtension::connect}. */ public function flush(): bool { @@ -86,7 +86,7 @@ public function flush(): bool $masters = $resource->_masters(); foreach ($masters as [$host, $port]) { - $redis = new Redis(); + $redis = new RedisFromExtension(); try { $redis->connect($host, $port); } catch (RedisException $exception) { @@ -436,8 +436,8 @@ private function clusterException( */ private function isFalseReturnValuePersisted(RedisClusterFromExtension $redis, string $key): bool { - $serializer = $this->getLibOption(RedisClusterFromExtension::OPT_SERIALIZER); - if ($serializer === RedisClusterFromExtension::SERIALIZER_NONE) { + $serializer = $this->getLibOption(RedisFromExtension::OPT_SERIALIZER); + if ($serializer === RedisFromExtension::SERIALIZER_NONE) { return false; } diff --git a/src/RedisClusterResourceManager.php b/src/RedisClusterResourceManager.php index f5c2e2e..7ae5fd2 100644 --- a/src/RedisClusterResourceManager.php +++ b/src/RedisClusterResourceManager.php @@ -10,6 +10,7 @@ use Laminas\Cache\Storage\Plugin\PluginInterface; use Laminas\Cache\Storage\Plugin\Serializer; use Laminas\Cache\Storage\PluginCapableInterface; +use Redis as RedisFromExtension; use RedisCluster as RedisClusterFromExtension; use RedisClusterException; @@ -185,11 +186,11 @@ public function hasSerializationSupport(PluginCapableInterface $adapter): bool */ $options = $this->options; $serializer = $options->getLibOption( - RedisClusterFromExtension::OPT_SERIALIZER, - RedisClusterFromExtension::SERIALIZER_NONE + RedisFromExtension::OPT_SERIALIZER, + RedisFromExtension::SERIALIZER_NONE ); - if ($serializer !== RedisClusterFromExtension::SERIALIZER_NONE) { + if ($serializer !== RedisFromExtension::SERIALIZER_NONE) { return true; } diff --git a/test/integration/Laminas/RedisClusterStorageCreationTrait.php b/test/integration/Laminas/RedisClusterStorageCreationTrait.php index 413bdc3..c2f544f 100644 --- a/test/integration/Laminas/RedisClusterStorageCreationTrait.php +++ b/test/integration/Laminas/RedisClusterStorageCreationTrait.php @@ -7,7 +7,7 @@ use Laminas\Cache\Storage\Adapter\RedisCluster; use Laminas\Cache\Storage\Adapter\RedisClusterOptions; use Laminas\Cache\Storage\Plugin\Serializer; -use RedisCluster as RedisClusterFromExtension; +use Redis as RedisFromExtension; use RuntimeException; use function implode; @@ -44,13 +44,13 @@ private function createRedisClusterStorage(int $serializerOption, bool $serializ $this->options = new RedisClusterOptions([ 'name' => $node, 'lib_options' => [ - RedisClusterFromExtension::OPT_SERIALIZER => $serializerOption, + RedisFromExtension::OPT_SERIALIZER => $serializerOption, ], 'namespace' => str_shuffle(implode('', ['a', 'b', 'c', 'd', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'])), ]); $storage = new RedisCluster($this->options); - if ($serializerOption === RedisClusterFromExtension::SERIALIZER_NONE && $serializerPlugin) { + if ($serializerOption === RedisFromExtension::SERIALIZER_NONE && $serializerPlugin) { $storage->addPlugin(new Serializer()); } diff --git a/test/integration/Laminas/RedisClusterTest.php b/test/integration/Laminas/RedisClusterTest.php index 5ca7597..7920cc9 100644 --- a/test/integration/Laminas/RedisClusterTest.php +++ b/test/integration/Laminas/RedisClusterTest.php @@ -11,7 +11,7 @@ use Laminas\Cache\Storage\Plugin\Serializer; use Laminas\Cache\Storage\StorageInterface; use LaminasTest\Cache\Storage\Adapter\AbstractCommonAdapterTest; -use RedisCluster as RedisClusterFromExtension; +use Redis as RedisFromExtension; /** * @template-extends AbstractCommonAdapterTest @@ -51,7 +51,7 @@ public function testWillHandleIntegratedSerializerInformation(): void $options = $storage->getOptions(); $options->setLibOptions([ - RedisClusterFromExtension::OPT_SERIALIZER => RedisClusterFromExtension::SERIALIZER_PHP, + RedisFromExtension::OPT_SERIALIZER => RedisFromExtension::SERIALIZER_PHP, ]); $capabilities = $storage->getCapabilities(); @@ -86,7 +86,7 @@ public function testWillHandleNonSupportedSerializerInformation(): void $this->removeSerializer($storage); $options = $storage->getOptions(); $options->setLibOptions([ - RedisClusterFromExtension::OPT_SERIALIZER => RedisClusterFromExtension::SERIALIZER_NONE, + RedisFromExtension::OPT_SERIALIZER => RedisFromExtension::SERIALIZER_NONE, ]); $capabilities = $storage->getCapabilities(); @@ -136,7 +136,7 @@ public function testClearsByNamespace(): void protected function setUp(): void { $this->storage = $this->createRedisClusterStorage( - RedisClusterFromExtension::SERIALIZER_PHP, + RedisFromExtension::SERIALIZER_PHP, false ); // Clear storage before executing tests. diff --git a/test/integration/Psr/CacheItemPool/RedisClusterWithPhpIgbinaryTest.php b/test/integration/Psr/CacheItemPool/RedisClusterWithPhpIgbinaryTest.php index fa18713..8fb972b 100644 --- a/test/integration/Psr/CacheItemPool/RedisClusterWithPhpIgbinaryTest.php +++ b/test/integration/Psr/CacheItemPool/RedisClusterWithPhpIgbinaryTest.php @@ -7,6 +7,7 @@ use Laminas\Cache\Storage\StorageInterface; use LaminasTest\Cache\Storage\Adapter\AbstractCacheItemPoolIntegrationTest; use LaminasTest\Cache\Storage\Adapter\Laminas\RedisClusterStorageCreationTrait; +use Redis; use RedisCluster; use function sprintf; @@ -26,6 +27,6 @@ protected function setUp(): void protected function createStorage(): StorageInterface { - return $this->createRedisClusterStorage(RedisCluster::SERIALIZER_IGBINARY, false); + return $this->createRedisClusterStorage(Redis::SERIALIZER_IGBINARY, false); } } diff --git a/test/integration/Psr/CacheItemPool/RedisClusterWithPhpSerializeTest.php b/test/integration/Psr/CacheItemPool/RedisClusterWithPhpSerializeTest.php index a886af0..2fe0bd3 100644 --- a/test/integration/Psr/CacheItemPool/RedisClusterWithPhpSerializeTest.php +++ b/test/integration/Psr/CacheItemPool/RedisClusterWithPhpSerializeTest.php @@ -7,6 +7,7 @@ use Laminas\Cache\Storage\StorageInterface; use LaminasTest\Cache\Storage\Adapter\AbstractCacheItemPoolIntegrationTest; use LaminasTest\Cache\Storage\Adapter\Laminas\RedisClusterStorageCreationTrait; +use Redis; use RedisCluster; use function sprintf; @@ -26,6 +27,6 @@ protected function setUp(): void protected function createStorage(): StorageInterface { - return $this->createRedisClusterStorage(RedisCluster::SERIALIZER_PHP, false); + return $this->createRedisClusterStorage(Redis::SERIALIZER_PHP, false); } } diff --git a/test/integration/Psr/CacheItemPool/RedisClusterWithoutSerializerTest.php b/test/integration/Psr/CacheItemPool/RedisClusterWithoutSerializerTest.php index 06516d2..40daccf 100644 --- a/test/integration/Psr/CacheItemPool/RedisClusterWithoutSerializerTest.php +++ b/test/integration/Psr/CacheItemPool/RedisClusterWithoutSerializerTest.php @@ -7,6 +7,7 @@ use Laminas\Cache\Storage\StorageInterface; use LaminasTest\Cache\Storage\Adapter\AbstractCacheItemPoolIntegrationTest; use LaminasTest\Cache\Storage\Adapter\Laminas\RedisClusterStorageCreationTrait; +use Redis; use RedisCluster; use function sprintf; @@ -26,6 +27,6 @@ protected function setUp(): void protected function createStorage(): StorageInterface { - return $this->createRedisClusterStorage(RedisCluster::SERIALIZER_NONE, true); + return $this->createRedisClusterStorage(Redis::SERIALIZER_NONE, true); } } diff --git a/test/integration/Psr/SimpleCache/RedisClusterWithPhpIgbinaryTest.php b/test/integration/Psr/SimpleCache/RedisClusterWithPhpIgbinaryTest.php index 8c0c0ae..664571c 100644 --- a/test/integration/Psr/SimpleCache/RedisClusterWithPhpIgbinaryTest.php +++ b/test/integration/Psr/SimpleCache/RedisClusterWithPhpIgbinaryTest.php @@ -7,7 +7,7 @@ use Laminas\Cache\Storage\StorageInterface; use LaminasTest\Cache\Storage\Adapter\AbstractSimpleCacheIntegrationTest; use LaminasTest\Cache\Storage\Adapter\Laminas\RedisClusterStorageCreationTrait; -use RedisCluster; +use Redis; final class RedisClusterWithPhpIgbinaryTest extends AbstractSimpleCacheIntegrationTest { @@ -15,6 +15,6 @@ final class RedisClusterWithPhpIgbinaryTest extends AbstractSimpleCacheIntegrati protected function createStorage(): StorageInterface { - return $this->createRedisClusterStorage(RedisCluster::SERIALIZER_IGBINARY, false); + return $this->createRedisClusterStorage(Redis::SERIALIZER_IGBINARY, false); } } diff --git a/test/integration/Psr/SimpleCache/RedisClusterWithPhpSerializerTest.php b/test/integration/Psr/SimpleCache/RedisClusterWithPhpSerializerTest.php index cccb9b0..8f78ea0 100644 --- a/test/integration/Psr/SimpleCache/RedisClusterWithPhpSerializerTest.php +++ b/test/integration/Psr/SimpleCache/RedisClusterWithPhpSerializerTest.php @@ -7,7 +7,7 @@ use Laminas\Cache\Storage\StorageInterface; use LaminasTest\Cache\Storage\Adapter\AbstractSimpleCacheIntegrationTest; use LaminasTest\Cache\Storage\Adapter\Laminas\RedisClusterStorageCreationTrait; -use RedisCluster; +use Redis; final class RedisClusterWithPhpSerializerTest extends AbstractSimpleCacheIntegrationTest { @@ -15,6 +15,6 @@ final class RedisClusterWithPhpSerializerTest extends AbstractSimpleCacheIntegra protected function createStorage(): StorageInterface { - return $this->createRedisClusterStorage(RedisCluster::SERIALIZER_PHP, false); + return $this->createRedisClusterStorage(Redis::SERIALIZER_PHP, false); } } diff --git a/test/integration/Psr/SimpleCache/RedisClusterWithoutSerializerTest.php b/test/integration/Psr/SimpleCache/RedisClusterWithoutSerializerTest.php index 96075bf..d5d5b3c 100644 --- a/test/integration/Psr/SimpleCache/RedisClusterWithoutSerializerTest.php +++ b/test/integration/Psr/SimpleCache/RedisClusterWithoutSerializerTest.php @@ -7,7 +7,7 @@ use Laminas\Cache\Storage\StorageInterface; use LaminasTest\Cache\Storage\Adapter\AbstractSimpleCacheIntegrationTest; use LaminasTest\Cache\Storage\Adapter\Laminas\RedisClusterStorageCreationTrait; -use RedisCluster; +use Redis; final class RedisClusterWithoutSerializerTest extends AbstractSimpleCacheIntegrationTest { @@ -15,6 +15,6 @@ final class RedisClusterWithoutSerializerTest extends AbstractSimpleCacheIntegra protected function createStorage(): StorageInterface { - return $this->createRedisClusterStorage(RedisCluster::SERIALIZER_NONE, true); + return $this->createRedisClusterStorage(Redis::SERIALIZER_NONE, true); } } diff --git a/test/unit/RedisClusterOptionsTest.php b/test/unit/RedisClusterOptionsTest.php index 70c0713..073b0aa 100644 --- a/test/unit/RedisClusterOptionsTest.php +++ b/test/unit/RedisClusterOptionsTest.php @@ -9,7 +9,7 @@ use Laminas\Cache\Storage\Adapter\AdapterOptions; use Laminas\Cache\Storage\Adapter\Exception\InvalidRedisClusterConfigurationException; use Laminas\Cache\Storage\Adapter\RedisClusterOptions; -use RedisCluster as RedisClusterFromExtension; +use Redis as RedisFromExtension; use ReflectionClass; use function assert; @@ -136,7 +136,7 @@ public function testOptionConstantsMatchingExtensionImplementation(string $const */ public function redisClusterOptionConstants(): Generator { - $reflection = new ReflectionClass(RedisClusterFromExtension::class); + $reflection = new ReflectionClass(RedisFromExtension::class); foreach ($reflection->getConstants() as $constant => $constantValue) { if (strpos($constant, 'OPT_') !== 0) { diff --git a/test/unit/RedisClusterResourceManagerTest.php b/test/unit/RedisClusterResourceManagerTest.php index 6195011..e307d98 100644 --- a/test/unit/RedisClusterResourceManagerTest.php +++ b/test/unit/RedisClusterResourceManagerTest.php @@ -9,7 +9,7 @@ use Laminas\Cache\Storage\Adapter\RedisClusterResourceManager; use Laminas\Cache\Storage\Plugin\Serializer; use PHPUnit\Framework\TestCase; -use RedisCluster; +use Redis; use SplObjectStorage; use function uniqid; @@ -76,7 +76,7 @@ public function serializationSupportOptionsProvider(): array new RedisClusterOptions([ 'name' => uniqid('', true), 'lib_options' => [ - RedisCluster::OPT_SERIALIZER => RedisCluster::SERIALIZER_PHP, + Redis::OPT_SERIALIZER => Redis::SERIALIZER_PHP, ], ]), ], @@ -84,7 +84,7 @@ public function serializationSupportOptionsProvider(): array new RedisClusterOptions([ 'name' => uniqid('', true), 'lib_options' => [ - RedisCluster::OPT_SERIALIZER => RedisCluster::SERIALIZER_IGBINARY, + Redis::OPT_SERIALIZER => Redis::SERIALIZER_IGBINARY, ], ]), ],