/**
  * @group disconnected
  */
 public function testValidationAcceptsProfileInstancesAsValue()
 {
     $value = ServerProfile::get('2.0');
     $options = $this->getMock('Predis\\Options\\IClientOptions');
     $option = new ClientProfile();
     $profile = $option->filter($options, $value);
     $this->assertInstanceOf('Predis\\Profiles\\IServerProfile', $profile);
     $this->assertEquals('2.0', $profile->getVersion());
     $this->assertNull($profile->getProcessor());
 }
Exemple #2
0
 /**
  * {@inheritdoc}
  */
 public function validate($value)
 {
     if ($value instanceof IServerProfile) {
         return $value;
     }
     if (is_string($value)) {
         return ServerProfile::get($value);
     }
     throw new \InvalidArgumentException("Invalid value for the profile option");
 }
Exemple #3
0
 /**
  * {@inheritdoc}
  */
 public function filter(IClientOptions $options, $value)
 {
     if (is_string($value)) {
         $value = ServerProfile::get($value);
         if (isset($options->prefix)) {
             $value->setProcessor($options->prefix);
         }
     }
     if (is_callable($value)) {
         $value = call_user_func($value, $options);
     }
     if (!$value instanceof IServerProfile) {
         throw new \InvalidArgumentException('Invalid value for the profile option');
     }
     return $value;
 }
Exemple #4
0
 /**
  * Creates an instance of Predis\Options\ClientOptions from various types of
  * parameters (string, array, Predis\Profiles\ServerProfile) or returns the
  * passed object if its an instance of Predis\Options\ClientOptions.
  *
  * @param mixed $options Client options.
  * @return ClientOptions
  */
 private function filterOptions($options)
 {
     if ($options === null) {
         return new ClientOptions();
     }
     if (is_array($options)) {
         return new ClientOptions($options);
     }
     if ($options instanceof ClientOptions) {
         return $options;
     }
     if ($options instanceof IServerProfile) {
         return new ClientOptions(array('profile' => $options));
     }
     if (is_string($options)) {
         return new ClientOptions(array('profile' => ServerProfile::get($options)));
     }
     throw new \InvalidArgumentException("Invalid type for client options");
 }
local hashes = {}
for _, key in pairs(KEYS) do
    table.insert(hashes, key)
    table.insert(hashes, redis.call('hgetall', key))
end
return hashes
EOS;
    public function getScript()
    {
        return self::BODY;
    }
}
// ------------------------------------------------------------------------- //
$parameters = array('tcp://127.0.0.1:6379/?alias=master', 'tcp://127.0.0.1:6380/?alias=slave');
$options = array('profile' => function ($options) {
    $profile = ServerProfile::get('2.6');
    $profile->defineCommand('hmgetall', 'HashMultipleGetAll');
    return $profile;
}, 'replication' => function ($options) {
    $replication = new MasterSlaveReplication();
    $replication->setScriptReadOnly(HashMultipleGetAll::BODY);
    return $replication;
});
// ------------------------------------------------------------------------- //
$client = new Predis\Client($parameters, $options);
// Execute the following commands on the master server using redis-cli:
// $ ./redis-cli HMSET metavars foo bar hoge piyo
// $ ./redis-cli HMSET servers master host1 slave host2
$hashes = $client->hmgetall('metavars', 'servers');
$replication = $client->getConnection();
$stillOnSlave = $replication->getCurrent() === $replication->getConnectionById('slave');
 /**
  * @group disconnected
  */
 public function testToString()
 {
     $this->assertEquals('2.0', (string) ServerProfile::get('2.0'));
 }
 /**
  * @group disconnected
  */
 public function testClosingContextWithFalseSendsUnsubscriptions()
 {
     $profile = ServerProfile::get(REDIS_SERVER_VERSION);
     $classUnsubscribe = $profile->getCommandClass('unsubscribe');
     $classPunsubscribe = $profile->getCommandClass('punsubscribe');
     $connection = $this->getMock('Predis\\Network\\IConnectionSingle');
     $client = $this->getMock('Predis\\Client', array('disconnect'), array($connection));
     $options = array('subscribe' => 'channel:foo', 'psubscribe' => 'channels:*');
     $pubsub = new PubSubContext($client, $options);
     $connection->expects($this->exactly(2))->method('writeCommand')->with($this->logicalOr($this->isInstanceOf($classUnsubscribe), $this->isInstanceOf($classPunsubscribe)));
     $pubsub->closeContext(false);
 }
 /**
  * Returns a new instance of server profile.
  *
  * @param array $additional Additional connection parameters.
  * @return ServerProfile
  */
 protected function getProfile($version = null)
 {
     return ServerProfile::get($version ?: REDIS_SERVER_VERSION);
 }
