8000 [Cache] Fix connecting to Redis via a socket file · symfony/cache@16d89b6 · GitHub
[go: up one dir, main page]

Skip to content

Commit 16d89b6

Browse files
alebedev80nicolas-grekas
authored andcommitted
[Cache] Fix connecting to Redis via a socket file
1 parent 7613787 commit 16d89b6

File tree

7 files changed

+29
-15
lines changed

7 files changed

+29
-15
lines changed

Tests/Adapter/AbstractRedisAdapterTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,9 @@ public static function setUpBeforeClass(): void
3636
throw new SkippedTestSuiteError('Extension redis required.');
3737
}
3838
try {
39-
(new \Redis())->connect(getenv('REDIS_HOST'));
39+
(new \Redis())->connect(...explode(':', getenv('REDIS_HOST')));
4040
} catch (\Exception $e) {
41-
throw new SkippedTestSuiteError($e->getMessage());
41+
throw new SkippedTestSuiteError(getenv('REDIS_HOST').': '.$e->getMessage());
4242
}
4343
}
4444

Tests/Adapter/PredisAdapterTest.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ class PredisAdapterTest extends AbstractRedisAdapterTest
2222
public static function setUpBeforeClass(): void
2323
{
2424
parent::setUpBeforeClass();
25-
self::$redis = new \Predis\Client(['host' => getenv('REDIS_HOST')], ['prefix' => 'prefix_']);
25+
self::$redis = new \Predis\Client(array_combine(['host', 'port'], explode(':', getenv('REDIS_HOST')) + [1 => 6379]), ['prefix' => 'prefix_']);
2626
}
2727

2828
public function testCreateConnection()
@@ -35,10 +35,11 @@ public function testCreateConnection()
3535
$connection = $redis->getConnection();
3636
$this->assertInstanceOf(StreamConnection::class, $connection);
3737

38+
$redisHost = explode(':', $redisHost);
3839
$params = [
3940
'scheme' => 'tcp',
40-
'host' => $redisHost,
41-
'port' => 6379,
41+
'host' => $redisHost[0],
42+
'port' => (int) ($redisHost[1] ?? 6379),
4243
'persistent' => 0,
4344
'timeout' => 3,
4445
'read_write_timeout' => 0,

Tests/Adapter/PredisClusterAdapterTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ class PredisClusterAdapterTest extends AbstractRedisAdapterTest
1919
public static function setUpBeforeClass(): void
2020
{
2121
parent::setUpBeforeClass();
22-
self::$redis = new \Predis\Client([['host' => getenv('REDIS_HOST')]], ['prefix' => 'prefix_']);
22+
self::$redis = new \Predis\Client(array_combine(['host', 'port'], explode(':', getenv('REDIS_HOST')) + [1 => 6379]), ['prefix' => 'prefix_']);
2323
}
2424

2525
public static function tearDownAfterClass(): void

Tests/Adapter/RedisAdapterTest.php

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,30 +40,42 @@ public function createCachePool(int $defaultLifetime = 0, string $testMethod = n
4040
return $adapter;
4141
}
4242

43-
public function testCreateConnection()
43+
public function testCreateHostConnection()
4444
{
4545
$redis = RedisAdapter::createConnection('redis:?host[h1]&host[h2]&host[/foo:]');
4646
$this->assertInstanceOf(\RedisArray::class, $redis);
4747
$this->assertSame(['h1:6379', 'h2:6379', '/foo'], $redis->_hosts());
4848
@$redis = null; // some versions of phpredis connect on destruct, let's silence the warning
4949

50-
$redisHost = getenv('REDIS_HOST');
50+
$this->doTestCreateConnection(getenv('REDIS_HOST'));
51+
}
52+
53+
public function testCreateSocketConnection()
54+
{
55+
if (!getenv('REDIS_SOCKET') || !file_exists(getenv('REDIS_SOCKET'))) {
56+
$this->markTestSkipped('Redis socket not found');
57+
}
58+
59+
$this->doTestCreateConnection(getenv('REDIS_SOCKET'));
60+
}
5161

52-
$redis = RedisAdapter::createConnection('redis://'.$redisHost);
62+
private function doTestCreateConnection(string $uri)
63+
{
64+
$redis = RedisAdapter::createConnection('redis://'.$uri);
5365
$this->assertInstanceOf(\Redis::class, $redis);
5466
$this->assertTrue($redis->isConnected());
5567
$this->assertSame(0, $redis->getDbNum());
5668

57-
$redis = RedisAdapter::createConnection('redis://'.$redisHost.'/2');
69+
$redis = RedisAdapter::createConnection('redis://'.$uri.'/2');
5870
$this->assertSame(2, $redis->getDbNum());
5971

60-
$redis = RedisAdapter::createConnection('redis://'.$redisHost, ['timeout' => 3]);
72+
$redis = RedisAdapter::createConnection('redis://'.$uri, ['timeout' => 3]);
6173
$this->assertEquals(3, $redis->getTimeout());
6274

63-
$redis = RedisAdapter::createConnection('redis://'.$redisHost.'?timeout=4');
75+
$redis = RedisAdapter::createConnection('redis://'.$uri.'?timeout=4');
6476
$this->assertEquals(4, $redis->getTimeout());
6577

66-
$redis = RedisAdapter::createConnection('redis://'.$redisHost, ['read_timeout' => 5]);
78+
$redis = RedisAdapter::createConnection('redis://'.$uri, ['read_timeout' => 5]);
6779
$this->assertEquals(5, $redis->getReadTimeout());
9E88
6880
}
6981

Tests/Simple/AbstractRedisCacheTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public static function setUpBeforeClass(): void
3939
throw new SkippedTestSuiteError('Extension redis required.');
4040
}
4141
try {
42-
(new \Redis())->connect(getenv('REDIS_HOST'));
42+
(new \Redis())->connect(...explode(':', getenv('REDIS_HOST')));
4343
} catch (\Exception $e) {
4444
throw new SkippedTestSuiteError($e->getMessage());
4545
}

Traits/RedisTrait.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ public static function createConnection($dsn, array $options = [])
185185

186186
$initializer = static function ($redis) use ($connect, $params, $dsn, $auth, $hosts, $tls) {
187187
$host = $hosts[0]['host'] ?? $hosts[0]['path'];
188-
$port = $hosts[0]['port'] ?? 6379;
188+
$port = $hosts[0]['port'] ?? 0;
189189

190190
if (isset($hosts[0]['host']) && $tls) {
191191
$host = 'tls://'.$host;

phpunit.xml.dist

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
<php>
1212
<ini name="error_reporting" value="-1" />
1313
<env name="REDIS_HOST" value="localhost" />
14+
<env name="REDIS_SOCKET" value="/var/run/redis/redis-server.sock" />
1415
<env name="MEMCACHED_HOST" value="localhost" />
1516
</php>
1617

0 commit comments

Comments
 (0)
0