ConnectionParametersTest.php 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. <?php
  2. /*
  3. * This file is part of the Predis package.
  4. *
  5. * (c) Daniele Alessandri <suppakilla@gmail.com>
  6. *
  7. * For the full copyright and license information, please view the LICENSE
  8. * file that was distributed with this source code.
  9. */
  10. namespace Predis\Connection;
  11. use PredisTestCase;
  12. /**
  13. * @todo ConnectionParameters::define();
  14. * @todo ConnectionParameters::undefine();
  15. */
  16. class ConnectionParametersTest extends PredisTestCase
  17. {
  18. /**
  19. * @group disconnected
  20. */
  21. public function testDefaultValues()
  22. {
  23. $defaults = $this->getDefaultParametersArray();
  24. $parameters = new ConnectionParameters();
  25. $this->assertEquals($defaults['scheme'], $parameters->scheme);
  26. $this->assertEquals($defaults['host'], $parameters->host);
  27. $this->assertEquals($defaults['port'], $parameters->port);
  28. $this->assertEquals($defaults['timeout'], $parameters->timeout);
  29. }
  30. /**
  31. * @group disconnected
  32. */
  33. public function testIsSet()
  34. {
  35. $parameters = new ConnectionParameters();
  36. $this->assertTrue(isset($parameters->scheme));
  37. $this->assertFalse(isset($parameters->unknown));
  38. }
  39. public function sharedTestsWithArrayParameters(ConnectionParameters $parameters)
  40. {
  41. $this->assertTrue(isset($parameters->scheme));
  42. $this->assertSame('tcp', $parameters->scheme);
  43. $this->assertTrue(isset($parameters->port));
  44. $this->assertSame(7000, $parameters->port);
  45. $this->assertTrue(isset($parameters->custom));
  46. $this->assertSame('foobar', $parameters->custom);
  47. $this->assertFalse(isset($parameters->unknown));
  48. $this->assertNull($parameters->unknown);
  49. }
  50. /**
  51. * @group disconnected
  52. */
  53. public function testConstructWithArrayParameters()
  54. {
  55. $parameters = new ConnectionParameters(array(
  56. 'port' => 7000,
  57. 'custom' => 'foobar'
  58. ));
  59. $this->sharedTestsWithArrayParameters($parameters);
  60. }
  61. /**
  62. * @group disconnected
  63. */
  64. public function testCreateWithArrayParameters()
  65. {
  66. $parameters = new ConnectionParameters(array(
  67. 'port' => 7000,
  68. 'custom' => 'foobar'
  69. ));
  70. $this->sharedTestsWithArrayParameters($parameters);
  71. }
  72. /**
  73. * @group disconnected
  74. */
  75. public function testCreateWithUriString()
  76. {
  77. $defaults = $this->getDefaultParametersArray();
  78. $overrides = array(
  79. 'port' => 7000,
  80. 'database' => 5,
  81. 'custom' => 'foobar',
  82. );
  83. $uriString = $this->getParametersString($overrides);
  84. $parameters = ConnectionParameters::create($uriString);
  85. $this->sharedTestsWithArrayParameters($parameters);
  86. $this->assertEquals($overrides['database'], $parameters->database);
  87. }
  88. /**
  89. * @group disconnected
  90. */
  91. public function testToArray()
  92. {
  93. $additional = array('port' => 7000, 'custom' => 'foobar');
  94. $parameters = new ConnectionParameters($additional);
  95. $this->assertEquals($this->getParametersArray($additional), $parameters->toArray());
  96. }
  97. /**
  98. * @group disconnected
  99. */
  100. public function testSerialization()
  101. {
  102. $parameters = new ConnectionParameters(array('port' => 7000, 'custom' => 'foobar'));
  103. $unserialized = unserialize(serialize($parameters));
  104. $this->assertEquals($parameters->scheme, $unserialized->scheme);
  105. $this->assertEquals($parameters->port, $unserialized->port);
  106. $this->assertTrue(isset($unserialized->custom));
  107. $this->assertEquals($parameters->custom, $unserialized->custom);
  108. $this->assertFalse(isset($unserialized->unknown));
  109. $this->assertNull($unserialized->unknown);
  110. }
  111. /**
  112. * @group disconnected
  113. */
  114. public function testParsingURI()
  115. {
  116. $uri = 'tcp://10.10.10.10:6400?timeout=0.5&persistent=1';
  117. $expected = array(
  118. 'scheme' => 'tcp',
  119. 'host' => '10.10.10.10',
  120. 'port' => 6400,
  121. 'timeout' => '0.5',
  122. 'persistent' => '1',
  123. );
  124. $this->assertSame($expected, ConnectionParameters::parse($uri));
  125. }
  126. /**
  127. * @group disconnected
  128. */
  129. public function testParsingUnixDomainURI()
  130. {
  131. $uri = 'unix:///tmp/redis.sock?timeout=0.5&persistent=1';
  132. $expected = array(
  133. 'scheme' => 'unix',
  134. 'host' => 'localhost',
  135. 'path' => '/tmp/redis.sock',
  136. 'timeout' => '0.5',
  137. 'persistent' => '1',
  138. );
  139. $this->assertSame($expected, ConnectionParameters::parse($uri));
  140. }
  141. /**
  142. * @group disconnected
  143. */
  144. public function testParsingURIWithIncompletePairInQueryString()
  145. {
  146. $uri = 'tcp://10.10.10.10?persistent=1&foo=&bar';
  147. $expected = array(
  148. 'scheme' => 'tcp',
  149. 'host' => '10.10.10.10',
  150. 'persistent' => '1',
  151. 'foo' => '',
  152. );
  153. $this->assertSame($expected, ConnectionParameters::parse($uri));
  154. }
  155. /**
  156. * @group disconnected
  157. */
  158. public function testParsingURIWithMoreThanOneEqualSignInQueryStringPairValue()
  159. {
  160. $uri = 'tcp://10.10.10.10?foobar=a=b=c&persistent=1';
  161. $expected = array(
  162. 'scheme' => 'tcp',
  163. 'host' => '10.10.10.10',
  164. 'foobar' => 'a=b=c',
  165. 'persistent' => '1',
  166. );
  167. $this->assertSame($expected, ConnectionParameters::parse($uri));
  168. }
  169. /**
  170. * @group disconnected
  171. * @expectedException InvalidArgumentException
  172. * @expectedExceptionMessage Invalid parameters URI: tcp://invalid:uri
  173. */
  174. public function testParsingURIThrowOnInvalidURI()
  175. {
  176. ConnectionParameters::parse('tcp://invalid:uri');
  177. }
  178. // ******************************************************************** //
  179. // ---- HELPER METHODS ------------------------------------------------ //
  180. // ******************************************************************** //
  181. /**
  182. * Returns a named array with the default connection parameters and their values.
  183. *
  184. * @return array Default connection parameters.
  185. */
  186. protected function getDefaultParametersArray()
  187. {
  188. return array(
  189. 'scheme' => 'tcp',
  190. 'host' => '127.0.0.1',
  191. 'port' => 6379,
  192. 'timeout' => 5.0,
  193. );
  194. }
  195. /**
  196. * Returns an URI string representation of the specified connection parameters.
  197. *
  198. * @param array $parameters array of connection parameters.
  199. * @return String URI string.
  200. */
  201. protected function getParametersString(array $parameters)
  202. {
  203. $defaults = $this->getDefaultParametersArray();
  204. $scheme = isset($parameters['scheme']) ? $parameters['scheme'] : $defaults['scheme'];
  205. $host = isset($parameters['host']) ? $parameters['host'] : $defaults['host'];
  206. $port = isset($parameters['port']) ? $parameters['port'] : $defaults['port'];
  207. unset($parameters['scheme'], $parameters['host'], $parameters['port']);
  208. $uriString = "$scheme://$host:$port/?";
  209. foreach ($parameters as $k => $v) {
  210. $uriString .= "$k=$v&";
  211. }
  212. return $uriString;
  213. }
  214. }