mirror of
https://github.com/predis/predis.git
synced 2026-08-23 09:14:00 +00:00
dc14c29676
Now we follow a Symfony2-like naming convention for namespaces, interfaces and classes sticking with one clear rule. - Renamed namespaces: - Predis\Network - Predis\Profiles - Predis\Iterators - Predis\Options - Predis\Commands - Predis\Commands\Processors - Renamed interfaces: - Predis\IReplyObject - Predis\IRedisServerError - Predis\IConnectionFactory - Predis\IConnectionParameters - Predis\Options\IOption - Predis\Options\IClientOptions - Predis\Profile\IServerProfile - Predis\Pipeline\IPipelineExecutor - Predis\Distribution\INodeKeyGenerator - Predis\Distribution\IDistributionStrategy - Predis\Protocol\IProtocolProcessor - Predis\Protocol\IResponseReader - Predis\Protocol\IResponseHandler - Predis\Protocol\ICommandSerializer - Predis\Protocol\IComposableProtocolProcessor - Predis\Network\IConnection - Predis\Network\IConnectionSingle - Predis\Network\IConnectionComposable - Predis\Network\IConnectionCluster - Predis\Network\IConnectionReplication - Predis\Commands\ICommand - Predis\Commands\IPrefixable - Predis\Command\Processor\ICommandProcessor - Predis\Command\Processor\ICommandProcessorChain - Predis\Command\Processor\IProcessingSupport - Renamed Classes: - Predis\Commands\Command - Predis\Network\ConnectionBase - Classes moved to different namespaces: - Predis\MonitorContext Meh
175 lines
4.2 KiB
PHP
175 lines
4.2 KiB
PHP
<?php
|
|
|
|
/*
|
|
* This file is part of the Predis package.
|
|
*
|
|
* (c) Daniele Alessandri <suppakilla@gmail.com>
|
|
*
|
|
* For the full copyright and license information, please view the LICENSE
|
|
* file that was distributed with this source code.
|
|
*/
|
|
|
|
namespace Predis\Command;
|
|
|
|
use \PHPUnit_Framework_TestCase as StandardTestCase;
|
|
|
|
use Predis\Client;
|
|
use Predis\Profile\ServerProfile;
|
|
use Predis\Profile\ServerProfileInterface;
|
|
|
|
/**
|
|
*
|
|
*/
|
|
abstract class CommandTestCase extends StandardTestCase
|
|
{
|
|
/**
|
|
* Returns the expected command.
|
|
*
|
|
* @return CommandInterface|string Instance or FQN of the expected command.
|
|
*/
|
|
protected abstract function getExpectedCommand();
|
|
|
|
/**
|
|
* Returns the expected command ID.
|
|
*
|
|
* @return string
|
|
*/
|
|
protected abstract function getExpectedId();
|
|
|
|
/**
|
|
* Returns a new command instance.
|
|
*
|
|
* @return CommandInterface
|
|
*/
|
|
protected function getCommand()
|
|
{
|
|
$command = $this->getExpectedCommand();
|
|
|
|
return $command instanceof CommandInterface ? $command : new $command();
|
|
}
|
|
|
|
/**
|
|
* Return the server profile used during the tests.
|
|
*
|
|
* @return ServerProfileInterface
|
|
*/
|
|
protected function getProfile()
|
|
{
|
|
return ServerProfile::get(REDIS_SERVER_VERSION);
|
|
}
|
|
|
|
/**
|
|
* Returns a new client instance.
|
|
*
|
|
* @param Boolean $connect Flush selected database before returning the client.
|
|
* @return Client
|
|
*/
|
|
protected function getClient($flushdb = true)
|
|
{
|
|
$profile = $this->getProfile();
|
|
|
|
if (!$profile->supportsCommand($id = $this->getExpectedId())) {
|
|
$this->markTestSkipped("The profile {$profile->getVersion()} does not support command {$id}");
|
|
}
|
|
|
|
$parameters = array(
|
|
'host' => REDIS_SERVER_HOST,
|
|
'port' => REDIS_SERVER_PORT,
|
|
);
|
|
|
|
$options = array(
|
|
'profile' => $profile
|
|
);
|
|
|
|
$client = new Client($parameters, $options);
|
|
$client->connect();
|
|
$client->select(REDIS_SERVER_DBNUM);
|
|
|
|
if ($flushdb) {
|
|
$client->flushdb();
|
|
}
|
|
|
|
return $client;
|
|
}
|
|
|
|
/**
|
|
* Returns wether the command is prefixable or not.
|
|
*
|
|
* @return Boolean
|
|
*/
|
|
protected function isPrefixable()
|
|
{
|
|
return $this->getCommand() instanceof PrefixableCommandInterface;
|
|
}
|
|
|
|
/**
|
|
* Returns a new command instance with the specified arguments.
|
|
*
|
|
* @param ... List of arguments for the command.
|
|
* @return CommandInterface
|
|
*/
|
|
protected function getCommandWithArguments(/* arguments */)
|
|
{
|
|
return $this->getCommandWithArgumentsArray(func_get_args());
|
|
}
|
|
|
|
/**
|
|
* Returns a new command instance with the specified arguments.
|
|
*
|
|
* @param array $arguments Arguments for the command.
|
|
* @return CommandInterface
|
|
*/
|
|
protected function getCommandWithArgumentsArray(Array $arguments)
|
|
{
|
|
$command = $this->getCommand();
|
|
$command->setArguments($arguments);
|
|
|
|
return $command;
|
|
}
|
|
|
|
/**
|
|
* Sleep the test case with microseconds resolution.
|
|
*
|
|
* @param float $seconds Seconds to sleep.
|
|
*/
|
|
protected function sleep($seconds)
|
|
{
|
|
usleep($seconds * 1000000);
|
|
}
|
|
|
|
/**
|
|
* Asserts that two arrays have the same values, even if with different order.
|
|
*
|
|
* @param Array $expected Expected array.
|
|
* @param Array $actual Actual array.
|
|
*/
|
|
protected function assertSameValues(Array $expected, Array $actual)
|
|
{
|
|
$this->assertThat($expected, new \ArrayHasSameValuesConstraint($actual));
|
|
}
|
|
|
|
/**
|
|
* @group disconnected
|
|
*/
|
|
public function testCommandId()
|
|
{
|
|
$command = $this->getCommand();
|
|
|
|
$this->assertInstanceOf('Predis\Command\CommandInterface', $command);
|
|
$this->assertEquals($this->getExpectedId(), $command->getId());
|
|
}
|
|
|
|
/**
|
|
* @group disconnected
|
|
*/
|
|
public function testRawArguments()
|
|
{
|
|
$expected = array('1st', '2nd', '3rd', '4th');
|
|
|
|
$command = $this->getCommand();
|
|
$command->setRawArguments($expected);
|
|
|
|
$this->assertSame($expected, $command->getArguments());
|
|
}
|
|
}
|