mirror of
https://github.com/predis/predis.git
synced 2026-08-21 20:00:56 +00:00
ca468b785c
While "replication" do accept values evaluating to TRUE, the same cannot be said for values evaluating to FALSE. TRUE is used to tell the client that we want replication handled using the default backend for unmanaged replication setups. For using redis-sentinel the "sentinel" string value must be passed. Setting "replication" to FALSE led to a failure (and a PHP warning) on client initialization because this condition was not handled properly. Being able to do so would not make sense anyway: when the client does not need to be set up to rely on replication, users simply have to omit the option. Furthermore, users must always specify either "replication" or "cluster" and not both with one of them set to FALSE. Unfortunately options for aggregate connections in Predis v1.1 are a bit of a mess, they did not scale well with the addition of new features and are also quite inconsistent (e.g. "cluster" does not accept TRUE). This has been largely fixed in Predis v2.0-dev but required implementing a few breaking changes. It also means that this change does not need to be ported to the main branch. Addresses #381 using a different approach.
115 lines
3.4 KiB
PHP
115 lines
3.4 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\Configuration;
|
|
|
|
use PredisTestCase;
|
|
|
|
/**
|
|
*
|
|
*/
|
|
class ReplicationOptionTest extends PredisTestCase
|
|
{
|
|
/**
|
|
* @group disconnected
|
|
*/
|
|
public function testDefaultOptionValue()
|
|
{
|
|
$option = new ReplicationOption();
|
|
$options = $this->getMock('Predis\Configuration\OptionsInterface');
|
|
|
|
$this->assertInstanceOf('Predis\Connection\Aggregate\ReplicationInterface', $option->getDefault($options));
|
|
$this->assertInstanceOf('Predis\Connection\Aggregate\MasterSlaveReplication', $option->getDefault($options));
|
|
}
|
|
|
|
/**
|
|
* @return array
|
|
*/
|
|
public function provideValuesEvaluatingTrue()
|
|
{
|
|
return array(array(true), array(1), array('true'), array('on'));
|
|
}
|
|
|
|
/**
|
|
* @group disconnected
|
|
* @dataProvider provideValuesEvaluatingTrue
|
|
*/
|
|
public function testAcceptsValuesThatCanBeInterpretedAsBooleanTrue($value)
|
|
{
|
|
$option = new ReplicationOption();
|
|
$options = $this->getMock('Predis\Configuration\OptionsInterface');
|
|
|
|
$this->assertInstanceOf('Predis\Connection\Aggregate\MasterSlaveReplication', $option->filter($options, $value));
|
|
}
|
|
|
|
/**
|
|
* @return array
|
|
*/
|
|
public function provideValuesEvaluatingFalse()
|
|
{
|
|
return array(array(false), array(0), array('false'), array('off'));
|
|
}
|
|
|
|
/**
|
|
* @group disconnected
|
|
* @dataProvider provideValuesEvaluatingFalse
|
|
* @expectedException \InvalidArgumentException
|
|
* @expectedExceptionMessage Values evaluating to FALSE are not accepted for `replication`
|
|
*/
|
|
public function testDoesNotAcceptValuesThatCanBeInterpretedAsBooleanFalse($value)
|
|
{
|
|
$option = new ReplicationOption();
|
|
$options = $this->getMock('Predis\Configuration\OptionsInterface');
|
|
|
|
$option->filter($options, $value);
|
|
}
|
|
|
|
/**
|
|
* @group disconnected
|
|
*/
|
|
public function testConfiguresAutomaticDiscoveryWhenAutodiscoveryOptionIsPresent()
|
|
{
|
|
$option = new ReplicationOption();
|
|
$options = $this->getMock('Predis\Configuration\OptionsInterface');
|
|
$connFactory = $this->getMock('Predis\Connection\FactoryInterface');
|
|
|
|
$options->expects($this->at(0))
|
|
->method('__get')
|
|
->with('autodiscovery')
|
|
->will($this->returnValue(true));
|
|
$options->expects($this->at(1))
|
|
->method('__get')
|
|
->with('connections')
|
|
->will($this->returnValue($connFactory));
|
|
|
|
$replication = $option->getDefault($options);
|
|
|
|
// TODO: I know, I know...
|
|
$reflection = new \ReflectionProperty($replication, 'autoDiscovery');
|
|
$reflection->setAccessible(true);
|
|
|
|
$this->assertTrue($reflection->getValue($replication));
|
|
}
|
|
|
|
/**
|
|
* @group disconnected
|
|
* @expectedException \InvalidArgumentException
|
|
*/
|
|
public function testThrowsExceptionOnInvalidInstanceType()
|
|
{
|
|
$option = new ReplicationOption();
|
|
$options = $this->getMock('Predis\Configuration\OptionsInterface');
|
|
$value = $this->getMock('Predis\Connection\NodeConnectionInterface');
|
|
|
|
$option->filter($options, $value);
|
|
}
|
|
}
|