PhpiredisStreamConnectionTest.php 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  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. /**
  12. * @group ext-phpiredis
  13. * @requires extension phpiredis
  14. */
  15. class PhpiredisStreamConnectionTest extends PredisConnectionTestCase
  16. {
  17. const CONNECTION_CLASS = 'Predis\Connection\PhpiredisStreamConnection';
  18. /**
  19. * @group disconnected
  20. */
  21. public function testConstructorDoesNotOpenConnection()
  22. {
  23. $connection = new PhpiredisStreamConnection($this->getParameters());
  24. $this->assertFalse($connection->isConnected());
  25. }
  26. /**
  27. * @group disconnected
  28. */
  29. public function testSupportsSchemeTCP()
  30. {
  31. $parameters = $this->getParameters(array('scheme' => 'tcp'));
  32. $connection = new PhpiredisStreamConnection($parameters);
  33. $this->assertInstanceOf('Predis\Connection\NodeConnectionInterface', $connection);
  34. }
  35. /**
  36. * @group disconnected
  37. */
  38. public function testSupportsSchemeRedis()
  39. {
  40. $parameters = $this->getParameters(array('scheme' => 'redis'));
  41. $connection = new PhpiredisStreamConnection($parameters);
  42. $this->assertInstanceOf('Predis\Connection\NodeConnectionInterface', $connection);
  43. }
  44. /**
  45. * @group disconnected
  46. */
  47. public function testSupportsSchemeUnix()
  48. {
  49. $parameters = $this->getParameters(array('scheme' => 'unix'));
  50. $connection = new PhpiredisStreamConnection($parameters);
  51. $this->assertInstanceOf('Predis\Connection\NodeConnectionInterface', $connection);
  52. }
  53. /**
  54. * @group disconnected
  55. * @expectedException \InvalidArgumentException
  56. * @expectedExceptionMessage Invalid scheme: 'udp'.
  57. */
  58. public function testThrowsExceptionOnInvalidScheme()
  59. {
  60. $parameters = $this->getParameters(array('scheme' => 'udp'));
  61. new PhpiredisStreamConnection($parameters);
  62. }
  63. /**
  64. * @group disconnected
  65. */
  66. public function testExposesParameters()
  67. {
  68. $parameters = $this->getParameters();
  69. $connection = new PhpiredisStreamConnection($parameters);
  70. $this->assertSame($parameters, $connection->getParameters());
  71. }
  72. /**
  73. * @group disconnected
  74. */
  75. public function testCanBeSerialized()
  76. {
  77. $parameters = $this->getParameters(array('alias' => 'redis', 'read_write_timeout' => 10));
  78. $connection = new PhpiredisStreamConnection($parameters);
  79. $unserialized = unserialize(serialize($connection));
  80. $this->assertInstanceOf('Predis\Connection\PhpiredisStreamConnection', $unserialized);
  81. $this->assertEquals($parameters, $unserialized->getParameters());
  82. }
  83. // ******************************************************************** //
  84. // ---- INTEGRATION TESTS --------------------------------------------- //
  85. // ******************************************************************** //
  86. /**
  87. * @group connected
  88. * @requires PHP 5.4
  89. */
  90. public function testAcceptsTcpNodelayParameter()
  91. {
  92. $connection = new PhpiredisStreamConnection($this->getParameters(array('tcp_nodelay' => false)));
  93. $connection->connect();
  94. $this->assertTrue($connection->isConnected());
  95. $connection = new PhpiredisStreamConnection($this->getParameters(array('tcp_nodelay' => true)));
  96. $connection->connect();
  97. $this->assertTrue($connection->isConnected());
  98. }
  99. /**
  100. * @group connected
  101. */
  102. public function testPersistentParameterWithFalseLikeValues()
  103. {
  104. if ($this->isHHVM()) {
  105. $this->markTestSkipped('This test does not currently work on HHVM.');
  106. }
  107. $connection1 = new PhpiredisStreamConnection($this->getParameters(array('persistent' => 0)));
  108. $this->assertNonPersistentConnection($connection1);
  109. $connection2 = new PhpiredisStreamConnection($this->getParameters(array('persistent' => false)));
  110. $this->assertNonPersistentConnection($connection2);
  111. $connection3 = new PhpiredisStreamConnection($this->getParameters(array('persistent' => '0')));
  112. $this->assertNonPersistentConnection($connection3);
  113. $connection4 = new PhpiredisStreamConnection($this->getParameters(array('persistent' => 'false')));
  114. $this->assertNonPersistentConnection($connection4);
  115. }
  116. /**
  117. * @group connected
  118. */
  119. public function testPersistentParameterWithTrueLikeValues()
  120. {
  121. if ($this->isHHVM()) {
  122. $this->markTestSkipped('This test does not currently work on HHVM.');
  123. }
  124. $connection1 = new PhpiredisStreamConnection($this->getParameters(array('persistent' => 1)));
  125. $this->assertPersistentConnection($connection1);
  126. $connection2 = new PhpiredisStreamConnection($this->getParameters(array('persistent' => true)));
  127. $this->assertPersistentConnection($connection2);
  128. $connection3 = new PhpiredisStreamConnection($this->getParameters(array('persistent' => '1')));
  129. $this->assertPersistentConnection($connection3);
  130. $connection4 = new PhpiredisStreamConnection($this->getParameters(array('persistent' => 'true')));
  131. $this->assertPersistentConnection($connection4);
  132. $connection1->disconnect();
  133. }
  134. /**
  135. * @group connected
  136. */
  137. public function testPersistentConnectionsToSameNodeShareResource()
  138. {
  139. if ($this->isHHVM()) {
  140. $this->markTestSkipped('This test does not currently work on HHVM.');
  141. }
  142. $connection1 = new PhpiredisStreamConnection($this->getParameters(array('persistent' => true)));
  143. $connection2 = new PhpiredisStreamConnection($this->getParameters(array('persistent' => true)));
  144. $this->assertPersistentConnection($connection1);
  145. $this->assertPersistentConnection($connection2);
  146. $this->assertSame($connection1->getResource(), $connection2->getResource());
  147. $connection1->disconnect();
  148. }
  149. /**
  150. * @group connected
  151. */
  152. public function testPersistentConnectionsToSameNodeDoNotShareResourceUsingDifferentPersistentID()
  153. {
  154. if ($this->isHHVM()) {
  155. $this->markTestSkipped('This test does not currently work on HHVM.');
  156. }
  157. $connection1 = new PhpiredisStreamConnection($this->getParameters(array('persistent' => 'conn1')));
  158. $connection2 = new PhpiredisStreamConnection($this->getParameters(array('persistent' => 'conn2')));
  159. $this->assertPersistentConnection($connection1);
  160. $this->assertPersistentConnection($connection2);
  161. $this->assertNotSame($connection1->getResource(), $connection2->getResource());
  162. }
  163. /**
  164. * @medium
  165. * @group connected
  166. * @expectedException \Predis\Protocol\ProtocolException
  167. * @expectedExceptionMessage Protocol error, got "P" as reply type byte
  168. */
  169. public function testThrowsExceptionOnProtocolDesynchronizationErrors()
  170. {
  171. $connection = $this->getConnection($profile);
  172. $socket = $connection->getResource();
  173. $connection->writeRequest($profile->createCommand('ping'));
  174. fread($socket, 1);
  175. $connection->read();
  176. }
  177. }