mirror of
https://github.com/Icinga/icinga-php-thirdparty.git
synced 2025-07-08 14:24:31 +02:00
131 lines
4.0 KiB
PHP
131 lines
4.0 KiB
PHP
<?php
|
|
|
|
use Clue\Redis\Protocol\Parser\ResponseParser;
|
|
|
|
class RecursiveParserTest extends AbstractParserTest
|
|
{
|
|
protected function createParser()
|
|
{
|
|
return new ResponseParser();
|
|
}
|
|
|
|
public function testPartialIncompleteBulkReply()
|
|
{
|
|
$this->assertEquals(array(), $this->parser->pushIncoming("$20\r\nincompl"));
|
|
}
|
|
|
|
public function testParsingStatusReplies()
|
|
{
|
|
// C: PING
|
|
$message = "+PONG\r\n";
|
|
$this->assertCount(1, $models = $this->parser->pushIncoming($message));
|
|
|
|
$data = reset($models)->getValueNative();
|
|
$this->assertEquals('PONG', $data);
|
|
|
|
// C: SET key value
|
|
$message = "+OK\r\n";
|
|
$this->assertCount(1, $models = $this->parser->pushIncoming($message));
|
|
|
|
$data = reset($models)->getValueNative();
|
|
$this->assertEquals('OK', $data);
|
|
}
|
|
|
|
public function testParsingErrorReply()
|
|
{
|
|
$message = "-WRONGTYPE Operation against a key holding the wrong kind of value\r\n";
|
|
|
|
$this->assertCount(1, $models = $this->parser->pushIncoming($message));
|
|
$exception = reset($models);
|
|
|
|
$this->assertInstanceOf('Exception', $exception);
|
|
$this->assertInstanceOf('Clue\Redis\Protocol\Model\ErrorReply', $exception);
|
|
$this->assertEquals('WRONGTYPE Operation against a key holding the wrong kind of value', $exception->getMessage());
|
|
}
|
|
|
|
public function testParsingIntegerReply()
|
|
{
|
|
// C: INCR mykey
|
|
$message = ":1\r\n";
|
|
$this->assertCount(1, $models = $this->parser->pushIncoming($message));
|
|
|
|
$data = reset($models)->getValueNative();
|
|
$this->assertEquals(1, $data);
|
|
}
|
|
|
|
public function testParsingBulkReply()
|
|
{
|
|
// C: GET mykey
|
|
$message = "$6\r\nfoobar\r\n";
|
|
$this->assertCount(1, $models = $this->parser->pushIncoming($message));
|
|
|
|
$data = reset($models)->getValueNative();
|
|
$this->assertEquals("foobar", $data);
|
|
}
|
|
|
|
public function testParsingNullBulkReply()
|
|
{
|
|
// C: GET nonexistingkey
|
|
$message = "$-1\r\n";
|
|
$this->assertCount(1, $models = $this->parser->pushIncoming($message));
|
|
|
|
$data = reset($models)->getValueNative();
|
|
$this->assertEquals(null, $data);
|
|
}
|
|
|
|
public function testParsingEmptyMultiBulkReply()
|
|
{
|
|
// C: LRANGE nokey 0 1
|
|
$message = "*0\r\n";
|
|
$this->assertCount(1, $models = $this->parser->pushIncoming($message));
|
|
|
|
$data = reset($models)->getValueNative();
|
|
$this->assertEquals(array(), $data);
|
|
}
|
|
|
|
public function testParsingNullMultiBulkReply()
|
|
{
|
|
// C: BLPOP key 1
|
|
$message = "*-1\r\n";
|
|
$this->assertCount(1, $models = $this->parser->pushIncoming($message));
|
|
|
|
$data = reset($models)->getValueNative();
|
|
$this->assertEquals(null, $data);
|
|
}
|
|
|
|
public function testParsingMultiBulkReplyWithMixedElements()
|
|
{
|
|
$message = "*5\r\n:1\r\n:2\r\n:3\r\n:4\r\n$6\r\nfoobar\r\n";
|
|
$this->assertCount(1, $models = $this->parser->pushIncoming($message));
|
|
|
|
$data = reset($models)->getValueNative();
|
|
$this->assertEquals(array(1, 2, 3, 4, 'foobar'), $data);
|
|
}
|
|
|
|
public function testParsingMultiBulkReplyWithIncompletePush()
|
|
{
|
|
$this->assertCount(0, $this->parser->pushIncoming("*5\r\n:1\r\n:2\r"));
|
|
$this->assertCount(1, $models = $this->parser->pushIncoming("\n:3\r\n:4\r\n$6\r\nfoobar\r\n"));
|
|
|
|
$data = reset($models)->getValueNative();
|
|
$this->assertEquals(array(1, 2, 3, 4, 'foobar'), $data);
|
|
}
|
|
|
|
public function testParsingMultiBulkReplyWithNullElement()
|
|
{
|
|
$message = "*3\r\n$3\r\nfoo\r\n$-1\r\n$3\r\nbar\r\n";
|
|
$this->assertCount(1, $models = $this->parser->pushIncoming($message));
|
|
|
|
$data = reset($models)->getValueNative();
|
|
$this->assertEquals(array('foo', null, 'bar'), $data);
|
|
}
|
|
|
|
/**
|
|
* @expectedException Clue\Redis\Protocol\Parser\ParserException
|
|
*/
|
|
public function testParseError()
|
|
{
|
|
$this->parser->pushIncoming("invalid string\r\n");
|
|
}
|
|
}
|