/** * @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()); }
/** * {@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"); }
/** * {@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; }
/** * 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); }
/** * @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); }