فهرست منبع

Add tests for Predis\Connection\ComposableStreamConnection.

Daniele Alessandri 12 سال پیش
والد
کامیت
e774a301c4
2فایلهای تغییر یافته به همراه124 افزوده شده و 0 حذف شده
  1. 1 0
      lib/Predis/Connection/ComposableStreamConnection.php
  2. 123 0
      tests/Predis/Connection/ComposableStreamConnectionTest.php

+ 1 - 0
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);
     }

+ 123 - 0
tests/Predis/Connection/ComposableStreamConnectionTest.php

@@ -0,0 +1,123 @@
+<?php
+
+/*
+ * This file is part of the Predis package.
+ *
+ * (c) Daniele Alessandri <suppakilla@gmail.com>
+ *
+ * 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;
+    }
+}