From e774a301c486c13aeb3e768b7327a56fc9ab382b Mon Sep 17 00:00:00 2001 From: Daniele Alessandri Date: Thu, 2 Aug 2012 17:25:13 +0200 Subject: [PATCH] Add tests for Predis\Connection\ComposableStreamConnection. --- .../Connection/ComposableStreamConnection.php | 1 + .../ComposableStreamConnectionTest.php | 123 ++++++++++++++++++ 2 files changed, 124 insertions(+) create mode 100644 tests/Predis/Connection/ComposableStreamConnectionTest.php diff --git a/lib/Predis/Connection/ComposableStreamConnection.php b/lib/Predis/Connection/ComposableStreamConnection.php index 575ea0e2..de236c0e 100644 --- a/lib/Predis/Connection/ComposableStreamConnection.php +++ b/lib/Predis/Connection/ComposableStreamConnection.php @@ -34,6 +34,7 @@ class ComposableStreamConnection extends StreamConnection implements ComposableC $protocol = $protocol ?: new TextProtocol(); $protocol->setOption('iterable_multibulk', $parameters->iterable_multibulk); + $this->mbiterable = null; $this->protocol = $protocol; $this->parameters = $this->checkParameters($parameters); } diff --git a/tests/Predis/Connection/ComposableStreamConnectionTest.php b/tests/Predis/Connection/ComposableStreamConnectionTest.php new file mode 100644 index 00000000..0084d42f --- /dev/null +++ b/tests/Predis/Connection/ComposableStreamConnectionTest.php @@ -0,0 +1,123 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Predis\Connection; + +use \PHPUnit_Framework_TestCase as StandardTestCase; + +use Predis\Profile\ServerProfile; + +/** + * + */ +class ComposableStreamConnectionTest extends ConnectionTestCase +{ + /** + * @group disconnected + */ + public function testConstructorDoesNotOpenConnection() + { + $connection = new ComposableStreamConnection($this->getParameters()); + + $this->assertFalse($connection->isConnected()); + } + + /** + * @group disconnected + */ + public function testExposesParameters() + { + $parameters = $this->getParameters(); + $connection = new ComposableStreamConnection($parameters); + + $this->assertSame($parameters, $connection->getParameters()); + } + + /** + * @group disconnected + * @expectedException InvalidArgumentException + * @expectedExceptionMessage Invalid scheme: udp + */ + public function testThrowsExceptionOnInvalidScheme() + { + $parameters = $this->getParameters(array('scheme' => 'udp')); + $connection = new ComposableStreamConnection($parameters); + } + + /** + * @group disconnected + */ + public function testCanBeSerialized() + { + $parameters = $this->getParameters(array('alias' => 'redis', 'read_write_timeout' => 10)); + $connection = new ComposableStreamConnection($parameters); + + $unserialized = unserialize(serialize($connection)); + + $this->assertEquals($connection, $unserialized); + } + + // ******************************************************************** // + // ---- INTEGRATION TESTS --------------------------------------------- // + // ******************************************************************** // + + /** + * @group connected + */ + public function testReadsMultibulkRepliesAsIterators() + { + $connection = $this->getConnection($profile, true, array('iterable_multibulk' => true)); + + $connection->executeCommand($profile->createCommand('rpush', array('metavars', 'foo', 'hoge', 'lol'))); + $connection->writeCommand($profile->createCommand('lrange', array('metavars', 0, -1))); + + $this->assertInstanceOf('Predis\Iterator\MultiBulkResponse', $iterator = $connection->read()); + $this->assertSame(array('foo', 'hoge', 'lol'), iterator_to_array($iterator)); + } + + /** + * @group connected + * @expectedException Predis\Protocol\ProtocolException + * @expectedExceptionMessage Unknown prefix: 'P' + */ + public function testThrowsExceptionOnProtocolDesynchronizationErrors() + { + $connection = $this->getConnection($profile); + $stream = $connection->getResource(); + + $connection->writeCommand($profile->createCommand('ping')); + fread($stream, 1); + + $connection->read(); + } + + // ******************************************************************** // + // ---- HELPER METHODS ------------------------------------------------ // + // ******************************************************************** // + + /** + * {@inheritdoc} + */ + protected function getConnection(&$profile = null, $initialize = false, Array $parameters = array()) + { + $parameters = $this->getParameters($parameters); + $profile = $this->getProfile(); + + $connection = new ComposableStreamConnection($parameters); + + if ($initialize) { + $connection->pushInitCommand($profile->createCommand('select', array($parameters->database))); + $connection->pushInitCommand($profile->createCommand('flushdb')); + } + + return $connection; + } +}