local hashes = {}
for _, key in pairs(KEYS) do
    table.insert(hashes, key)
    table.insert(hashes, redis.call('hgetall', key))
end
return hashes
EOS;
    public function getScript()
    {
        return self::BODY;
    }
}
// ------------------------------------------------------------------------- //
$parameters = array('tcp://127.0.0.1:6379/?alias=master', 'tcp://127.0.0.1:6380/?alias=slave');
$options = array('profile' => function ($options) {
    $profile = ServerProfile::get('dev');
    $profile->defineCommand('hmgetall', 'HashMultipleGetAll');
    return $profile;
}, 'replication' => function ($options) {
    $replication = new MasterSlaveReplication();
    $replication->setScriptReadOnly(HashMultipleGetAll::BODY);
    return $replication;
});
// ------------------------------------------------------------------------- //
$client = new Predis\Client($parameters, $options);
// Execute the following commands on the master server using redis-cli:
// $ ./redis-cli HMSET metavars foo bar hoge piyo
// $ ./redis-cli HMSET servers master host1 slave host2
$hashes = $client->hmgetall('metavars', 'servers');
$replication = $client->getConnection();
$stillOnSlave = $replication->getCurrent() === $replication->getConnectionById('slave');
 /**
  * @group disconnected
  */
 public function testCanSetReadOnlyFlagForEvalScripts()
 {
     $profile = ServerProfile::get('dev');
     $cmdEval = $profile->createCommand('eval', array($script = "return redis.call('info');"));
     $cmdEvalSha = $profile->createCommand('evalsha', array($scriptSHA1 = sha1($script)));
     $master = $this->getMockConnection('tcp://host1?alias=master');
     $master->expects($this->never())->method('executeCommand');
     $slave1 = $this->getMockConnection('tcp://host2?alias=slave1');
     $slave1->expects($this->exactly(2))->method('executeCommand')->with($this->logicalOr($cmdEval, $cmdEvalSha));
     $replication = new MasterSlaveReplication();
     $replication->add($master);
     $replication->add($slave1);
     $replication->setScriptReadOnly($script);
     $replication->executeCommand($cmdEval);
     $replication->executeCommand($cmdEvalSha);
 }
Exemple #11
0
 /**
  * @group disconnected
  */
 public function testConstructorWithNullAndArrayArgument()
 {
     $factory = $this->getMock('Predis\\IConnectionFactory');
     $arg2 = array('profile' => '2.0', 'prefix' => 'prefix:', 'connections' => $factory);
     $client = new Client(null, $arg2);
     $profile = $client->getProfile();
     $this->assertSame($profile->getVersion(), ServerProfile::get('2.0')->getVersion());
     $this->assertInstanceOf('Predis\\Commands\\Processors\\KeyPrefixProcessor', $profile->getProcessor());
     $this->assertSame('prefix:', $profile->getProcessor()->getPrefix());
     $this->assertSame($factory, $client->getConnectionFactory());
 }
 /**
  * Return the server profile used during the tests.
  *
  * @return IServerProfile
  */
 protected function getProfile()
 {
     return ServerProfile::get(REDIS_SERVER_VERSION);
 }