PageRenderTime 46ms CodeModel.GetById 21ms RepoModel.GetById 1ms app.codeStats 0ms

/tests/Zend/Cloud/QueueService/TestCase.php

https://github.com/shevron/zf2
PHP | 330 lines | 248 code | 35 blank | 47 comment | 11 complexity | 75035a855f71980d4d67e3deae741c4f MD5 | raw file
  1. <?php
  2. /**
  3. * Zend Framework (http://framework.zend.com/)
  4. *
  5. * @link http://github.com/zendframework/zf2 for the canonical source repository
  6. * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
  7. * @license http://framework.zend.com/license/new-bsd New BSD License
  8. * @package Zend_Cloud
  9. */
  10. namespace ZendTest\Cloud\QueueService;
  11. use Zend\Cloud\QueueService\Adapter;
  12. use Zend\Config\Config;
  13. use Zend\Cloud\QueueService\Factory,
  14. PHPUnit_Framework_TestCase as PHPUnitTestCase;
  15. /**
  16. * This class forces the adapter tests to implement tests for all methods on
  17. * Zend\Cloud_QueueService.
  18. *
  19. * @category Zend
  20. * @package Zend_Cloud_QueueService
  21. * @subpackage UnitTests
  22. */
  23. abstract class TestCase extends PHPUnitTestCase
  24. {
  25. /**
  26. * Reference to queue adapter to test
  27. *
  28. * @var \Zend\Cloud\QueueService
  29. */
  30. protected $_commonQueue;
  31. protected $_dummyNamePrefix = '/TestItem';
  32. protected $_dummyDataPrefix = 'TestData';
  33. protected $_clientType = 'stdClass';
  34. /**
  35. * Config object
  36. *
  37. * @var \Zend\Config\Config
  38. */
  39. protected $_config;
  40. /**
  41. * Period to wait for propagation in seconds
  42. * Should be set by adapter
  43. *
  44. * @var int
  45. */
  46. protected $_waitPeriod = 1;
  47. public function setUp()
  48. {
  49. $this->_config = $this->_getConfig();
  50. $this->_commonQueue = Factory::getAdapter($this->_config);
  51. }
  52. public function testGetClient()
  53. {
  54. $this->assertInstanceOf($this->_clientType, $this->_commonQueue->getClient());
  55. }
  56. public function testCreateQueue()
  57. {
  58. try {
  59. // Create timeout default should be 30 seconds
  60. $startTime = time();
  61. $queueURL = $this->_commonQueue->createQueue('test-create-queue');
  62. $endTime = time();
  63. $this->assertNotNull($queueURL);
  64. $this->assertLessThan(30, $endTime - $startTime);
  65. $this->_commonQueue->deleteQueue($queueURL);
  66. } catch (Exception $e) {
  67. if(isset($queueURL)) $this->_commonQueue->deleteQueue($queueURL);
  68. throw $e;
  69. }
  70. }
  71. public function testDeleteQueue()
  72. {
  73. try {
  74. $queueURL = $this->_commonQueue->createQueue('test-delete-queue');
  75. $this->assertNotNull($queueURL);
  76. $this->_commonQueue->deleteQueue($queueURL);
  77. $this->_wait();
  78. $this->_wait();
  79. $this->_wait();
  80. try {
  81. $messages = $this->_commonQueue->receiveMessages($queueURL);
  82. $this->fail('An exception should have been thrown if the queue has been deleted; received ' . var_export($messages, 1));
  83. } catch (\Zend\Cloud\QueueService\Exception\ExceptionInterface $e) {
  84. $this->assertTrue(true);
  85. $this->_commonQueue->deleteQueue($queueURL);
  86. return;
  87. }
  88. } catch (Exception $e) {
  89. if(isset($queueURL)) $this->_commonQueue->deleteQueue($queueURL);
  90. throw $e;
  91. }
  92. }
  93. public function testListQueues()
  94. {
  95. try {
  96. $queues = $this->_commonQueue->listQueues();
  97. $this->_wait();
  98. if (count($queues)) {
  99. foreach ($queues as $queue) {
  100. $this->_commonQueue->deleteQueue($queue);
  101. $this->_wait();
  102. }
  103. }
  104. $queueURL1 = $this->_commonQueue->createQueue('test-list-queue1');
  105. $this->assertNotNull($queueURL1);
  106. $this->_wait();
  107. $queueURL2 = $this->_commonQueue->createQueue('test-list-queue2');
  108. $this->assertNotNull($queueURL2);
  109. $this->_wait();
  110. $queues = $this->_commonQueue->listQueues();
  111. $errorMessage = "Final queues are ";
  112. foreach ($queues as $queue) {
  113. $errorMessage .= $queue . ', ';
  114. }
  115. $errorMessage .= "\nHave queue URLs $queueURL1 and $queueURL2\n";
  116. $this->assertEquals(2, count($queues), $errorMessage);
  117. // PHPUnit does an identical comparison for assertContains(), so we just
  118. // use assertTrue and in_array()
  119. $this->assertTrue(in_array($queueURL1, $queues));
  120. $this->assertTrue(in_array($queueURL2, $queues));
  121. $this->_commonQueue->deleteQueue($queueURL1);
  122. $this->_commonQueue->deleteQueue($queueURL2);
  123. } catch (Exception $e) {
  124. if (isset($queueURL1)) {
  125. $this->_commonQueue->deleteQueue($queueURL1);
  126. }
  127. if (isset($queueURL2)) {
  128. $this->_commonQueue->deleteQueue($queueURL2);
  129. }
  130. throw $e;
  131. }
  132. }
  133. public function testStoresAndFetchesQueueMetadata()
  134. {
  135. try {
  136. $queueURL = $this->_commonQueue->createQueue('test-fetch-queue-metadata');
  137. $this->assertNotNull($queueURL);
  138. $this->_wait();
  139. $this->_commonQueue->storeQueueMetadata($queueURL, array('purpose' => 'test'));
  140. $this->_wait();
  141. $metadata = $this->_commonQueue->fetchQueueMetadata($queueURL);
  142. $this->assertTrue(is_array($metadata));
  143. $this->assertGreaterThan(0, count($metadata));
  144. $this->_commonQueue->deleteQueue($queueURL);
  145. } catch (Exception $e) {
  146. if (isset($queueURL)) {
  147. $this->_commonQueue->deleteQueue($queueURL);
  148. }
  149. throw $e;
  150. }
  151. }
  152. public function testSendMessage()
  153. {
  154. try {
  155. $queueURL = $this->_commonQueue->createQueue('test-send-message');
  156. $this->assertNotNull($queueURL);
  157. $this->_wait();
  158. $message = 'testSendMessage - Message 1';
  159. $this->_commonQueue->sendMessage($queueURL, $message);
  160. $this->_wait();
  161. $receivedMessages = $this->_commonQueue->receiveMessages($queueURL);
  162. $this->assertInstanceOf('Zend\Cloud\QueueService\MessageSet', $receivedMessages);
  163. $this->assertEquals(1, count($receivedMessages));
  164. foreach ($receivedMessages as $m) {
  165. $this->assertEquals($message, $m->getBody());
  166. }
  167. $this->_commonQueue->deleteQueue($queueURL);
  168. } catch (Exception $e) {
  169. if(isset($queueURL)) $this->_commonQueue->deleteQueue($queueURL);
  170. throw $e;
  171. }
  172. }
  173. public function testReceiveMessages()
  174. {
  175. $queueURL = null;
  176. try {
  177. $queueURL = $this->_commonQueue->createQueue('test-receive-messages');
  178. $this->assertNotNull($queueURL);
  179. $this->_wait();
  180. $message1 = 'testReceiveMessages - Message 1';
  181. $message2 = 'testReceiveMessages - Message 2';
  182. $this->_commonQueue->sendMessage($queueURL, $message1);
  183. $this->_commonQueue->sendMessage($queueURL, $message2);
  184. $this->_wait();
  185. $this->_wait();
  186. // receive one message
  187. $receivedMessages1 = $this->_commonQueue->receiveMessages($queueURL);
  188. $this->assertInstanceOf('Zend\Cloud\QueueService\MessageSet', $receivedMessages1);
  189. $this->assertEquals(1, count($receivedMessages1));
  190. foreach ($receivedMessages1 as $receivedMessage1) {
  191. $this->assertInstanceOf('Zend\Cloud\QueueService\Message', $receivedMessage1);
  192. }
  193. // cleanup the queue
  194. foreach ($receivedMessages1 as $message) {
  195. $this->_commonQueue->deleteMessage($queueURL, $message);
  196. }
  197. $this->_wait();
  198. $this->_wait();
  199. // send 2 messages again
  200. $this->_commonQueue->sendMessage($queueURL, $message1);
  201. $this->_commonQueue->sendMessage($queueURL, $message2);
  202. $this->_wait();
  203. $this->_wait();
  204. $this->_wait();
  205. $this->_wait();
  206. // receive both messages
  207. $receivedMessages2 = $this->_commonQueue->receiveMessages($queueURL, 2);
  208. $this->assertInstanceOf('Zend\Cloud\QueueService\MessageSet', $receivedMessages2);
  209. $this->assertEquals(2, count($receivedMessages2));
  210. $tests = array();
  211. foreach ($receivedMessages2 as $message) {
  212. $tests[] = $message;
  213. }
  214. $texts = array($tests[0]->getBody(), $tests[1]->getBody());
  215. $this->assertContains($message1, $texts);
  216. $this->assertContains($message2, $texts);
  217. $this->_commonQueue->deleteQueue($queueURL);
  218. } catch (Exception $e) {
  219. if (isset($queueURL)) {
  220. $this->_commonQueue->deleteQueue($queueURL);
  221. }
  222. throw $e;
  223. }
  224. }
  225. public function testDeleteMessage()
  226. {
  227. try {
  228. $queueURL = $this->_commonQueue->createQueue('test-delete-messages');
  229. $this->assertNotNull($queueURL);
  230. $this->_wait();
  231. $this->_wait();
  232. $message1 = 'testDeleteMessage - Message 1';
  233. $this->_commonQueue->sendMessage($queueURL, $message1);
  234. $this->_wait();
  235. $this->_wait();
  236. $receivedMessages1 = $this->_commonQueue->receiveMessages($queueURL);
  237. // should receive one $message1
  238. $this->assertInstanceOf('Zend\Cloud\QueueService\MessageSet', $receivedMessages1);
  239. $this->assertEquals(1, count($receivedMessages1));
  240. foreach ($receivedMessages1 as $receivedMessage1) {
  241. $this->assertEquals($message1, $receivedMessage1->getBody());
  242. }
  243. $this->_commonQueue->deleteMessage($queueURL, $receivedMessage1);
  244. $this->_wait();
  245. $this->_wait();
  246. // now there should be no messages left
  247. $receivedMessages2 = $this->_commonQueue->receiveMessages($queueURL);
  248. $this->assertInstanceOf('Zend\Cloud\QueueService\MessageSet', $receivedMessages2);
  249. $this->assertEquals(0, count($receivedMessages2));
  250. $this->_commonQueue->deleteQueue($queueURL);
  251. } catch (Exception $e) {
  252. if(isset($queueURL)) $this->_commonQueue->deleteQueue($queueURL);
  253. throw $e;
  254. }
  255. }
  256. public function testPeekMessages()
  257. {
  258. try {
  259. $queueURL = $this->_commonQueue->createQueue('test-peek-messages');
  260. $this->assertNotNull($queueURL);
  261. $this->_wait();
  262. $message1 = 'testPeekMessage - Message 1';
  263. $this->_commonQueue->sendMessage($queueURL, $message1);
  264. $this->_wait();
  265. $peekedMessages = $this->_commonQueue->peekMessages($queueURL, 1);
  266. foreach ($peekedMessages as $message) {
  267. $this->assertEquals($message1, $message->getBody());
  268. break;
  269. }
  270. // and again
  271. $peekedMessages = $this->_commonQueue->peekMessages($queueURL, 1);
  272. foreach ($peekedMessages as $message) {
  273. $this->assertEquals($message1, $message->getBody());
  274. break;
  275. }
  276. $this->_commonQueue->deleteQueue($queueURL);
  277. } catch (Exception $e) {
  278. if(isset($queueURL)) $this->_commonQueue->deleteQueue($queueURL);
  279. throw $e;
  280. }
  281. }
  282. protected function _wait($duration = null)
  283. {
  284. if (null === $duration) {
  285. $duration = $this->_waitPeriod;
  286. }
  287. sleep($duration);
  288. }
  289. /**
  290. * Get adapter configuration for concrete test
  291. *
  292. * @returns \Zend\Config\Config
  293. */
  294. abstract protected function _getConfig();
  295. }