PageRenderTime 26ms CodeModel.GetById 13ms RepoModel.GetById 1ms app.codeStats 0ms

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

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