mirror of
https://github.com/predis/predis.git
synced 2026-08-24 19:19:39 +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
217 lines
6.2 KiB
PHP
217 lines
6.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;
|
|
|
|
/**
|
|
*
|
|
*/
|
|
class CommandTest extends StandardTestCase
|
|
{
|
|
/**
|
|
* @group disconnected
|
|
*/
|
|
public function testImplementsCorrectInterface()
|
|
{
|
|
$command = $this->getMockForAbstractClass('Predis\Command\AbstractCommand');
|
|
|
|
$this->assertInstanceOf('Predis\Command\CommandInterface', $command);
|
|
}
|
|
|
|
/**
|
|
* @group disconnected
|
|
*/
|
|
public function testGetEmptyArguments()
|
|
{
|
|
$command = $this->getMockForAbstractClass('Predis\Command\AbstractCommand');
|
|
|
|
$this->assertEmpty($command->getArguments());
|
|
}
|
|
|
|
/**
|
|
* @group disconnected
|
|
*/
|
|
public function testSetRawArguments()
|
|
{
|
|
$arguments = array('1st', '2nd', '3rd');
|
|
|
|
$command = $this->getMockForAbstractClass('Predis\Command\AbstractCommand');
|
|
$command->setRawArguments($arguments);
|
|
|
|
$this->assertEquals($arguments, $command->getArguments());
|
|
}
|
|
|
|
/**
|
|
* @group disconnected
|
|
*
|
|
* @todo Since AbstractCommand::filterArguments is protected we cannot set an expectation
|
|
* for it when AbstractCommand::setArguments() is invoked. I wonder how we can do that.
|
|
*/
|
|
public function testSetArguments()
|
|
{
|
|
$arguments = array('1st', '2nd', '3rd');
|
|
|
|
$command = $this->getMockForAbstractClass('Predis\Command\AbstractCommand');
|
|
$command->setArguments($arguments);
|
|
|
|
$this->assertEquals($arguments, $command->getArguments());
|
|
}
|
|
|
|
/**
|
|
* @group disconnected
|
|
*/
|
|
public function testGetArgumentAtIndex()
|
|
{
|
|
$arguments = array('1st', '2nd', '3rd');
|
|
|
|
$command = $this->getMockForAbstractClass('Predis\Command\AbstractCommand');
|
|
$command->setArguments($arguments);
|
|
|
|
$this->assertEquals($arguments[0], $command->getArgument(0));
|
|
$this->assertEquals($arguments[2], $command->getArgument(2));
|
|
$this->assertNull($command->getArgument(10));
|
|
}
|
|
|
|
/**
|
|
* @group disconnected
|
|
*/
|
|
public function testParseResponse()
|
|
{
|
|
$response = 'response-buffer';
|
|
$command = $this->getMockForAbstractClass('Predis\Command\AbstractCommand');
|
|
|
|
$this->assertEquals($response, $command->parseResponse($response));
|
|
}
|
|
|
|
/**
|
|
* @group disconnected
|
|
* @protected
|
|
*/
|
|
public function testCheckSameHashForKeys()
|
|
{
|
|
$command = $this->getMockForAbstractClass('Predis\Command\AbstractCommand');
|
|
|
|
$checkSameHashForKeys = new \ReflectionMethod($command, 'checkSameHashForKeys');
|
|
$checkSameHashForKeys->setAccessible(true);
|
|
|
|
$this->assertTrue($checkSameHashForKeys->invoke($command, array('foo', '{foo}:bar')));
|
|
$this->assertFalse($checkSameHashForKeys->invoke($command, array('foo', '{foo}:bar', 'foo:bar')));
|
|
}
|
|
|
|
/**
|
|
* @group disconnected
|
|
* @protected
|
|
*/
|
|
public function testCanBeHashed()
|
|
{
|
|
$command = $this->getMockForAbstractClass('Predis\Command\AbstractCommand');
|
|
|
|
$canBeHashed = new \ReflectionMethod($command, 'canBeHashed');
|
|
$canBeHashed->setAccessible(true);
|
|
|
|
$this->assertFalse($canBeHashed->invoke($command));
|
|
|
|
$command->setRawArguments(array('key'));
|
|
$this->assertTrue($canBeHashed->invoke($command));
|
|
}
|
|
|
|
/**
|
|
* @group disconnected
|
|
*/
|
|
public function testDoesNotReturnAnHashByDefault()
|
|
{
|
|
$distributor = $this->getMock('Predis\Distribution\HashGeneratorInterface');
|
|
$distributor->expects($this->never())->method('hash');
|
|
|
|
$command = $this->getMockForAbstractClass('Predis\Command\AbstractCommand');
|
|
|
|
$command->getHash($distributor);
|
|
}
|
|
|
|
/**
|
|
* @group disconnected
|
|
*/
|
|
public function testReturnAnHashWhenCanBeHashedAndCachesIt()
|
|
{
|
|
$key = 'key';
|
|
$hash = "$key-hash";
|
|
|
|
$distributor = $this->getMock('Predis\Distribution\HashGeneratorInterface');
|
|
$distributor->expects($this->once())
|
|
->method('hash')
|
|
->with($key)
|
|
->will($this->returnValue($hash));
|
|
|
|
$command = $this->getMockForAbstractClass('Predis\Command\AbstractCommand');
|
|
$command->setRawArguments(array($key));
|
|
|
|
$this->assertEquals($hash, $command->getHash($distributor));
|
|
|
|
$this->assertEquals($hash, $command->getHash($distributor));
|
|
$this->assertEquals($hash, $command->getHash($distributor));
|
|
}
|
|
|
|
/**
|
|
* @group disconnected
|
|
*/
|
|
public function testExtractsKeyTagsBeforeHashing()
|
|
{
|
|
$tag = 'key';
|
|
$key = "{{$tag}}:ignore";
|
|
$hash = "$tag-hash";
|
|
|
|
$distributor = $this->getMock('Predis\Distribution\HashGeneratorInterface');
|
|
$distributor->expects($this->once())
|
|
->method('hash')
|
|
->with($tag)
|
|
->will($this->returnValue($hash));
|
|
|
|
$command = $this->getMockForAbstractClass('Predis\Command\AbstractCommand');
|
|
$command->setRawArguments(array($key));
|
|
|
|
$this->assertEquals($hash, $command->getHash($distributor));
|
|
}
|
|
|
|
/**
|
|
* @group disconnected
|
|
*/
|
|
public function testToString()
|
|
{
|
|
$expected = 'SET key value';
|
|
$arguments = array('key', 'value');
|
|
|
|
$command = $this->getMockForAbstractClass('Predis\Command\AbstractCommand');
|
|
$command->expects($this->once())->method('getId')->will($this->returnValue('SET'));
|
|
|
|
$command->setRawArguments($arguments);
|
|
|
|
$this->assertEquals($expected, (string) $command);
|
|
}
|
|
|
|
/**
|
|
* @group disconnected
|
|
*/
|
|
public function testToStringWithLongArguments()
|
|
{
|
|
$expected = 'SET key abcdefghijklmnopqrstuvwxyz012345[...]';
|
|
$arguments = array('key', 'abcdefghijklmnopqrstuvwxyz0123456789');
|
|
|
|
$command = $this->getMockForAbstractClass('Predis\Command\AbstractCommand');
|
|
$command->expects($this->once())->method('getId')->will($this->returnValue('SET'));
|
|
|
|
$command->setRawArguments($arguments);
|
|
|
|
$this->assertEquals($expected, (string) $command);
|
|
}
|
|
}
|