getCommand(); $command->setArguments($arguments); $this->assertSame($expected, $command->getArguments()); } /** * @group disconnected */ public function testParseResponse(): void { $this->assertSame(1, $this->getCommand()->parseResponse(1)); } /** * @group connected * @dataProvider scriptsProvider * @param array $dictionary * @param string $script * @param array $keys * @param array $arguments * @param $expectedResponse * @return void * @requiresRedisVersion >= 7.0.0 */ public function testExecutesReadOnlyCommandsFromGivenLuaScript( array $dictionary, string $script, array $keys, array $arguments, $expectedResponse ): void { $redis = $this->getClient(); $redis->mset(...$dictionary); $this->assertSame($expectedResponse, $redis->eval_ro($script, $keys, ...$arguments)); } /** * @group connected * @return void * @requiresRedisVersion >= 7.0.0 */ public function testThrowsErrorOnWriteCommandProvided(): void { $redis = $this->getClient(); $this->expectException(ServerException::class); $this->expectExceptionMessageMatches('/^ERR Write commands are not allowed from read-only scripts./'); $redis->eval_ro("return redis.call('SET', KEYS[1], ARGV[1])", ['key'], 'value'); } public function scriptsProvider(): array { return [ 'with single key' => [ ['key', 'value'], "return redis.call('GET', KEYS[1])", ['key'], [], 'value', ], 'with multiple keys' => [ ['key', 'value', 'key1', 2], "return redis.call('MGET', KEYS[1], KEYS[2])", ['key', 'key1'], [], ['value', '2'], ], 'with arguments provided' => [ ['key', 'mytest', 'key1', 'ourtest'], "return redis.call('LCS', KEYS[1], KEYS[2], ARGV[1])", ['key', 'key1'], ['LEN'], 4, ], ]; } }