PageRenderTime 52ms CodeModel.GetById 22ms RepoModel.GetById 1ms app.codeStats 0ms

/branches/v2.0.0/tests/Microsoft/WindowsAzure/QueueStorageTest.php

#
PHP | 384 lines | 239 code | 56 blank | 89 comment | 21 complexity | 81828a80a5e14a70697e5a9f78d6153d MD5 | raw file
Possible License(s): BSD-3-Clause
  1. <?php
  2. /**
  3. * Copyright (c) 2009 - 2010, RealDolmen
  4. * All rights reserved.
  5. *
  6. * Redistribution and use in source and binary forms, with or without
  7. * modification, are permitted provided that the following conditions are met:
  8. * * Redistributions of source code must retain the above copyright
  9. * notice, this list of conditions and the following disclaimer.
  10. * * Redistributions in binary form must reproduce the above copyright
  11. * notice, this list of conditions and the following disclaimer in the
  12. * documentation and/or other materials provided with the distribution.
  13. * * Neither the name of RealDolmen nor the
  14. * names of its contributors may be used to endorse or promote products
  15. * derived from this software without specific prior written permission.
  16. *
  17. * THIS SOFTWARE IS PROVIDED BY RealDolmen ''AS IS'' AND ANY
  18. * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
  19. * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  20. * DISCLAIMED. IN NO EVENT SHALL RealDolmen BE LIABLE FOR ANY
  21. * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
  22. * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  23. * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  24. * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  25. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  26. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  27. *
  28. * @category Microsoft
  29. * @package Microsoft_WindowsAzure
  30. * @subpackage UnitTests
  31. * @version $Id: QueueStorageTest.php 24241 2009-07-22 09:43:13Z unknown $
  32. * @copyright Copyright (c) 2009 - 2010, RealDolmen (http://www.realdolmen.com)
  33. * @license http://phpazure.codeplex.com/license
  34. */
  35. if (!defined('PHPUnit_MAIN_METHOD')) {
  36. define('PHPUnit_MAIN_METHOD', 'Microsoft_WindowsAzure_QueueStorageTest::main');
  37. }
  38. /**
  39. * Test helpers
  40. */
  41. require_once dirname(__FILE__) . '/../../TestHelper.php';
  42. require_once dirname(__FILE__) . '/../../TestConfiguration.php';
  43. require_once 'PHPUnit/Framework/TestCase.php';
  44. /** Microsoft_WindowsAzure_Storage_Queue */
  45. require_once 'Microsoft/WindowsAzure/Storage/Queue.php';
  46. /**
  47. * @category Microsoft
  48. * @package Microsoft_WindowsAzure
  49. * @subpackage UnitTests
  50. * @version $Id: QueueStorageTest.php 24241 2009-07-22 09:43:13Z unknown $
  51. * @copyright Copyright (c) 2009 - 2010, RealDolmen (http://www.realdolmen.com)
  52. * @license http://phpazure.codeplex.com/license
  53. */
  54. class Microsoft_WindowsAzure_QueueStorageTest extends PHPUnit_Framework_TestCase
  55. {
  56. public static function main()
  57. {
  58. if (TESTS_QUEUE_RUNTESTS) {
  59. $suite = new PHPUnit_Framework_TestSuite("Microsoft_WindowsAzure_QueueStorageTest");
  60. $result = PHPUnit_TextUI_TestRunner::run($suite);
  61. }
  62. }
  63. /**
  64. * Test setup
  65. */
  66. protected function setUp()
  67. {
  68. }
  69. /**
  70. * Test teardown
  71. */
  72. protected function tearDown()
  73. {
  74. $storageClient = $this->createStorageInstance();
  75. for ($i = 1; $i <= self::$uniqId; $i++)
  76. {
  77. try { $storageClient->deleteQueue(TESTS_QUEUE_PREFIX . $i); } catch (Exception $e) { }
  78. }
  79. }
  80. protected function createStorageInstance()
  81. {
  82. $storageClient = null;
  83. if (TESTS_QUEUE_RUNONPROD) {
  84. $storageClient = new Microsoft_WindowsAzure_Storage_Queue(TESTS_QUEUE_HOST_PROD, TESTS_STORAGE_ACCOUNT_PROD, TESTS_STORAGE_KEY_PROD, false, Microsoft_WindowsAzure_RetryPolicy_RetryPolicyAbstract::retryN(10, 250));
  85. } else {
  86. $storageClient = new Microsoft_WindowsAzure_Storage_Queue(TESTS_QUEUE_HOST_DEV, TESTS_STORAGE_ACCOUNT_DEV, TESTS_STORAGE_KEY_DEV, true, Microsoft_WindowsAzure_RetryPolicy_RetryPolicyAbstract::retryN(10, 250));
  87. }
  88. if (TESTS_STORAGE_USEPROXY) {
  89. $storageClient->setProxy(TESTS_STORAGE_USEPROXY, TESTS_STORAGE_PROXY, TESTS_STORAGE_PROXY_PORT, TESTS_STORAGE_PROXY_CREDENTIALS);
  90. }
  91. return $storageClient;
  92. }
  93. protected static $uniqId = 0;
  94. protected function generateName()
  95. {
  96. self::$uniqId++;
  97. return TESTS_QUEUE_PREFIX . self::$uniqId;
  98. }
  99. /**
  100. * Test queue exists
  101. */
  102. public function testQueueExists()
  103. {
  104. if (TESTS_QUEUE_RUNTESTS) {
  105. $queueName1 = $this->generateName();
  106. $queueName2 = $this->generateName();
  107. $storageClient = $this->createStorageInstance();
  108. $storageClient->createQueue($queueName1);
  109. $storageClient->createQueue($queueName2);
  110. $result = $storageClient->queueExists($queueName1);
  111. $this->assertTrue($result);
  112. $result = $storageClient->queueExists(md5(time()));
  113. $this->assertFalse($result);
  114. }
  115. }
  116. /**
  117. * Test create queue
  118. */
  119. public function testCreateQueue()
  120. {
  121. if (TESTS_QUEUE_RUNTESTS) {
  122. $queueName = $this->generateName();
  123. $storageClient = $this->createStorageInstance();
  124. $result = $storageClient->createQueue($queueName);
  125. $this->assertEquals($queueName, $result->Name);
  126. }
  127. }
  128. /**
  129. * Test set queue metadata
  130. */
  131. public function testSetQueueMetadata()
  132. {
  133. if (TESTS_QUEUE_RUNTESTS) {
  134. $queueName = $this->generateName();
  135. $storageClient = $this->createStorageInstance();
  136. $storageClient->createQueue($queueName);
  137. $storageClient->setQueueMetadata($queueName, array(
  138. 'createdby' => 'PHPAzure',
  139. ));
  140. $metadata = $storageClient->getQueueMetadata($queueName);
  141. $this->assertEquals('PHPAzure', $metadata['createdby']);
  142. }
  143. }
  144. /**
  145. * Test get queue
  146. */
  147. public function testGetQueue()
  148. {
  149. if (TESTS_QUEUE_RUNTESTS) {
  150. $queueName = $this->generateName();
  151. $storageClient = $this->createStorageInstance();
  152. $storageClient->createQueue($queueName);
  153. $queue = $storageClient->getQueue($queueName);
  154. $this->assertEquals($queueName, $queue->Name);
  155. $this->assertEquals(0, $queue->ApproximateMessageCount);
  156. }
  157. }
  158. /**
  159. * Test list queues
  160. */
  161. public function testListQueues()
  162. {
  163. if (TESTS_QUEUE_RUNTESTS) {
  164. $queueName1 = 'testlist1';
  165. $queueName2 = 'testlist2';
  166. $queueName3 = 'testlist3';
  167. $storageClient = $this->createStorageInstance();
  168. $storageClient->createQueue($queueName1);
  169. $storageClient->createQueue($queueName2);
  170. $storageClient->createQueue($queueName3);
  171. $result1 = $storageClient->listQueues('testlist');
  172. $result2 = $storageClient->listQueues('testlist', 1);
  173. // cleanup first
  174. $storageClient->deleteQueue($queueName1);
  175. $storageClient->deleteQueue($queueName2);
  176. $storageClient->deleteQueue($queueName3);
  177. $this->assertEquals(3, count($result1));
  178. $this->assertEquals($queueName2, $result1[1]->Name);
  179. $this->assertEquals(1, count($result2));
  180. }
  181. }
  182. /**
  183. * Test list queues with metadata
  184. */
  185. public function testListQueuesWithMetadata()
  186. {
  187. if (TESTS_QUEUE_RUNTESTS) {
  188. $queueName = $this->generateName();
  189. $storageClient = $this->createStorageInstance();
  190. $storageClient->createQueue($queueName, array(
  191. 'createdby' => 'PHPAzure',
  192. 'ownedby' => 'PHPAzure',
  193. ));
  194. $result = $storageClient->listQueues($queueName, null, null, 'metadata');
  195. $this->assertEquals('PHPAzure', $result[0]->Metadata['createdby']);
  196. $this->assertEquals('PHPAzure', $result[0]->Metadata['ownedby']);
  197. }
  198. }
  199. /**
  200. * Test put message
  201. */
  202. public function testPutMessage()
  203. {
  204. if (TESTS_QUEUE_RUNTESTS) {
  205. $queueName = $this->generateName();
  206. $storageClient = $this->createStorageInstance();
  207. $storageClient->createQueue($queueName);
  208. $storageClient->putMessage($queueName, 'Test message', 120);
  209. sleep(5); // wait for the message to appear in the queue...
  210. $messages = $storageClient->getMessages($queueName);
  211. $this->assertEquals(1, count($messages));
  212. $this->assertEquals('Test message', $messages[0]->MessageText);
  213. }
  214. }
  215. /**
  216. * Test get messages
  217. */
  218. public function testGetMessages()
  219. {
  220. if (TESTS_QUEUE_RUNTESTS) {
  221. $queueName = $this->generateName();
  222. $storageClient = $this->createStorageInstance();
  223. $storageClient->createQueue($queueName);
  224. $storageClient->putMessage($queueName, 'Test message 1', 120);
  225. $storageClient->putMessage($queueName, 'Test message 2', 120);
  226. $storageClient->putMessage($queueName, 'Test message 3', 120);
  227. $storageClient->putMessage($queueName, 'Test message 4', 120);
  228. sleep(5); // wait for the messages to appear in the queue...
  229. $messages1 = $storageClient->getMessages($queueName, 2);
  230. $messages2 = $storageClient->getMessages($queueName, 2);
  231. $messages3 = $storageClient->getMessages($queueName);
  232. $this->assertEquals(2, count($messages1));
  233. $this->assertEquals(2, count($messages2));
  234. $this->assertEquals(0, count($messages3));
  235. }
  236. }
  237. /**
  238. * Test peek messages
  239. */
  240. public function testPeekMessages()
  241. {
  242. if (TESTS_QUEUE_RUNTESTS) {
  243. $queueName = $this->generateName();
  244. $storageClient = $this->createStorageInstance();
  245. $storageClient->createQueue($queueName);
  246. $storageClient->putMessage($queueName, 'Test message 1', 120);
  247. $storageClient->putMessage($queueName, 'Test message 2', 120);
  248. $storageClient->putMessage($queueName, 'Test message 3', 120);
  249. $storageClient->putMessage($queueName, 'Test message 4', 120);
  250. sleep(5); // wait for the messages to appear in the queue...
  251. $messages1 = $storageClient->peekMessages($queueName, 4);
  252. $messages2 = $storageClient->getMessages($queueName, 4);
  253. $this->assertEquals(4, count($messages1));
  254. $this->assertEquals(4, count($messages2));
  255. }
  256. }
  257. /**
  258. * Test dequeuecount
  259. */
  260. public function testDequeueCount()
  261. {
  262. if (TESTS_QUEUE_RUNTESTS) {
  263. $queueName = $this->generateName();
  264. $storageClient = $this->createStorageInstance();
  265. $storageClient->createQueue($queueName);
  266. $storageClient->putMessage($queueName, 'Test message 1', 120);
  267. sleep(5); // wait for the message to appear in the queue...
  268. $expectedDequeueCount = 3;
  269. for ($i = 0; $i < $expectedDequeueCount - 1; $i++) {
  270. $storageClient->getMessages($queueName, 1, 1);
  271. sleep(3);
  272. }
  273. $messages = $storageClient->getMessages($queueName, 1);
  274. $this->assertEquals($expectedDequeueCount, $messages[0]->DequeueCount);
  275. }
  276. }
  277. /**
  278. * Test clear messages
  279. */
  280. public function testClearMessages()
  281. {
  282. if (TESTS_QUEUE_RUNTESTS) {
  283. $queueName = $this->generateName();
  284. $storageClient = $this->createStorageInstance();
  285. $storageClient->createQueue($queueName);
  286. $storageClient->putMessage($queueName, 'Test message 1', 120);
  287. $storageClient->putMessage($queueName, 'Test message 2', 120);
  288. $storageClient->putMessage($queueName, 'Test message 3', 120);
  289. $storageClient->putMessage($queueName, 'Test message 4', 120);
  290. sleep(5); // wait for the messages to appear in the queue...
  291. $messages1 = $storageClient->peekMessages($queueName, 4);
  292. $storageClient->clearMessages($queueName);
  293. sleep(5); // wait for the GC...
  294. $messages2 = $storageClient->peekMessages($queueName, 4);
  295. $this->assertEquals(4, count($messages1));
  296. $this->assertEquals(0, count($messages2));
  297. }
  298. }
  299. /**
  300. * Test delete message
  301. */
  302. public function testDeleteMessage()
  303. {
  304. if (TESTS_QUEUE_RUNTESTS) {
  305. $queueName = $this->generateName();
  306. $storageClient = $this->createStorageInstance();
  307. $storageClient->createQueue($queueName);
  308. $storageClient->putMessage($queueName, 'Test message 1', 120);
  309. $storageClient->putMessage($queueName, 'Test message 2', 120);
  310. $storageClient->putMessage($queueName, 'Test message 3', 120);
  311. $storageClient->putMessage($queueName, 'Test message 4', 120);
  312. sleep(5); // wait for the messages to appear in the queue...
  313. $messages1 = $storageClient->getMessages($queueName, 2, 10);
  314. foreach ($messages1 as $message)
  315. {
  316. $storageClient->deleteMessage($queueName, $message);
  317. }
  318. sleep(5); // wait for the GC...
  319. $messages2 = $storageClient->getMessages($queueName, 4);
  320. $this->assertEquals(2, count($messages1));
  321. $this->assertEquals(2, count($messages2));
  322. }
  323. }
  324. }
  325. // Call Microsoft_WindowsAzure_QueueStorageTest::main() if this source file is executed directly.
  326. if (PHPUnit_MAIN_METHOD == "Microsoft_WindowsAzure_QueueStorageTest::main") {
  327. Microsoft_WindowsAzure_QueueStorageTest::main();
  328. }