Skip to content
Snippets Groups Projects
Commit acbd7c7e authored by David Prévot's avatar David Prévot
Browse files

New upstream version 3.0.1

parents ada9e094 34fb0a7d
No related branches found
No related tags found
No related merge requests found
Pipeline #867893 failed
Showing
with 198 additions and 38 deletions
......@@ -12,6 +12,8 @@ services:
retries: 3
ports:
- "6379:6379"
command:
- --requirepass "foobar"
profiles:
- all
- official
......@@ -23,9 +25,10 @@ services:
environment:
- TLS_ENABLED=yes
- REDIS_CLUSTER=no
- REDIS_PASSWORD=foobar
- PORT=6379
- TLS_PORT=6666
command: ${REDIS_EXTRA_ARGS:---enable-debug-command yes --enable-module-command yes --tls-auth-clients optional --save ""}
command: ${REDIS_EXTRA_ARGS:---enable-debug-command yes --enable-module-command yes --tls-auth-clients optional --save "" --requirepass "foobar"}
ports:
- 6379:6379
- 6666:6666 # TLS port
......@@ -36,19 +39,38 @@ services:
- clients
- standalone
redis-unprotected:
image: ${REDIS_IMAGE_NAME:-redislabs/client-libs-test:7.4.2}
container_name: redis-unprotected
environment:
- TLS_ENABLED=no
- REDIS_CLUSTER=no
- PORT=6379
- TLS_PORT=6666
command: ${REDIS_EXTRA_ARGS:---enable-debug-command yes --enable-module-command yes --tls-auth-clients optional --save ""}
ports:
- 6380:6379
volumes:
- "./dockers/unprotected:/redis/work"
profiles:
- all
- clients
- unprotected
redis-cluster:
image: ${REDIS_IMAGE_NAME:-redislabs/client-libs-test:7.4.2}
container_name: redis-cluster
environment:
- REDIS_CLUSTER=yes
- REDIS_PASSWORD=foobar
- NODES=6
- REPLICAS=1
- TLS_ENABLED=yes
- PORT=16379
- PORT=6372
- TLS_PORT=27379
command: ${REDIS_EXTRA_ARGS:---enable-debug-command yes --enable-module-command yes --tls-auth-clients optional --save ""}
command: ${REDIS_EXTRA_ARGS:---enable-debug-command yes --enable-module-command yes --tls-auth-clients optional --save "" --requirepass "foobar"}
ports:
- "6372-6377:16379-16384"
- "6372-6377:6372-6377"
volumes:
- "./dockers/cluster:/redis/work"
profiles:
......@@ -63,8 +85,9 @@ services:
- "6479:6379"
environment:
- REDIS_CLUSTER=no
- REDIS_PASSWORD=foobar
- PORT=6379
command: ${REDIS_EXTRA_ARGS:---enable-debug-command yes --enable-module-command yes --save ""}
command: ${REDIS_EXTRA_ARGS:---enable-debug-command yes --enable-module-command yes --save "" --requirepass "foobar"}
volumes:
- "./dockers/redis-stack:/redis/work"
profiles:
......
......@@ -38,7 +38,7 @@ jobs:
run: |
# Mapping of original redis versions to client test containers
declare -A redis_clients_version_mapping=(
["8.0"]="8.0-RC2-pre"
["8.0"]="8.0.1-pre"
["7.4"]="7.4.2"
["7.2"]="7.2.7"
)
......@@ -78,6 +78,13 @@ jobs:
compose-file: .github/docker-compose.yml
services: ${{ env.DOCKER_SERVICE }}
- name: Start Redis unprotected image
uses: hoverkraft-tech/compose-action@v2.0.1
if: ${{ matrix.redis > '4.0' }}
with:
compose-file: .github/docker-compose.yml
services: redis-unprotected
- name: Start Redis stack image
id: stack_infra
uses: hoverkraft-tech/compose-action@v2.0.1
......@@ -123,6 +130,14 @@ jobs:
if: ${{ matrix.php == '8.4' && matrix.redis == '7.4' }}
run: vendor/bin/phpunit -c phpunit.relay.xml --coverage-php build/cov/coverage-relay.cov --coverage-filter ./src
- name: Run tests against unprotected Redis
if: ${{ (matrix.php != '8.4' || matrix.redis != '7.4') && matrix.redis > '4.0'}}
run: vendor/bin/phpunit --group unprotected
- name: Run tests against unprotected Redis with coverage
if: ${{ matrix.php == '8.4' && matrix.redis == '7.4' }}
run: vendor/bin/phpunit --group unprotected --coverage-php build/cov/coverage-unprotected.cov --coverage-filter ./src
- name: Run stack tests
if: ${{ (matrix.php != '8.4' || matrix.redis != '7.4') && matrix.redis >= '7.2' }}
run: vendor/bin/phpunit --group realm-stack
......@@ -156,11 +171,13 @@ jobs:
- name: Run tests against cluster using Relay
if: ${{ matrix.php != '8.4' && matrix.redis == '7.4' }}
run: |
sleep 5
vendor/bin/phpunit -c phpunit.relay.xml --group cluster
- name: Run tests against cluster using Relay with coverage
if: ${{ matrix.php == '8.4' && matrix.redis == '7.4' }}
run: |
sleep 5
vendor/bin/phpunit -c phpunit.relay.xml --group cluster --coverage-php build/cov/coverage-cluster-relay.cov --coverage-filter ./src
- name: Merge coverage reports
......
## Changelog
## v3.0.1 (2025-05-16)
### Fixed
- Send `default` user if only password is used for authentication (#1535)
## v3.0.0 (2025-05-02)
### Added
- ⚠️ Added support for transactions for clustered connections (#1497)
......@@ -24,6 +29,9 @@
### Fixed
- Fixed single persistent connection using the same resource (#1512)
### Maintenance
- Revisit incompatible tests against Relay (#1537)
## v2.4.0 (2025-04-30)
### Added
- Added new hash-field expiration commands (#1520)
......
3.0.0
\ No newline at end of file
3.0.1
\ No newline at end of file
......@@ -29,6 +29,7 @@
<group>ext-curl</group>
<group>cluster</group>
<group>gears</group>
<group>unprotected</group>
</exclude>
</groups>
......@@ -41,12 +42,17 @@
<php>
<const name="REDIS_SERVER_HOST" value="127.0.0.1" />
<const name="REDIS_SERVER_PORT" value="6379" />
<const name="REDIS_UNPROTECTED_SERVER_PORT" value="6380" />
<const name="REDIS_SERVER_DBNUM" value="0" />
<const name="REDIS_PASSWORD" value="foobar" />
<env name="USE_RELAY" value="true" />
<env name="REDIS_STACK_SERVER_PORT" value="6479" />
<!-- Redis Cluster -->
<!-- Only master nodes endpoints included -->
<const name="REDIS_CLUSTER_ENDPOINTS" value="127.0.0.1:6372,127.0.0.1:6373,127.0.0.1:6374" />
<const
name="REDIS_CLUSTER_ENDPOINTS"
value="127.0.0.1:6372?password=foobar,127.0.0.1:6373?password=foobar,127.0.0.1:6374?password=foobar"
/>
</php>
</phpunit>
......@@ -29,6 +29,7 @@
<group>cluster</group>
<group>gears</group>
<group>gears-cluster</group>
<group>unprotected</group>
<!-- <group>connected</group> -->
<!-- <group>disconnected</group> -->
<!-- <group>commands</group> -->
......@@ -45,12 +46,17 @@
<php>
<const name="REDIS_SERVER_HOST" value="127.0.0.1" />
<const name="REDIS_SERVER_PORT" value="6379" />
<const name="REDIS_UNPROTECTED_SERVER_PORT" value="6380" />
<const name="REDIS_SERVER_DBNUM" value="0" />
<const name="REDIS_PASSWORD" value="foobar" />
<env name="USE_RELAY" value="false" />
<env name="REDIS_STACK_SERVER_PORT" value="6479" />
<!-- Redis Cluster -->
<!-- Only master nodes endpoints included -->
<const name="REDIS_CLUSTER_ENDPOINTS" value="127.0.0.1:6372,127.0.0.1:6373,127.0.0.1:6374" />
<const
name="REDIS_CLUSTER_ENDPOINTS"
value="127.0.0.1:6372?password=foobar,127.0.0.1:6373?password=foobar,127.0.0.1:6374?password=foobar"
/>
</php>
</phpunit>
......@@ -54,7 +54,7 @@ use Traversable;
*/
class Client implements ClientInterface, IteratorAggregate
{
public const VERSION = '3.0.0';
public const VERSION = '3.0.1';
/** @var OptionsInterface */
private $options;
......
......@@ -17,8 +17,10 @@ use Predis\Response\Status;
/**
* @method array cat(string $category = null)
* @method Status dryRun(string $username, string $command, ...$arguments)
* @method int delUser(string ...$username)
* @method array getUser(string $username)
* @method Status setUser(string $username, string ...$rules)
* @method string whoami()
*/
class ACL extends AbstractContainer
{
......
......@@ -164,13 +164,14 @@ class Factory implements FactoryInterface
{
$parameters = $connection->getParameters();
if (isset($parameters->password) && strlen($parameters->password)) {
if (!empty($parameters->password)) {
$cmdAuthArgs = [$parameters->protocol, 'AUTH'];
isset($parameters->username) && strlen($parameters->username)
? array_push($cmdAuthArgs, $parameters->username, $parameters->password)
: $cmdAuthArgs[] = $parameters->password;
if (empty($parameters->username)) {
$parameters->username = 'default';
}
array_push($cmdAuthArgs, $parameters->username, $parameters->password);
array_push($cmdAuthArgs, 'SETNAME', 'predis');
$connection->addConnectCommand(
......
......@@ -316,9 +316,13 @@ class StreamConnection extends AbstractConnection
if (in_array('AUTH', $failedCommand->getArguments(), true)) {
$parameters = $this->getParameters();
$auth = new RawCommand('AUTH', [$parameters->username, $parameters->password]);
// If Redis <= 6.0
$auth = new RawCommand('AUTH', [$parameters->password]);
$response = $this->executeCommand($auth);
$this->handleOnConnectResponse($response, $auth);
if ($response instanceof ErrorResponseInterface) {
$this->onConnectionError("Failed: {$response->getMessage()}");
}
}
$setName = new RawCommand('CLIENT', ['SETNAME', 'predis']);
......
......@@ -14,6 +14,7 @@ namespace Predis\Connection;
use PHPUnit\Framework\MockObject\MockObject;
use Predis\Command\CommandInterface;
use Predis\Command\RawCommand;
use PredisTestCase;
/**
......@@ -156,7 +157,6 @@ abstract class PredisConnectionTestCase extends PredisTestCase
/**
* @group connected
* @group relay-incompatible
*/
public function testDisconnectForcesDisconnection(): void
{
......@@ -183,7 +183,6 @@ abstract class PredisConnectionTestCase extends PredisTestCase
/**
* @group connected
* @group relay-incompatible
*/
public function testGetResourceForcesConnection(): void
{
......@@ -265,7 +264,6 @@ abstract class PredisConnectionTestCase extends PredisTestCase
/**
* @group connected
* @group relay-incompatible
*/
public function testWritesCommandToServer(): void
{
......@@ -287,7 +285,6 @@ abstract class PredisConnectionTestCase extends PredisTestCase
/**
* @group connected
* @group relay-incompatible
*/
public function testReadsCommandFromServer(): void
{
......@@ -310,7 +307,6 @@ abstract class PredisConnectionTestCase extends PredisTestCase
/**
* @group connected
* @group relay-incompatible
*/
public function testIsAbleToWriteMultipleCommandsAndReadThemBackForPipelining(): void
{
......@@ -377,7 +373,6 @@ abstract class PredisConnectionTestCase extends PredisTestCase
/**
* @group connected
* @group relay-incompatible
*/
public function testReadsStatusResponses(): void
{
......@@ -398,7 +393,6 @@ abstract class PredisConnectionTestCase extends PredisTestCase
/**
* @group connected
* @group relay-incompatible
*/
public function testReadsBulkResponses(): void
{
......@@ -416,7 +410,6 @@ abstract class PredisConnectionTestCase extends PredisTestCase
/**
* @group connected
* @group relay-incompatible
*/
public function testReadsIntegerResponses(): void
{
......@@ -431,7 +424,6 @@ abstract class PredisConnectionTestCase extends PredisTestCase
/**
* @group connected
* @group relay-incompatible
*/
public function testReadsErrorResponsesAsResponseErrorObjects(): void
{
......@@ -449,7 +441,6 @@ abstract class PredisConnectionTestCase extends PredisTestCase
/**
* @group connected
* @group relay-incompatible
*/
public function testReadsMultibulkResponsesAsArrays(): void
{
......@@ -502,6 +493,7 @@ abstract class PredisConnectionTestCase extends PredisTestCase
'host' => constant('REDIS_SERVER_HOST'),
'port' => constant('REDIS_SERVER_PORT'),
'database' => constant('REDIS_SERVER_DBNUM'),
'password' => getenv('REDIS_PASSWORD') ?: constant('REDIS_PASSWORD'),
'read_write_timeout' => 2,
];
}
......@@ -539,9 +531,9 @@ abstract class PredisConnectionTestCase extends PredisTestCase
*
* @return NodeConnectionInterface
*/
protected function createConnection(bool $initialize = false): NodeConnectionInterface
protected function createConnection(bool $initialize = false, bool $noAuth = false): NodeConnectionInterface
{
return $this->createConnectionWithParams([], $initialize);
return $this->createConnectionWithParams([], $initialize, $noAuth);
}
/**
......@@ -552,8 +544,11 @@ abstract class PredisConnectionTestCase extends PredisTestCase
*
* @return NodeConnectionInterface
*/
protected function createConnectionWithParams($parameters, $initialize = false): NodeConnectionInterface
{
protected function createConnectionWithParams(
$parameters,
$initialize = false,
bool $noAuth = false
): NodeConnectionInterface {
$class = $this->getConnectionClass();
$commands = $this->getCommandFactory();
......@@ -563,6 +558,21 @@ abstract class PredisConnectionTestCase extends PredisTestCase
$connection = new $class($parameters);
if (!$noAuth) {
if (isset($parameters->password) && strlen($parameters->password)) {
if (!isset($parameters->username) || !strlen($parameters->username)) {
$parameters->username = 'default';
}
$connection->addConnectCommand(
new RawCommand(
'HELLO',
[$parameters->protocol, 'AUTH', $parameters->username, $parameters->password]
)
);
}
}
if ($initialize) {
$connection->addConnectCommand(
$commands->create('select', [$parameters->database])
......
......@@ -172,11 +172,23 @@ abstract class PredisTestCase extends PHPUnit\Framework\TestCase
return $this->prepareClusterEndpoints();
}
$password = getenv('REDIS_PASSWORD') ?: constant('REDIS_PASSWORD');
if ($this->isStackTest()) {
$port = getenv('REDIS_STACK_SERVER_PORT');
} elseif ($this->isUnprotectedTest()) {
$port = constant('REDIS_UNPROTECTED_SERVER_PORT');
$password = '';
} else {
$port = constant('REDIS_SERVER_PORT');
}
return [
'scheme' => 'tcp',
'host' => constant('REDIS_SERVER_HOST'),
'port' => ($this->isStackTest()) ? getenv('REDIS_STACK_SERVER_PORT') : constant('REDIS_SERVER_PORT'),
'port' => $port,
'database' => constant('REDIS_SERVER_DBNUM'),
'password' => $password,
];
}
......@@ -604,6 +616,22 @@ abstract class PredisTestCase extends PHPUnit\Framework\TestCase
&& in_array('realm-stack', $annotations['class']['group'], true);
}
/**
* Check annotations if it's matches to unprotected test scenario.
*
* @return bool
*/
protected function isUnprotectedTest(): bool
{
$annotations = TestUtil::parseTestMethodAnnotations(
get_class($this),
$this->getName(false)
);
return isset($annotations['method']['group'])
&& in_array('unprotected', $annotations['method']['group'], true);
}
/**
* Parse comma-separated cluster endpoints and convert them into tcp strings.
*
......
......@@ -1380,6 +1380,46 @@ class ClientTest extends PredisTestCase
$this->assertSame('value', $client->get('key'));
}
/**
* @group connected
* @group unprotected
* @requiresRedisVersion >= 2.0.0
* @return void
*/
public function testClientAuthenticationAgainstUnprotectedServer(): void
{
$client = new Client($this->getParameters());
$this->assertEquals('OK', $client->set('key', 'value'));
$this->assertSame('value', $client->get('key'));
// AUTH doesn't throw exception if no authentication requires.
$clientWithPassword = new Client($this->getParameters(
['password' => getenv('REDIS_PASSWORD') ?: constant('REDIS_PASSWORD')])
);
$this->assertEquals('OK', $clientWithPassword->set('key', 'value'));
$this->assertSame('value', $clientWithPassword->get('key'));
$this->assertEquals(
'OK',
$client->acl->setUser(
'test_user',
'on',
'>foobar',
'allcommands',
'allkeys'
)
);
$clientTestUser = new Client($this->getParameters(
['username' => 'test_user', 'password' => 'foobar'])
);
$this->assertEquals('test_user', $clientTestUser->acl->whoami());
$this->assertEquals('OK', $clientTestUser->set('key', 'value'));
$this->assertSame('value', $clientTestUser->get('key'));
$this->assertEquals(1, $clientTestUser->acl->delUser('test_user'));
}
// ******************************************************************** //
// ---- HELPER METHODS ------------------------------------------------ //
// ******************************************************************** //
......
......@@ -90,7 +90,6 @@ class BFADD_Test extends PredisCommandTestCase
/**
* @group connected
* @group relay-incompatible
* @requiresRedisBfVersion >= 1.0.0
*/
public function testThrowsExceptionOnWrongType(): void
......
......@@ -90,7 +90,6 @@ class BFMADD_Test extends PredisCommandTestCase
/**
* @group connected
* @group relay-incompatible
* @requiresRedisBfVersion >= 1.0.0
*/
public function testThrowsExceptionOnWrongType(): void
......
......@@ -104,7 +104,6 @@ class CFRESERVE_Test extends PredisCommandTestCase
/**
* @group connected
* @group relay-incompatible
* @requiresRedisBfVersion >= 1.0.0
*/
public function testThrowsExceptionOnWrongType(): void
......
......@@ -96,7 +96,6 @@ class CFSCANDUMP_Test extends PredisCommandTestCase
/**
* @group connected
* @group relay-incompatible
* @requiresRedisBfVersion >= 1.0.0
*/
public function testThrowsExceptionOnWrongType(): void
......
......@@ -18,7 +18,6 @@ use Predis\Consumer\Push\PushResponse;
/**
* @group commands
* @group realm-pubsub
* @group relay-incompatible
*/
class PSUBSCRIBE_Test extends PredisCommandTestCase
{
......@@ -40,6 +39,7 @@ class PSUBSCRIBE_Test extends PredisCommandTestCase
/**
* @group disconnected
* @group relay-incompatible
*/
public function testFilterArguments(): void
{
......@@ -98,6 +98,7 @@ class PSUBSCRIBE_Test extends PredisCommandTestCase
/**
* @group connected
* @group relay-incompatible
* @requiresRedisVersion >= 2.0.0
*/
public function testReturnsTheFirstPsubscribedChannelDetails(): void
......@@ -109,6 +110,7 @@ class PSUBSCRIBE_Test extends PredisCommandTestCase
/**
* @group connected
* @group relay-incompatible
* @requiresRedisVersion >= 6.0.0
*/
public function testReturnsTheFirstPsubscribedChannelDetailsResp3(): void
......@@ -121,6 +123,7 @@ class PSUBSCRIBE_Test extends PredisCommandTestCase
/**
* @group connected
* @group relay-incompatible
* @requiresRedisVersion >= 2.0.0
*/
public function testCanSendPsubscribeAfterPsubscribe(): void
......@@ -133,6 +136,7 @@ class PSUBSCRIBE_Test extends PredisCommandTestCase
/**
* @group connected
* @group relay-incompatible
* @requiresRedisVersion >= 2.0.0
*/
public function testCanSendSubscribeAfterPsubscribe(): void
......@@ -145,6 +149,7 @@ class PSUBSCRIBE_Test extends PredisCommandTestCase
/**
* @group connected
* @group relay-incompatible
* @requiresRedisVersion >= 2.0.0
*/
public function testCanSendUnsubscribeAfterPsubscribe(): void
......@@ -158,6 +163,7 @@ class PSUBSCRIBE_Test extends PredisCommandTestCase
/**
* @group connected
* @group relay-incompatible
* @requiresRedisVersion >= 2.0.0
*/
public function testCanSendPunsubscribeAfterPsubscribe(): void
......@@ -171,6 +177,7 @@ class PSUBSCRIBE_Test extends PredisCommandTestCase
/**
* @group connected
* @group relay-incompatible
* @requiresRedisVersion >= 2.0.0
*/
public function testCanSendQuitAfterPsubscribe(): void
......@@ -184,6 +191,7 @@ class PSUBSCRIBE_Test extends PredisCommandTestCase
/**
* @group connected
* @group relay-incompatible
* @requiresRedisVersion >= 2.0.0
*/
public function testCannotSendOtherCommandsAfterPsubscribe(): void
......
......@@ -18,7 +18,6 @@ use Predis\Consumer\Push\PushResponse;
/**
* @group commands
* @group realm-pubsub
* @group relay-incompatible
*/
class PUNSUBSCRIBE_Test extends PredisCommandTestCase
{
......@@ -98,6 +97,7 @@ class PUNSUBSCRIBE_Test extends PredisCommandTestCase
/**
* @group connected
* @group relay-incompatible
* @requiresRedisVersion >= 2.0.0
*/
public function testDoesNotSwitchToSubscribeMode(): void
......@@ -110,6 +110,7 @@ class PUNSUBSCRIBE_Test extends PredisCommandTestCase
/**
* @group connected
* @group relay-incompatible
* @requiresRedisVersion >= 6.0.0
*/
public function testDoesNotSwitchToSubscribeModeResp3(): void
......@@ -123,6 +124,7 @@ class PUNSUBSCRIBE_Test extends PredisCommandTestCase
/**
* @group connected
* @group relay-incompatible
* @requiresRedisVersion >= 2.0.0
*/
public function testUnsubscribesFromNotSubscribedChannels(): void
......@@ -134,6 +136,7 @@ class PUNSUBSCRIBE_Test extends PredisCommandTestCase
/**
* @group connected
* @group relay-incompatible
* @requiresRedisVersion >= 2.0.0
*/
public function testUnsubscribesFromSubscribedChannels(): void
......@@ -147,6 +150,7 @@ class PUNSUBSCRIBE_Test extends PredisCommandTestCase
/**
* @group connected
* @group relay-incompatible
* @requiresRedisVersion >= 2.6.0
*/
public function testUnsubscribesFromAllSubscribedChannels(): void
......
......@@ -18,7 +18,6 @@ use Predis\Consumer\Push\PushResponse;
/**
* @group commands
* @group realm-pubsub
* @group relay-incompatible
*/
class SUBSCRIBE_Test extends PredisCommandTestCase
{
......@@ -98,6 +97,7 @@ class SUBSCRIBE_Test extends PredisCommandTestCase
/**
* @group connected
* @group relay-incompatible
* @requiresRedisVersion >= 2.0.0
*/
public function testReturnsTheFirstSubscribedChannelDetails(): void
......@@ -109,6 +109,7 @@ class SUBSCRIBE_Test extends PredisCommandTestCase
/**
* @group connected
* @group relay-incompatible
* @requiresRedisVersion >= 6.0.0
*/
public function testReturnsTheFirstSubscribedChannelDetailsResp3(): void
......@@ -121,6 +122,7 @@ class SUBSCRIBE_Test extends PredisCommandTestCase
/**
* @group connected
* @group relay-incompatible
* @requiresRedisVersion >= 2.0.0
*/
public function testCanSendSubscribeAfterSubscribe(): void
......@@ -133,6 +135,7 @@ class SUBSCRIBE_Test extends PredisCommandTestCase
/**
* @group connected
* @group relay-incompatible
* @requiresRedisVersion >= 2.0.0
*/
public function testCanSendPsubscribeAfterSubscribe(): void
......@@ -145,6 +148,7 @@ class SUBSCRIBE_Test extends PredisCommandTestCase
/**
* @group connected
* @group relay-incompatible
* @requiresRedisVersion >= 2.0.0
*/
public function testCanSendUnsubscribeAfterSubscribe(): void
......@@ -158,6 +162,7 @@ class SUBSCRIBE_Test extends PredisCommandTestCase
/**
* @group connected
* @group relay-incompatible
* @requiresRedisVersion >= 2.0.0
*/
public function testCanSendPunsubscribeAfterSubscribe(): void
......@@ -171,6 +176,7 @@ class SUBSCRIBE_Test extends PredisCommandTestCase
/**
* @group connected
* @group relay-incompatible
* @requiresRedisVersion >= 2.0.0
*/
public function testCanSendQuitAfterSubscribe(): void
......@@ -184,6 +190,7 @@ class SUBSCRIBE_Test extends PredisCommandTestCase
/**
* @group connected
* @group relay-incompatible
* @requiresRedisVersion >= 2.0.0
*/
public function testCannotSendOtherCommandsAfterSubscribe(): void
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment