diff --git a/lib/Predis/Connection/ConnectionParameters.php b/lib/Predis/Connection/ConnectionParameters.php index 9394053c..f8b4b68d 100644 --- a/lib/Predis/Connection/ConnectionParameters.php +++ b/lib/Predis/Connection/ConnectionParameters.php @@ -36,7 +36,7 @@ class ConnectionParameters implements ConnectionParametersInterface public function __construct($parameters = array()) { if (!is_array($parameters)) { - $parameters = $this->parseURI($parameters); + $parameters = self::parseURI($parameters); } $this->parameters = $this->filter($parameters) + $this->getDefaults(); @@ -108,7 +108,7 @@ class ConnectionParameters implements ConnectionParametersInterface * @param string $uri Connection string. * @return array */ - private function parseURI($uri) + public static function parseURI($uri) { if (stripos($uri, 'unix') === 0) { // Hack to support URIs for UNIX sockets with minimal effort. diff --git a/tests/Predis/Connection/ConnectionParametersTest.php b/tests/Predis/Connection/ConnectionParametersTest.php index 1bde141d..d5a95e63 100644 --- a/tests/Predis/Connection/ConnectionParametersTest.php +++ b/tests/Predis/Connection/ConnectionParametersTest.php @@ -123,6 +123,52 @@ class ParametersTest extends StandardTestCase $this->assertNull($unserialized->unknown); } + /** + * @group disconnected + */ + public function testParsingURI() + { + $uri = 'tcp://10.10.10.10:6400?timeout=0.5&persistent=1'; + + $expected = array( + 'scheme' => 'tcp', + 'host' => '10.10.10.10', + 'port' => 6400, + 'timeout' => '0.5', + 'persistent' => '1', + ); + + $this->assertSame($expected, ConnectionParameters::parseURI($uri)); + } + + /** + * @group disconnected + */ + public function testParsingUnixDomainURI() + { + $uri = 'unix:///tmp/redis.sock?timeout=0.5&persistent=1'; + + $expected = array( + 'scheme' => 'unix', + 'host' => 'localhost', + 'path' => '/tmp/redis.sock', + 'timeout' => '0.5', + 'persistent' => '1', + ); + + $this->assertSame($expected, ConnectionParameters::parseURI($uri)); + } + + /** + * @group disconnected + * @expectedException Predis\ClientException + * @expectedExceptionMessage Invalid URI: tcp://invalid:uri + */ + public function testParsingURIThrowOnInvalidURI() + { + ConnectionParameters::parseURI('tcp://invalid:uri'); + } + // ******************************************************************** // // ---- HELPER METHODS ------------------------------------------------ // // ******************************************************************** //