Files
predis/tests/PHPUnit/PredisCommandTestCase.php
T
Vladyslav Vildanov 9318232e8d Merge main into 3.x (#1342)
* 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>
2023-07-25 10:34:02 +03:00

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());
}
}