mirror of
https://github.com/predis/predis.git
synced 2026-08-24 21:59:38 +00:00
9318232e8d
* Changed command arguments (#1330) * Re-implement CLIENT command as container command (#1337) * Resolve merge conflicts * Merge 2.x into main (#1341) * Codestyle changes related to php-cs-fixer update (#1311) * Codestyle changes * Added missing type-hints * Added GETDEL command to KeyPrefixProcessor (#1306) * Added GETDEL command to KeyPrefixProcessor * Added test coverage * Codestyle fixes * Added timeout after FT.CREATE call * Added support for JSON.MERGE command (#1304) * Added support for JSON.MSET command (#1307) * Fixed subcommand test bug (#1313) * Update CHANGELOG.md * Update CHANGELOG.md * Fixed bug with incorrect multiple words processing (#1325) * Fixed bug with incorrect multiple words processing * Convert subcommand string to lower case * Update SubcommandStrategyResolver.php * Added test coverage * Codestyle fixes --------- Co-authored-by: Till Krüss <tillkruss@users.noreply.github.com> * Added support for FUNCTION DUMP, FUNCTION FLUSH, FUNCTION RESTORE commands (#1332) * Added support for CLIENT NO-EVICT command (#1335) * Added support for FUNCTION KILL, FUNCTION LIST, FUNCTION STATS commands (#1334) * Added support for FUNCTION KILL, FUNCTION LIST, FUNCTION STATS commands * Marked tests as relay-incompatible * Added support for tests running against redis cluster (#1236) * Added support for tests running against redis cluster * Test coverage * Added comment about master nodes * Codestyle fix * Revert changes * Revert DBNUM * Added cluster endpoints to relay tests env configuration * Exclude cluster tests from relay tests environment * Removed TODO comment * Changed cluster image version to unstable * Updated configuration to match unstable cluster * Fixed path * Updated cluster CI configuration * Removed redundant flag * Removed backslash * Updated file path * Updated file path variable * Added docker cluster initialization as additional step * Run cluster tests as separate workflow * Codestyle fixes * Updated exported files * Added additional timeout so cluster image could be settled * Added support for different cluster image, use docker compose for cluster tests CI * Remove unused flag * Removed variable from volume path * Added sleep timeout to allow docker setup after running * Added timeout before tests run * Updated linter settings * Include indent changes for.sh files * Added missing coverage * Revert expected files and mark docker folder as exclusion * Specify folder itself as excluded * Moved cluster tests as separate job in tests.yml * Updated name to contain cluster word --------- Co-authored-by: Chayim <chayim@users.noreply.github.com> --------- Co-authored-by: Till Krüss <tillkruss@users.noreply.github.com> Co-authored-by: Chayim <chayim@users.noreply.github.com> --------- Co-authored-by: Till Krüss <tillkruss@users.noreply.github.com> Co-authored-by: Chayim <chayim@users.noreply.github.com>
154 lines
4.0 KiB
PHP
154 lines
4.0 KiB
PHP
<?php
|
|
|
|
/*
|
|
* This file is part of the Predis package.
|
|
*
|
|
* (c) 2009-2020 Daniele Alessandri
|
|
* (c) 2021-2023 Till Krüss
|
|
*
|
|
* For the full copyright and license information, please view the LICENSE
|
|
* file that was distributed with this source code.
|
|
*/
|
|
|
|
namespace Predis\Command\Redis;
|
|
|
|
use Predis\Client;
|
|
use Predis\Command;
|
|
use Predis\Command\CommandInterface;
|
|
use PredisTestCase;
|
|
|
|
abstract class PredisCommandTestCase extends PredisTestCase
|
|
{
|
|
/**
|
|
* Returns the expected command for tests.
|
|
*
|
|
* @return Command\CommandInterface|string Instance or FQCN of the expected command
|
|
*/
|
|
abstract protected function getExpectedCommand(): string;
|
|
|
|
/**
|
|
* Returns the expected command ID for tests.
|
|
*
|
|
* @return string
|
|
*/
|
|
abstract protected function getExpectedId(): string;
|
|
|
|
/**
|
|
* Returns a new command instance.
|
|
*
|
|
* @return Command\CommandInterface
|
|
*/
|
|
public function getCommand(): Command\CommandInterface
|
|
{
|
|
$command = $this->getExpectedCommand();
|
|
|
|
return $command instanceof Command\CommandInterface ? $command : new $command();
|
|
}
|
|
|
|
/**
|
|
* Returns a new client instance.
|
|
*
|
|
* @param bool $flushdb Flush selected database before returning the client
|
|
* @return Client
|
|
*/
|
|
public function getClient(bool $flushdb = true): Client
|
|
{
|
|
$commands = $this->getCommandFactory();
|
|
|
|
if (!$commands->supports($id = $this->getExpectedId())) {
|
|
$this->markTestSkipped(
|
|
"The current command factory does not support command $id"
|
|
);
|
|
}
|
|
|
|
if ($this->isClusterTest()) {
|
|
$client = $this->createClient(null, ['cluster' => 'redis'], $flushdb);
|
|
} else {
|
|
$client = $this->createClient(null, null, $flushdb);
|
|
}
|
|
|
|
return $client;
|
|
}
|
|
|
|
/**
|
|
* Returns a new RESP3 client instance.
|
|
*
|
|
* @param bool $flushDb
|
|
* @return Client
|
|
*/
|
|
public function getResp3Client(bool $flushDb = true): Client
|
|
{
|
|
$commands = $this->getCommandFactory();
|
|
|
|
if (!$commands->supports($id = $this->getExpectedId())) {
|
|
$this->markTestSkipped(
|
|
"The current command factory does not support command $id"
|
|
);
|
|
}
|
|
|
|
return $this->createClient(['protocol' => 3], null, $flushDb);
|
|
}
|
|
|
|
/**
|
|
* Verifies if the command implements the prefixable interface.
|
|
*
|
|
* @return bool
|
|
*/
|
|
protected function isPrefixable(): bool
|
|
{
|
|
return $this->getCommand() instanceof Command\PrefixableCommandInterface;
|
|
}
|
|
|
|
/**
|
|
* Returns a new command instance with the specified arguments.
|
|
*
|
|
* @param mixed ...$arguments List of arguments for the command
|
|
*
|
|
* @return CommandInterface
|
|
*/
|
|
protected function getCommandWithArguments(...$arguments): CommandInterface
|
|
{
|
|
return $this->getCommandWithArgumentsArray($arguments);
|
|
}
|
|
|
|
/**
|
|
* Returns a new command instance with the specified arguments.
|
|
*
|
|
* @param array $arguments Arguments for the command
|
|
*
|
|
* @return CommandInterface
|
|
*/
|
|
protected function getCommandWithArgumentsArray(array $arguments): CommandInterface
|
|
{
|
|
$command = $this->getCommand();
|
|
$command->setArguments($arguments);
|
|
|
|
return $command;
|
|
}
|
|
|
|
/**
|
|
* @group disconnected
|
|
*/
|
|
public function testCommandId(): void
|
|
{
|
|
$command = $this->getCommand();
|
|
$sanitizedCommandId = str_replace('.', '', $command->getId());
|
|
|
|
$this->assertInstanceOf('Predis\Command\CommandInterface', $command);
|
|
$this->assertEquals($this->getExpectedId(), $sanitizedCommandId);
|
|
}
|
|
|
|
/**
|
|
* @group disconnected
|
|
*/
|
|
public function testRawArguments(): void
|
|
{
|
|
$expected = ['1st', '2nd', '3rd', '4th'];
|
|
|
|
$command = $this->getCommand();
|
|
$command->setRawArguments($expected);
|
|
|
|
$this->assertSame($expected, $command->getArguments());
|
|
}
|
|
}
|