From 07e67881b55a3aad72d7c7d9d862d7a114eb998a Mon Sep 17 00:00:00 2001 From: DemigodCode Date: Fri, 14 Feb 2025 23:53:43 +0100 Subject: [PATCH] fix integration tests --- .github/workflows/integration-tests.yml | 21 ++++-- .../PredisRedisReplicationAdapterTest.php | 2 +- .../Adapter/PredisReplicationAdapterTest.php | 18 ++++- .../PredisTagAwareReplicationAdapterTest.php | 37 ----------- .../Adapter/RedisReplicationAdapterTest.php | 65 ------------------- 5 files changed, 33 insertions(+), 110 deletions(-) delete mode 100644 src/Symfony/Component/Cache/Tests/Adapter/PredisTagAwareReplicationAdapterTest.php delete mode 100644 src/Symfony/Component/Cache/Tests/Adapter/RedisReplicationAdapterTest.php diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index 5c2839d74f818..9ea7e0992d939 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -82,16 +82,25 @@ jobs: REDIS_MASTER_SET: redis_sentinel REDIS_SENTINEL_QUORUM: 1 redis-primary: - image: redis:latest - hostname: redis-primary + image: bitnami/redis:latest ports: - 16381:6379 - + env: + ALLOW_EMPTY_PASSWORD: "yes" + REDIS_REPLICATION_MODE: "master" + options: >- + --name=redis-primary redis-replica: - image: redis:latest + image: bitnami/redis:latest ports: - 16382:6379 - command: redis-server --slaveof redis-primary 6379 + env: + ALLOW_EMPTY_PASSWORD: "yes" + REDIS_REPLICATION_MODE: "slave" + REDIS_MASTER_HOST: redis-primary + REDIS_MASTER_PORT_NUMBER: "6379" + options: >- + --name=redis-replica memcached: image: memcached:1.6.5 ports: @@ -250,7 +259,7 @@ jobs: REDIS_CLUSTER_HOSTS: 'localhost:7000 localhost:7001 localhost:7002 localhost:7003 localhost:7004 localhost:7005' REDIS_SENTINEL_HOSTS: 'unreachable-host:26379 localhost:26379 localhost:26379' REDIS_SENTINEL_SERVICE: redis_sentinel - REDIS_REPLICATION_HOSTS: 'localhost:16381 localhost:16382' + REDIS_REPLICATION_HOSTS: 'localhost:16382 localhost:16381' MESSENGER_REDIS_DSN: redis://127.0.0.1:7006/messages MESSENGER_AMQP_DSN: amqp://localhost/%2f/messages MESSENGER_SQS_DSN: "sqs://localhost:4566/messages?sslmode=disable&poll_timeout=0.01" diff --git a/src/Symfony/Component/Cache/Tests/Adapter/PredisRedisReplicationAdapterTest.php b/src/Symfony/Component/Cache/Tests/Adapter/PredisRedisReplicationAdapterTest.php index 552727740c18b..cda92af8c7a6c 100644 --- a/src/Symfony/Component/Cache/Tests/Adapter/PredisRedisReplicationAdapterTest.php +++ b/src/Symfony/Component/Cache/Tests/Adapter/PredisRedisReplicationAdapterTest.php @@ -24,6 +24,6 @@ public static function setUpBeforeClass(): void self::markTestSkipped('REDIS_REPLICATION_HOSTS env var is not defined.'); } - self::$redis = RedisAdapter::createConnection('redis:?host['.str_replace(' ', ']&host[', $hosts).'][alias]=master', ['class' => \Predis\Client::class, 'prefix' => 'prefix_']); + self::$redis = RedisAdapter::createConnection('redis:?host['.str_replace(' ', ']&host[', $hosts).'][role]=master', ['replication' => 'predis', 'class' => \Predis\Client::class, 'prefix' => 'prefix_']); } } diff --git a/src/Symfony/Component/Cache/Tests/Adapter/PredisReplicationAdapterTest.php b/src/Symfony/Component/Cache/Tests/Adapter/PredisReplicationAdapterTest.php index 4add9d5f18c4a..28af1b5b4e27e 100644 --- a/src/Symfony/Component/Cache/Tests/Adapter/PredisReplicationAdapterTest.php +++ b/src/Symfony/Component/Cache/Tests/Adapter/PredisReplicationAdapterTest.php @@ -19,6 +19,22 @@ class PredisReplicationAdapterTest extends AbstractRedisAdapterTestCase public static function setUpBeforeClass(): void { parent::setUpBeforeClass(); - self::$redis = new \Predis\Client(array_combine(['host', 'port'], explode(':', getenv('REDIS_HOST')) + [1 => 6379]), ['prefix' => 'prefix_']); + + if (!$hosts = getenv('REDIS_REPLICATION_HOSTS')) { + self::markTestSkipped('REDIS_REPLICATION_HOSTS env var is not defined.'); + } + + $hosts = explode(' ', getenv('REDIS_REPLICATION_HOSTS')); + $lastArrayKey = array_key_last($hosts); + $hostTable = []; + foreach($hosts as $key => $host) { + $hostInformation = array_combine(['host', 'port'], explode(':', $host)); + if($lastArrayKey === $key) { + $hostInformation['role'] = 'master'; + } + $hostTable[] = $hostInformation; + } + + self::$redis = new \Predis\Client($hostTable, ['replication' => 'predis', 'prefix' => 'prefix_']); } } diff --git a/src/Symfony/Component/Cache/Tests/Adapter/PredisTagAwareReplicationAdapterTest.php b/src/Symfony/Component/Cache/Tests/Adapter/PredisTagAwareReplicationAdapterTest.php deleted file mode 100644 index 4d8651ce4ceb6..0000000000000 --- a/src/Symfony/Component/Cache/Tests/Adapter/PredisTagAwareReplicationAdapterTest.php +++ /dev/null @@ -1,37 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Cache\Tests\Adapter; - -use Psr\Cache\CacheItemPoolInterface; -use Symfony\Component\Cache\Adapter\RedisTagAwareAdapter; - -/** - * @group integration - */ -class PredisTagAwareReplicationAdapterTest extends PredisReplicationAdapterTest -{ - use TagAwareTestTrait; - - protected function setUp(): void - { - parent::setUp(); - $this->skippedTests['testTagItemExpiry'] = 'Testing expiration slows down the test suite'; - } - - public function createCachePool(int $defaultLifetime = 0, ?string $testMethod = null): CacheItemPoolInterface - { - $this->assertInstanceOf(\Predis\Client::class, self::$redis); - $adapter = new RedisTagAwareAdapter(self::$redis, str_replace('\\', '.', __CLASS__), $defaultLifetime); - - return $adapter; - } -} diff --git a/src/Symfony/Component/Cache/Tests/Adapter/RedisReplicationAdapterTest.php b/src/Symfony/Component/Cache/Tests/Adapter/RedisReplicationAdapterTest.php deleted file mode 100644 index e41745057f141..0000000000000 --- a/src/Symfony/Component/Cache/Tests/Adapter/RedisReplicationAdapterTest.php +++ /dev/null @@ -1,65 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Cache\Tests\Adapter; - -use Psr\Cache\CacheItemPoolInterface; -use Symfony\Component\Cache\Adapter\AbstractAdapter; -use Symfony\Component\Cache\Adapter\RedisAdapter; -use Symfony\Component\Cache\Exception\InvalidArgumentException; -use Symfony\Component\Cache\Traits\RedisClusterProxy; - -/** - * @group integration - */ -class RedisReplicationAdapterTest extends AbstractRedisAdapterTestCase -{ - public static function setUpBeforeClass(): void - { - if (!$hosts = getenv('REDIS_REPLICATION_HOSTS')) { - self::markTestSkipped('REDIS_REPLICATION_HOSTS env var is not defined.'); - } - - self::$redis = AbstractAdapter::createConnection('redis:?host['.str_replace(' ', ']&host[', $hosts).'][alias]=master', ['lazy' => true]); - self::$redis->setOption(\Redis::OPT_PREFIX, 'prefix_'); - } - - public function createCachePool(int $defaultLifetime = 0, ?string $testMethod = null): CacheItemPoolInterface - { - if ('testClearWithPrefix' === $testMethod && \defined('Redis::SCAN_PREFIX')) { - self::$redis->setOption(\Redis::OPT_SCAN, \Redis::SCAN_PREFIX); - } - - $this->assertInstanceOf(RedisClusterProxy::class, self::$redis); - $adapter = new RedisAdapter(self::$redis, str_replace('\\', '.', __CLASS__), $defaultLifetime); - - return $adapter; - } - - /** - * @dataProvider provideFailedCreateConnection - */ - public function testFailedCreateConnection(string $dsn) - { - $this->expectException(InvalidArgumentException::class); - $this->expectExceptionMessage('Redis connection '); - RedisAdapter::createConnection($dsn); - } - - public static function provideFailedCreateConnection(): array - { - return [ - ['redis://localhost:1234'], - ['redis://foo@localhost?role=master'], - ['redis://localhost/123?role=master'], - ]; - } -}