PageRenderTime 104ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 1ms

/tests/functional/WindowsAzure/Queue/QueueServiceFunctionalTest.php

http://github.com/WindowsAzure/azure-sdk-for-php
PHP | 1362 lines | 975 code | 160 blank | 227 comment | 224 complexity | 3d772836af988ed5af0a195cd8fe316a MD5 | raw file

Large files files are truncated, but you can click here to view the full file

  1. <?php
  2. /**
  3. * LICENSE: Licensed under the Apache License, Version 2.0 (the "License");
  4. * you may not use this file except in compliance with the License.
  5. * You may obtain a copy of the License at
  6. * http://www.apache.org/licenses/LICENSE-2.0
  7. *
  8. * Unless required by applicable law or agreed to in writing, software
  9. * distributed under the License is distributed on an "AS IS" BASIS,
  10. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  11. * See the License for the specific language governing permissions and
  12. * limitations under the License.
  13. *
  14. * PHP version 5
  15. *
  16. * @category Microsoft
  17. * @package Tests\Functional\WindowsAzure\Queue
  18. * @author Azure PHP SDK <azurephpsdk@microsoft.com>
  19. * @copyright 2012 Microsoft Corporation
  20. * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
  21. * @link https://github.com/windowsazure/azure-sdk-for-php
  22. */
  23. namespace Tests\Functional\WindowsAzure\Queue;
  24. use \HTTP_Request2_LogicException;
  25. use WindowsAzure\Common\ServiceException;
  26. use WindowsAzure\Common\Configuration;
  27. use WindowsAzure\Common\Models\Logging;
  28. use WindowsAzure\Common\Models\Metrics;
  29. use WindowsAzure\Common\Models\RetentionPolicy;
  30. use WindowsAzure\Common\Models\ServiceProperties;
  31. use WindowsAzure\Queue\Models\CreateMessageOptions;
  32. use WindowsAzure\Queue\Models\CreateQueueOptions;
  33. use WindowsAzure\Queue\Models\ListMessagesOptions;
  34. use WindowsAzure\Queue\Models\ListQueuesOptions;
  35. use WindowsAzure\Queue\Models\PeekMessagesOptions;
  36. use WindowsAzure\Queue\Models\QueueServiceOptions;
  37. class QueueServiceFunctionalTest extends FunctionalTestBase {
  38. /**
  39. * @covers WindowsAzure\Queue\QueueRestProxy::getServiceProperties
  40. * @covers WindowsAzure\Queue\QueueRestProxy::setServiceProperties
  41. */
  42. public function testGetServicePropertiesNoOptions() {
  43. $serviceProperties = QueueServiceFunctionalTestData::getDefaultServiceProperties();
  44. $shouldReturn = false;
  45. try {
  46. $this->restProxy->setServiceProperties($serviceProperties);
  47. $this->assertFalse(Configuration::isEmulated(), 'Should succeed when not running in emulator');
  48. } catch (ServiceException $e) {
  49. // Expect failure in emulator, as v1.6 doesn't support this method
  50. if (Configuration::isEmulated()) {
  51. $this->assertEquals(400, $e->getCode(), 'getCode');
  52. $shouldReturn = true;
  53. } else {
  54. throw $e;
  55. }
  56. }
  57. if($shouldReturn) {
  58. return;
  59. }
  60. $this->getServicePropertiesWorker(null);
  61. }
  62. /**
  63. * @covers WindowsAzure\Queue\QueueRestProxy::getServiceProperties
  64. * @covers WindowsAzure\Queue\QueueRestProxy::setServiceProperties
  65. */
  66. public function testGetServiceProperties() {
  67. $serviceProperties = QueueServiceFunctionalTestData::getDefaultServiceProperties();
  68. $shouldReturn = false;
  69. try {
  70. $this->restProxy->setServiceProperties($serviceProperties);
  71. $this->assertFalse(Configuration::isEmulated(), 'Should succeed when not running in emulator');
  72. } catch (ServiceException $e) {
  73. // Expect failure in emulator, as v1.6 doesn't support this method
  74. if (Configuration::isEmulated()) {
  75. $this->assertEquals(400, $e->getCode(), 'getCode');
  76. $shouldReturn = true;
  77. } else {
  78. throw $e;
  79. }
  80. }
  81. if($shouldReturn) {
  82. return;
  83. }
  84. // Now look at the combos.
  85. $interestingTimeouts = QueueServiceFunctionalTestData::getInterestingTimeoutValues();
  86. foreach($interestingTimeouts as $timeout) {
  87. $options = new QueueServiceOptions();
  88. $options->setTimeout($timeout);
  89. $this->getServicePropertiesWorker($options);
  90. }
  91. }
  92. private function getServicePropertiesWorker($options) {
  93. self::println( 'Trying $options: ' . self::tmptostring($options));
  94. $effOptions = (is_null($options) ? new QueueServiceOptions() : $options);
  95. try {
  96. $ret = (is_null($options) ? $this->restProxy->getServiceProperties() : $this->restProxy->getServiceProperties($effOptions));
  97. if (!is_null($effOptions->getTimeout()) && $effOptions->getTimeout() < 1) {
  98. $this->True('Expect negative timeouts in $options to throw', false);
  99. } else {
  100. $this->assertFalse(Configuration::isEmulated(), 'Should succeed when not running in emulator');
  101. }
  102. $this->verifyServicePropertiesWorker($ret, null);
  103. }
  104. catch (ServiceException $e) {
  105. if (Configuration::isEmulated()) {
  106. if (!is_null($options->getTimeout()) && $options->getTimeout() < 0) {
  107. $this->assertEquals(500, $e->getCode(), 'getCode');
  108. } else {
  109. // Expect failure in emulator, as v1.6 doesn't support this method
  110. $this->assertEquals(400, $e->getCode(), 'getCode');
  111. }
  112. } else {
  113. if (is_null($effOptions->getTimeout()) || $effOptions->getTimeout() >= 1) {
  114. $this->assertNull($e, 'Expect positive timeouts in $options to be fine');
  115. }
  116. else {
  117. $this->assertEquals(500, $e->getCode(), 'getCode');
  118. }
  119. }
  120. }
  121. }
  122. private function verifyServicePropertiesWorker($ret, $serviceProperties) {
  123. if (is_null($serviceProperties)) {
  124. $serviceProperties = QueueServiceFunctionalTestData::getDefaultServiceProperties();
  125. }
  126. $sp = $ret->getValue();
  127. $this->assertNotNull($sp, 'getValue should be non-null');
  128. $l = $sp->getLogging();
  129. $this->assertNotNull($l, 'getValue()->getLogging() should be non-null');
  130. $this->assertEquals($serviceProperties->getLogging()->getVersion(), $l->getVersion(), 'getValue()->getLogging()->getVersion');
  131. $this->assertEquals($serviceProperties->getLogging()->getDelete(), $l->getDelete(), 'getValue()->getLogging()->getDelete');
  132. $this->assertEquals($serviceProperties->getLogging()->getRead(), $l->getRead(), 'getValue()->getLogging()->getRead');
  133. $this->assertEquals($serviceProperties->getLogging()->getWrite(), $l->getWrite(), 'getValue()->getLogging()->getWrite');
  134. $r = $l->getRetentionPolicy();
  135. $this->assertNotNull($r, 'getValue()->getLogging()->getRetentionPolicy should be non-null');
  136. $this->assertEquals($serviceProperties->getLogging()->getRetentionPolicy()->getDays(), $r->getDays(), 'getValue()->getLogging()->getRetentionPolicy()->getDays');
  137. $m = $sp->getMetrics();
  138. $this->assertNotNull($m, 'getValue()->getMetrics() should be non-null');
  139. $this->assertEquals($serviceProperties->getMetrics()->getVersion(), $m->getVersion(), 'getValue()->getMetrics()->getVersion');
  140. $this->assertEquals($serviceProperties->getMetrics()->getEnabled(), $m->getEnabled(), 'getValue()->getMetrics()->getEnabled');
  141. $this->assertEquals($serviceProperties->getMetrics()->getIncludeAPIs(), $m->getIncludeAPIs(), 'getValue()->getMetrics()->getIncludeAPIs');
  142. $r = $m->getRetentionPolicy();
  143. $this->assertNotNull($r, 'getValue()->getMetrics()->getRetentionPolicy should be non-null');
  144. $this->assertEquals($serviceProperties->getMetrics()->getRetentionPolicy()->getDays(), $r->getDays(), 'getValue()->getMetrics()->getRetentionPolicy()->getDays');
  145. }
  146. /**
  147. * @covers WindowsAzure\Queue\QueueRestProxy::getServiceProperties
  148. * @covers WindowsAzure\Queue\QueueRestProxy::setServiceProperties
  149. */
  150. public function testSetServicePropertiesNoOptions() {
  151. $serviceProperties = QueueServiceFunctionalTestData::getDefaultServiceProperties();
  152. $this->setServicePropertiesWorker($serviceProperties, null);
  153. }
  154. /**
  155. * @covers WindowsAzure\Queue\QueueRestProxy::getServiceProperties
  156. * @covers WindowsAzure\Queue\QueueRestProxy::setServiceProperties
  157. */
  158. public function testSetServiceProperties() {
  159. $interestingServiceProperties = QueueServiceFunctionalTestData::getInterestingServiceProperties();
  160. foreach($interestingServiceProperties as $serviceProperties) {
  161. $interestingTimeouts = QueueServiceFunctionalTestData::getInterestingTimeoutValues();
  162. foreach($interestingTimeouts as $timeout) {
  163. $options = new QueueServiceOptions();
  164. $options->setTimeout($timeout);
  165. $this->setServicePropertiesWorker($serviceProperties, $options);
  166. }
  167. }
  168. if (!Configuration::isEmulated()) {
  169. $this->restProxy->setServiceProperties($interestingServiceProperties[0]);
  170. }
  171. }
  172. private function setServicePropertiesWorker($serviceProperties, $options) {
  173. try {
  174. if (is_null($options)) {
  175. $this->restProxy->setServiceProperties($serviceProperties);
  176. } else {
  177. $this->restProxy->setServiceProperties($serviceProperties, $options);
  178. }
  179. if (is_null($options)) {
  180. $options = new QueueServiceOptions();
  181. }
  182. if (!is_null($options->getTimeout()) && $options->getTimeout() < 1) {
  183. $this->assertTrue(false, 'Expect negative timeouts in $options to throw');
  184. } else {
  185. $this->assertFalse(Configuration::isEmulated(), 'Should succeed when not running in emulator');
  186. }
  187. $ret = (is_null($options) ? $this->restProxy->getServiceProperties() : $this->restProxy->getServiceProperties($options));
  188. $this->verifyServicePropertiesWorker($ret, $serviceProperties);
  189. } catch (ServiceException $e) {
  190. if (is_null($options)) {
  191. $options = new QueueServiceOptions();
  192. }
  193. if (Configuration::isEmulated()) {
  194. if (!is_null($options->getTimeout()) && $options->getTimeout() < 1) {
  195. $this->assertEquals(500, $e->getCode(), 'getCode');
  196. } else {
  197. $this->assertEquals(400, $e->getCode(), 'getCode');
  198. }
  199. } else {
  200. if (!is_null($options->getTimeout()) && $options->getTimeout() < 1) {
  201. $this->assertEquals(500, $e->getCode(), 'getCode');
  202. } else {
  203. $this->assertNull($e, 'Expect positive timeouts in $options to be fine');
  204. }
  205. }
  206. }
  207. }
  208. /**
  209. * @covers WindowsAzure\Queue\QueueRestProxy::listQueues
  210. */
  211. public function testListQueuesNoOptions() {
  212. $this->listQueuesWorker(null);
  213. }
  214. /**
  215. * @covers WindowsAzure\Queue\QueueRestProxy::listQueues
  216. */
  217. public function testListQueues() {
  218. $interestingListQueuesOptions = QueueServiceFunctionalTestData::getInterestingListQueuesOptions();
  219. foreach($interestingListQueuesOptions as $options) {
  220. $this->listQueuesWorker($options);
  221. }
  222. }
  223. private function listQueuesWorker($options) {
  224. $finished = false;
  225. while (!$finished) {
  226. try {
  227. $ret = (is_null($options) ? $this->restProxy->listQueues() : $this->restProxy->listQueues($options));
  228. if (is_null($options)) {
  229. $options = new ListQueuesOptions();
  230. }
  231. if (!is_null($options->getTimeout()) && $options->getTimeout() < 1) {
  232. $this->assertTrue(false, 'Expect negative timeouts ' . $options->getTimeout() . ' in $options to throw');
  233. }
  234. $this->verifyListQueuesWorker($ret, $options);
  235. if (strlen($ret->getNextMarker()) == 0) {
  236. self::println('Done with this loop');
  237. $finished = true;
  238. }
  239. else {
  240. self::println('Cycling to get the next marker: ' . $ret->getNextMarker());
  241. $options->setMarker($ret->getNextMarker());
  242. }
  243. }
  244. catch (ServiceException $e) {
  245. $finished = true;
  246. if (is_null($options->getTimeout()) || $options->getTimeout() >= 1) {
  247. $this->assertNull($e, 'Expect positive timeouts in $options to be fine');
  248. }
  249. else {
  250. $this->assertEquals(500, $e->getCode(), 'getCode');
  251. }
  252. }
  253. }
  254. }
  255. private function verifyListQueuesWorker($ret, $options) {
  256. // Uncomment when fixed
  257. // https://github.com/WindowsAzure/azure-sdk-for-php/issues/98
  258. //$this->assertEquals($accountName, $ret->getAccountName(), 'getAccountName');
  259. $this->assertEquals($options->getMarker(), $ret->getMarker(), 'getMarker');
  260. $this->assertEquals($options->getMaxResults(), $ret->getMaxResults(), 'getMaxResults');
  261. $this->assertEquals($options->getPrefix(), $ret->getPrefix(), 'getPrefix');
  262. $this->assertNotNull($ret->getQueues(), 'getQueues');
  263. if ($options->getMaxResults() == 0) {
  264. $this->assertNull($ret->getNextMarker(), 'When MaxResults is 0, expect getNextMarker (' . $ret->getNextMarker() . ')to be null');
  265. if (!is_null($options->getPrefix()) && $options->getPrefix() == QueueServiceFunctionalTestData::$nonExistQueuePrefix) {
  266. $this->assertEquals(0, count($ret->getQueues()), 'when MaxResults=0 and Prefix=(\'' . $options->getPrefix() . '\'), then Queues->length');
  267. }
  268. else if (!is_null($options->getPrefix()) && $options->getPrefix() == QueueServiceFunctionalTestData::$testUniqueId) {
  269. $this->assertEquals(count(QueueServiceFunctionalTestData::$TEST_QUEUE_NAMES), count($ret->getQueues()), 'when MaxResults=0 and Prefix=(\'' . $options->getPrefix() . '\'), then count Queues');
  270. }
  271. else {
  272. // Don't know how many there should be
  273. }
  274. }
  275. else if (strlen($ret->getNextMarker()) == 0) {
  276. $this->assertTrue(count($ret ->getQueues()) <= $options->getMaxResults(), 'when NextMarker (\'' . $ret->getNextMarker() . '\')==\'\', Queues->length (' . count($ret->getQueues()) . ') should be <= MaxResults (' . $options->getMaxResults() . ')');
  277. if (!is_null($options->getPrefix()) && $options->getPrefix() == QueueServiceFunctionalTestData::$nonExistQueuePrefix) {
  278. $this->assertEquals(0, count($ret->getQueues()), 'when no next marker and Prefix=(\'' . $options->getPrefix() . '\'), then Queues->length');
  279. }
  280. else if (!is_null($options->getPrefix()) && $options->getPrefix() == QueueServiceFunctionalTestData::$testUniqueId) {
  281. // Need to futz with the mod because you are allowed to get MaxResults items returned.
  282. $this->assertEquals(count(QueueServiceFunctionalTestData::$TEST_QUEUE_NAMES) % $options->getMaxResults(), count($ret ->getQueues()) % $options->getMaxResults(), 'when no next marker and Prefix=(\'' . $options->getPrefix() . '\'), then Queues->length');
  283. }
  284. else {
  285. // Don't know how many there should be
  286. }
  287. }
  288. else {
  289. $this->assertEquals(count($ret ->getQueues()), $options->getMaxResults(),
  290. 'when NextMarker (' . $ret->getNextMarker() .
  291. ')!=\'\', Queues->length (' . count($ret->getQueues()) .
  292. ') should be == MaxResults (' . $options->getMaxResults() . ')');
  293. if (!is_null($options->getPrefix()) && $options->getPrefix() == (QueueServiceFunctionalTestData::$nonExistQueuePrefix)) {
  294. $this->assertTrue(false, 'when a next marker and Prefix=(\'' . $options->getPrefix() . '\'), impossible');
  295. }
  296. }
  297. }
  298. /**
  299. * @covers WindowsAzure\Queue\QueueRestProxy::createQueue
  300. * @covers WindowsAzure\Queue\QueueRestProxy::deleteQueue
  301. * @covers WindowsAzure\Queue\QueueRestProxy::getQueueMetadata
  302. * @covers WindowsAzure\Queue\QueueRestProxy::listQueues
  303. */
  304. public function testCreateQueueNoOptions() {
  305. $this->createQueueWorker(null);
  306. }
  307. /**
  308. * @covers WindowsAzure\Queue\QueueRestProxy::createQueue
  309. * @covers WindowsAzure\Queue\QueueRestProxy::deleteQueue
  310. * @covers WindowsAzure\Queue\QueueRestProxy::getQueueMetadata
  311. * @covers WindowsAzure\Queue\QueueRestProxy::listQueues
  312. */
  313. public function testCreateQueue() {
  314. $interestingCreateQueueOptions = QueueServiceFunctionalTestData::getInterestingCreateQueueOptions();
  315. foreach($interestingCreateQueueOptions as $options) {
  316. $this->createQueueWorker($options);
  317. }
  318. }
  319. private function createQueueWorker($options) {
  320. self::println( 'Trying $options: ' . self::tmptostring($options));
  321. $queue = QueueServiceFunctionalTestData::getInterestingQueueName();
  322. $created = false;
  323. try {
  324. if (is_null($options)) {
  325. $this->restProxy->createQueue($queue);
  326. }
  327. else {
  328. $this->restProxy->createQueue($queue, $options);
  329. }
  330. $created = true;
  331. if (is_null($options)) {
  332. $options = new CreateQueueOptions();
  333. }
  334. if (!is_null($options->getTimeout()) && $options->getTimeout() < 1) {
  335. $this->assertTrue(false, 'Expect negative timeouts in $options to throw');
  336. }
  337. // Now check that the queue was created correctly.
  338. // Make sure that the list of all applicable queues is correctly updated.
  339. $opts = new ListQueuesOptions();
  340. $opts->setPrefix(QueueServiceFunctionalTestData::$testUniqueId);
  341. $qs = $this->restProxy->listQueues($opts);
  342. $this->assertEquals(count($qs->getQueues()), (count(QueueServiceFunctionalTestData::$TEST_QUEUE_NAMES) + 1), 'After adding one, with Prefix=(\'' . QueueServiceFunctionalTestData::$testUniqueId . '\'), then Queues->length');
  343. // Check the metadata on the queue
  344. $ret = $this->restProxy->getQueueMetadata($queue);
  345. $this->verifyCreateQueueWorker($ret, $options);
  346. $this->restProxy->deleteQueue($queue);
  347. $created = false;
  348. }
  349. catch (ServiceException $e) {
  350. if (is_null($options)) {
  351. $options = new CreateQueueOptions();
  352. }
  353. if (is_null($options->getTimeout()) || $options->getTimeout() >= 1) {
  354. $this->assertNull($e, 'Expect positive timeouts in $options to be fine');
  355. }
  356. else {
  357. $this->assertEquals(500, $e->getCode(), 'getCode');
  358. }
  359. }
  360. if ($created) {
  361. $this->restProxy->deleteQueue($queue);
  362. }
  363. }
  364. private function verifyCreateQueueWorker($ret, $options) {
  365. self::println( 'Trying $options: ' . self::tmptostring($options) .
  366. ' and ret ' . self::tmptostring($ret));
  367. if (is_null($options)) {
  368. $options = QueueServiceFunctionalTestData::getInterestingCreateQueueOptions();
  369. $options = $options[0];
  370. }
  371. if (is_null($options->getMetadata())) {
  372. $this->assertNotNull($ret->getMetadata(), 'queue Metadata');
  373. $this->assertEquals(0, count($ret->getMetadata()), 'queue Metadata count');
  374. }
  375. else {
  376. $this->assertNotNull($ret->getMetadata(), 'queue Metadata');
  377. $this->assertEquals(count($options->getMetadata()), count($ret->getMetadata()), 'Metadata');
  378. $om = $options->getMetadata();
  379. $rm = $ret->getMetadata();
  380. foreach(array_keys($options->getMetadata()) as $key) {
  381. $this->assertEquals($om[$key], $rm[$key], 'Metadata(' . $key . ')');
  382. }
  383. }
  384. }
  385. /**
  386. * @covers WindowsAzure\Queue\QueueRestProxy::createQueue
  387. * @covers WindowsAzure\Queue\QueueRestProxy::deleteQueue
  388. * @covers WindowsAzure\Queue\QueueRestProxy::listQueues
  389. */
  390. public function testDeleteQueueNoOptions() {
  391. $this->deleteQueueWorker(null);
  392. }
  393. /**
  394. * @covers WindowsAzure\Queue\QueueRestProxy::createQueue
  395. * @covers WindowsAzure\Queue\QueueRestProxy::deleteQueue
  396. * @covers WindowsAzure\Queue\QueueRestProxy::listQueues
  397. */
  398. public function testDeleteQueue() {
  399. $interestingTimeouts = QueueServiceFunctionalTestData::getInterestingTimeoutValues();
  400. foreach($interestingTimeouts as $timeout) {
  401. $options = new QueueServiceOptions();
  402. $options->setTimeout($timeout);
  403. $this->deleteQueueWorker($options);
  404. }
  405. }
  406. private function deleteQueueWorker($options) {
  407. self::println( 'Trying $options: ' . self::tmptostring($options));
  408. $queue = QueueServiceFunctionalTestData::getInterestingQueueName();
  409. // Make sure there is something to delete.
  410. $this->restProxy->createQueue($queue);
  411. // Make sure that the list of all applicable queues is correctly updated.
  412. $opts = new ListQueuesOptions();
  413. $opts->setPrefix(QueueServiceFunctionalTestData::$testUniqueId);
  414. $qs = $this->restProxy->listQueues($opts);
  415. $this->assertEquals(count($qs->getQueues()), (count(QueueServiceFunctionalTestData::$TEST_QUEUE_NAMES) + 1), 'After adding one, with Prefix=(\'' . QueueServiceFunctionalTestData::$testUniqueId . '\'), then Queues->length');
  416. $deleted = false;
  417. try {
  418. if (is_null($options)) {
  419. $this->restProxy->deleteQueue($queue);
  420. }
  421. else {
  422. $this->restProxy->deleteQueue($queue, $options);
  423. }
  424. $deleted = true;
  425. if (is_null($options)) {
  426. $options = new QueueServiceOptions();
  427. }
  428. if (!is_null($options->getTimeout()) && $options->getTimeout() < 1) {
  429. $this->assertTrue(false, 'Expect negative timeouts in $options to throw');
  430. }
  431. // Make sure that the list of all applicable queues is correctly updated.
  432. $opts = new ListQueuesOptions();
  433. $opts->setPrefix(QueueServiceFunctionalTestData::$testUniqueId);
  434. $qs = $this->restProxy->listQueues($opts);
  435. $this->assertEquals(count($qs->getQueues()), count(QueueServiceFunctionalTestData::$TEST_QUEUE_NAMES), 'After adding then deleting one, with Prefix=(\'' . QueueServiceFunctionalTestData::$testUniqueId . '\'), then Queues->length');
  436. // Nothing else interesting to check for the options.
  437. }
  438. catch (ServiceException $e) {
  439. if (is_null($options->getTimeout()) || $options->getTimeout() >= 1) {
  440. $this->assertNull($e, 'Expect positive timeouts in $options to be fine');
  441. }
  442. else {
  443. $this->assertEquals(500, $e->getCode(), 'getCode');
  444. }
  445. }
  446. if (!$deleted) {
  447. // Try again. If it doesn't work, not much else to try.
  448. $this->restProxy->deleteQueue($queue);
  449. }
  450. }
  451. // TODO: Negative tests, like accessing a non-existant queue, or recreating an existing queue?
  452. /**
  453. * @covers WindowsAzure\Queue\QueueRestProxy::createMessage
  454. * @covers WindowsAzure\Queue\QueueRestProxy::createQueue
  455. * @covers WindowsAzure\Queue\QueueRestProxy::deleteQueue
  456. * @covers WindowsAzure\Queue\QueueRestProxy::getQueueMetadata
  457. * @covers WindowsAzure\Queue\QueueRestProxy::setQueueMetadata
  458. */
  459. public function testGetQueueMetadataNoOptions() {
  460. $interestingMetadata = QueueServiceFunctionalTestData::getNiceMetadata();
  461. foreach ($interestingMetadata as $metadata) {
  462. $this->getQueueMetadataWorker(null, $metadata);
  463. }
  464. }
  465. /**
  466. * @covers WindowsAzure\Queue\QueueRestProxy::createMessage
  467. * @covers WindowsAzure\Queue\QueueRestProxy::createQueue
  468. * @covers WindowsAzure\Queue\QueueRestProxy::deleteQueue
  469. * @covers WindowsAzure\Queue\QueueRestProxy::getQueueMetadata
  470. * @covers WindowsAzure\Queue\QueueRestProxy::setQueueMetadata
  471. */
  472. public function testGetQueueMetadata() {
  473. $interestingTimeouts = QueueServiceFunctionalTestData::getInterestingTimeoutValues();
  474. $interestingMetadata = QueueServiceFunctionalTestData::getNiceMetadata();
  475. foreach($interestingTimeouts as $timeout) {
  476. foreach ($interestingMetadata as $metadata) {
  477. $options = new QueueServiceOptions();
  478. $options->setTimeout($timeout);
  479. $this->getQueueMetadataWorker($options, $metadata);
  480. }
  481. }
  482. }
  483. private function getQueueMetadataWorker($options, $metadata) {
  484. self::println( 'Trying $options: ' . self::tmptostring($options) .
  485. ' and $metadata: ' . self::tmptostring($metadata));
  486. $queue = QueueServiceFunctionalTestData::getInterestingQueueName();
  487. // Make sure there is something to test
  488. $this->restProxy->createQueue($queue);
  489. // Put some messages to verify getApproximateMessageCount
  490. if (!is_null($metadata)) {
  491. for ($i = 0; $i < count($metadata); $i++) {
  492. $this->restProxy->createMessage($queue, 'message ' . $i);
  493. }
  494. // And put in some metadata
  495. $this->restProxy->setQueueMetadata($queue, $metadata);
  496. }
  497. try {
  498. $res = (is_null($options) ? $this->restProxy->getQueueMetadata($queue) : $this->restProxy->getQueueMetadata( $queue, $options));
  499. if (is_null($options)) {
  500. $options = new QueueServiceOptions();
  501. }
  502. if (!is_null($options->getTimeout()) && $options->getTimeout() < 1) {
  503. $this->assertTrue(false, 'Expect negative timeouts in $options to throw');
  504. }
  505. $this->verifyGetSetQueueMetadataWorker($res, $metadata);
  506. }
  507. catch (ServiceException $e) {
  508. if (is_null($options->getTimeout()) || $options->getTimeout() >= 1) {
  509. $this->assertNull($e, 'Expect positive timeouts in $options to be fine');
  510. }
  511. else {
  512. $this->assertEquals(500, $e->getCode(), 'getCode');
  513. }
  514. }
  515. // Clean up->
  516. $this->restProxy->deleteQueue($queue);
  517. }
  518. private function verifyGetSetQueueMetadataWorker($ret, $metadata) {
  519. $this->assertNotNull($ret->getMetadata(), 'queue Metadata');
  520. if (is_null($metadata)) {
  521. $this->assertEquals(0, count($ret->getMetadata()), 'Metadata');
  522. $this->assertEquals(0, $ret->getApproximateMessageCount(), 'getApproximateMessageCount');
  523. }
  524. else {
  525. $this->assertEquals(count($metadata), count($ret->getMetadata()), 'Metadata');
  526. $rm =$ret->getMetadata();
  527. foreach(array_keys($metadata) as $key) {
  528. $this->assertEquals($metadata[$key], $rm[$key], 'Metadata(' . $key . ')');
  529. }
  530. // Hard to test "approximate", so just verify that it is in the expected range
  531. $this->assertTrue(
  532. (0 <= $ret->getApproximateMessageCount()) && ($ret->getApproximateMessageCount() <= count($metadata)),
  533. '0 <= getApproximateMessageCount (' . $ret->getApproximateMessageCount() . ') <= $metadata count (' . count($metadata) . ')');
  534. }
  535. }
  536. /**
  537. * @covers WindowsAzure\Queue\QueueRestProxy::createQueue
  538. * @covers WindowsAzure\Queue\QueueRestProxy::deleteQueue
  539. * @covers WindowsAzure\Queue\QueueRestProxy::getQueueMetadata
  540. * @covers WindowsAzure\Queue\QueueRestProxy::setQueueMetadata
  541. */
  542. public function testSetQueueMetadataNoOptions() {
  543. $interestingMetadata = QueueServiceFunctionalTestData::getInterestingMetadata();
  544. foreach ($interestingMetadata as $metadata) {
  545. if (is_null($metadata)) {
  546. // This is tested above.
  547. continue;
  548. }
  549. $this->setQueueMetadataWorker(null, $metadata);
  550. }
  551. }
  552. /**
  553. * @covers WindowsAzure\Queue\QueueRestProxy::createQueue
  554. * @covers WindowsAzure\Queue\QueueRestProxy::deleteQueue
  555. * @covers WindowsAzure\Queue\QueueRestProxy::getQueueMetadata
  556. * @covers WindowsAzure\Queue\QueueRestProxy::setQueueMetadata
  557. */
  558. public function testSetQueueMetadata() {
  559. $interestingTimeouts = QueueServiceFunctionalTestData::getInterestingTimeoutValues();
  560. $interestingMetadata = QueueServiceFunctionalTestData::getInterestingMetadata();
  561. foreach($interestingTimeouts as $timeout) {
  562. foreach ($interestingMetadata as $metadata) {
  563. if (is_null($metadata)) {
  564. // This is tested above.
  565. continue;
  566. }
  567. $options = new QueueServiceOptions();
  568. $options->setTimeout($timeout);
  569. $this->setQueueMetadataWorker($options, $metadata);
  570. }
  571. }
  572. }
  573. private function setQueueMetadataWorker($options, $metadata) {
  574. self::println( 'Trying $options: ' . self::tmptostring($options) .
  575. ' and $metadata: ' . self::tmptostring($metadata));
  576. $queue = QueueServiceFunctionalTestData::getInterestingQueueName();
  577. // Make sure there is something to test
  578. $this->restProxy->createQueue($queue);
  579. try {
  580. try {
  581. // And put in some metadata
  582. if (is_null($options)) {
  583. $this->restProxy->setQueueMetadata($queue, $metadata);
  584. }
  585. else {
  586. $this->restProxy->setQueueMetadata($queue, $metadata, $options);
  587. }
  588. if (is_null($options)) {
  589. $options = new QueueServiceOptions();
  590. }
  591. if (!is_null($options->getTimeout()) && $options->getTimeout() < 1) {
  592. $this->assertTrue(false, 'Expect negative timeouts in $options to throw');
  593. }
  594. $res = $this->restProxy->getQueueMetadata($queue);
  595. $this->verifyGetSetQueueMetadataWorker($res, $metadata);
  596. }
  597. catch (HTTP_Request2_LogicException $le) {
  598. $keypart = array_keys($metadata);
  599. $keypart = $keypart[0];
  600. if (!is_null($metadata) && count($metadata) > 0 && (substr($keypart, 0, 1) == '<')) {
  601. // Trying to pass bad metadata
  602. }
  603. else {
  604. throw $le;
  605. }
  606. }
  607. }
  608. catch (ServiceException $e) {
  609. if (!is_null($options->getTimeout()) && $options->getTimeout() < 1) {
  610. $this->assertEquals(500, $e->getCode(), 'getCode');
  611. } else {
  612. throw $e;
  613. }
  614. }
  615. // Clean up.
  616. $this->restProxy->deleteQueue($queue);
  617. }
  618. /**
  619. * @covers WindowsAzure\Queue\QueueRestProxy::clearMessages
  620. * @covers WindowsAzure\Queue\QueueRestProxy::createMessage
  621. * @covers WindowsAzure\Queue\QueueRestProxy::listMessages
  622. */
  623. public function testCreateMessageEmpty() {
  624. $this->createMessageWorker('', QueueServiceFunctionalTestData::getSimpleCreateMessageOptions());
  625. }
  626. /**
  627. * @covers WindowsAzure\Queue\QueueRestProxy::clearMessages
  628. * @covers WindowsAzure\Queue\QueueRestProxy::createMessage
  629. * @covers WindowsAzure\Queue\QueueRestProxy::listMessages
  630. */
  631. public function testCreateMessageUnicodeMessage() {
  632. $this->createMessageWorker('Some unicode: ' .
  633. chr(0xEB) . chr(0x8B) . chr(0xA4) . // \uB2E4 in UTF-8
  634. chr(0xEB) . chr(0xA5) . chr(0xB4) . // \uB974 in UTF-8
  635. chr(0xEB) . chr(0x8B) . chr(0xA4) . // \uB2E4 in UTF-8
  636. chr(0xEB) . chr(0x8A) . chr(0x94) . // \uB294 in UTF-8
  637. chr(0xD8) . chr(0xA5) . // \u0625 in UTF-8
  638. ' ' .
  639. chr(0xD9) . chr(0x8A) . // \u064A in UTF-8
  640. chr(0xD8) . chr(0xAF) . // \u062F in UTF-8
  641. chr(0xD9) . chr(0x8A) . // \u064A in UTF-8
  642. chr(0xD9) . chr(0x88), // \u0648 in UTF-8
  643. QueueServiceFunctionalTestData::getSimpleCreateMessageOptions());
  644. }
  645. /**
  646. * @covers WindowsAzure\Queue\QueueRestProxy::clearMessages
  647. * @covers WindowsAzure\Queue\QueueRestProxy::createMessage
  648. * @covers WindowsAzure\Queue\QueueRestProxy::listMessages
  649. */
  650. public function testCreateMessageXmlMessage() {
  651. $this->createMessageWorker('Some HTML: <this><is></a>', QueueServiceFunctionalTestData::getSimpleCreateMessageOptions());
  652. }
  653. /**
  654. * @covers WindowsAzure\Queue\QueueRestProxy::clearMessages
  655. * @covers WindowsAzure\Queue\QueueRestProxy::createMessage
  656. * @covers WindowsAzure\Queue\QueueRestProxy::listMessages
  657. */
  658. public function testCreateMessageWithSmallTTL() {
  659. $queue = QueueServiceFunctionalTestData::$TEST_QUEUE_NAMES;
  660. $queue = $queue[0];
  661. $this->restProxy->clearMessages($queue);
  662. $messageText = QueueServiceFunctionalTestData::getSimpleMessageText();
  663. $options = new CreateMessageOptions();
  664. $options->setVisibilityTimeoutInSeconds(2);
  665. $options->setTimeToLiveInSeconds('4');
  666. $this->restProxy->createMessage($queue, $messageText, $options);
  667. $lmr = $this->restProxy->listMessages($queue);
  668. // No messages, because it is not visible for 2 seconds.
  669. $this->assertEquals(0, count($lmr->getQueueMessages()), 'getQueueMessages() count');
  670. sleep(6);
  671. // Try again, passed the VisibilityTimeout has passed, but also the 4 second TTL has passed.
  672. $lmr = $this->restProxy->listMessages($queue);
  673. $this->assertEquals(0, count($lmr->getQueueMessages()), 'getQueueMessages() count');
  674. $this->restProxy->clearMessages($queue);
  675. }
  676. /**
  677. * @covers WindowsAzure\Queue\QueueRestProxy::clearMessages
  678. * @covers WindowsAzure\Queue\QueueRestProxy::createMessage
  679. * @covers WindowsAzure\Queue\QueueRestProxy::listMessages
  680. */
  681. public function testCreateMessage() {
  682. $interestingTimes = array( null, -1, 0, QueueServiceFunctionalTestData::INTERESTING_TTL, 1000 );
  683. foreach($interestingTimes as $timeToLiveInSeconds) {
  684. foreach($interestingTimes as $visibilityTimeoutInSeconds) {
  685. $timeout = null;
  686. $options = new CreateMessageOptions();
  687. $options->setTimeout($timeout);
  688. $options->setTimeToLiveInSeconds($timeToLiveInSeconds);
  689. $options->setVisibilityTimeoutInSeconds($visibilityTimeoutInSeconds . '');
  690. $this->createMessageWorker(QueueServiceFunctionalTestData::getSimpleMessageText(), $options);
  691. }
  692. }
  693. foreach($interestingTimes as $timeout) {
  694. $timeToLiveInSeconds = 1000;
  695. $visibilityTimeoutInSeconds = QueueServiceFunctionalTestData::INTERESTING_TTL;
  696. $options = new CreateMessageOptions();
  697. $options->setTimeout($timeout);
  698. $options->setTimeToLiveInSeconds($timeToLiveInSeconds . '');
  699. $options->setVisibilityTimeoutInSeconds($visibilityTimeoutInSeconds);
  700. $this->createMessageWorker(QueueServiceFunctionalTestData::getSimpleMessageText(), $options);
  701. }
  702. }
  703. private function createMessageWorker($messageText, $options) {
  704. self::println( 'Trying $options: ' . self::tmptostring($options));
  705. $queue = QueueServiceFunctionalTestData::$TEST_QUEUE_NAMES;
  706. $queue = $queue[0];
  707. $this->restProxy->clearMessages($queue);
  708. try {
  709. if (is_null($options)) {
  710. $this->restProxy->createMessage($queue, $messageText);
  711. }
  712. else {
  713. $this->restProxy->createMessage($queue, $messageText, $options);
  714. }
  715. if (is_null($options)) {
  716. $options = new CreateMessageOptions();
  717. }
  718. if (!is_null($options->getVisibilityTimeoutInSeconds()) && $options->getVisibilityTimeoutInSeconds() < 0) {
  719. $this->assertTrue(false, 'Expect negative getVisibilityTimeoutInSeconds in $options to throw');
  720. }
  721. else if (!is_null($options->getTimeToLiveInSeconds()) && $options->getTimeToLiveInSeconds() <= 0) {
  722. $this->assertTrue(false, 'Expect negative getVisibilityTimeoutInSeconds in $options to throw');
  723. }
  724. else if (!is_null($options->getVisibilityTimeoutInSeconds()) &&
  725. !is_null($options->getTimeToLiveInSeconds()) &&
  726. $options->getVisibilityTimeoutInSeconds() > 0 &&
  727. $options->getTimeToLiveInSeconds() <= $options->getVisibilityTimeoutInSeconds()) {
  728. $this->assertTrue(false, 'Expect getTimeToLiveInSeconds() <= getVisibilityTimeoutInSeconds in $options to throw');
  729. }
  730. else if (!is_null($options->getTimeout()) && $options->getTimeout() < 1) {
  731. $this->assertTrue(false, 'Expect negative timeouts in $options to throw');
  732. }
  733. // Check that the message matches
  734. $lmr = $this->restProxy->listMessages($queue);
  735. if (!is_null($options->getVisibilityTimeoutInSeconds()) && $options->getVisibilityTimeoutInSeconds() > 0) {
  736. $this->assertEquals(0, count($lmr->getQueueMessages()), 'getQueueMessages() count');
  737. sleep(QueueServiceFunctionalTestData::INTERESTING_TTL);
  738. // Try again, not that the 4 second visibility has passed
  739. $lmr = $this->restProxy->listMessages($queue);
  740. if ($options->getVisibilityTimeoutInSeconds() > QueueServiceFunctionalTestData::INTERESTING_TTL) {
  741. $this->assertEquals(0, count($lmr->getQueueMessages()), 'getQueueMessages() count');
  742. }
  743. else {
  744. $this->assertEquals(1, count($lmr->getQueueMessages()), 'getQueueMessages() count');
  745. $qm = $lmr->getQueueMessages();
  746. $qm = $qm[0];
  747. $this->assertEquals($messageText, $qm->getMessageText(), '$qm->getMessageText');
  748. }
  749. }
  750. else {
  751. $this->assertEquals(1, count($lmr->getQueueMessages()), 'getQueueMessages() count');
  752. $qm = $lmr->getQueueMessages();
  753. $qm = $qm[0];
  754. $this->assertEquals($messageText, $qm->getMessageText(), '$qm->getMessageText');
  755. }
  756. }
  757. catch (ServiceException $e) {
  758. if (!is_null($options->getTimeout()) && $options->getTimeout() < 1) {
  759. $this->assertEquals(500, $e->getCode(), 'getCode');
  760. }
  761. else if (!is_null($options->getVisibilityTimeoutInSeconds()) && $options->getVisibilityTimeoutInSeconds() < 0) {
  762. // Trying to pass bad metadata
  763. $this->assertEquals(400, $e->getCode(), 'getCode');
  764. }
  765. else if (!is_null($options->getTimeToLiveInSeconds()) && $options->getTimeToLiveInSeconds() <= 0) {
  766. $this->assertEquals(400, $e->getCode(), 'getCode');
  767. }
  768. else if (!is_null($options->getVisibilityTimeoutInSeconds()) && !is_null($options->getTimeToLiveInSeconds()) && $options->getVisibilityTimeoutInSeconds() > 0 && $options->getTimeToLiveInSeconds() <= $options->getVisibilityTimeoutInSeconds()) {
  769. $this->assertEquals(400, $e->getCode(), 'getCode');
  770. }
  771. else {
  772. $this->assertNull($e, 'Expect positive timeouts in $options to be fine');
  773. }
  774. }
  775. $this->restProxy->clearMessages($queue);
  776. }
  777. /**
  778. * @covers WindowsAzure\Queue\QueueRestProxy::clearMessages
  779. * @covers WindowsAzure\Queue\QueueRestProxy::createMessage
  780. * @covers WindowsAzure\Queue\QueueRestProxy::listMessages
  781. * @covers WindowsAzure\Queue\QueueRestProxy::updateMessage
  782. */
  783. public function testUpdateMessageNoOptions() {
  784. $interestingVisibilityTimes = array(-1, 0, QueueServiceFunctionalTestData::INTERESTING_TTL, QueueServiceFunctionalTestData::INTERESTING_TTL * 2);
  785. $startingMessage = new CreateMessageOptions();
  786. $startingMessage->setTimeout(QueueServiceFunctionalTestData::INTERESTING_TTL);
  787. $startingMessage->setTimeToLiveInSeconds(QueueServiceFunctionalTestData::INTERESTING_TTL * 1.5);
  788. foreach($interestingVisibilityTimes as $visibilityTimeoutInSeconds) {
  789. $this->updateMessageWorker(QueueServiceFunctionalTestData::getSimpleMessageText(), $startingMessage, $visibilityTimeoutInSeconds, null);
  790. }
  791. }
  792. /**
  793. * @covers WindowsAzure\Queue\QueueRestProxy::clearMessages
  794. * @covers WindowsAzure\Queue\QueueRestProxy::createMessage
  795. * @covers WindowsAzure\Queue\QueueRestProxy::listMessages
  796. * @covers WindowsAzure\Queue\QueueRestProxy::updateMessage
  797. */
  798. public function testUpdateMessage() {
  799. $interestingTimes = array(null, -1, 0, QueueServiceFunctionalTestData::INTERESTING_TTL, 1000);
  800. $interestingVisibilityTimes = array(-1, 0, QueueServiceFunctionalTestData::INTERESTING_TTL, QueueServiceFunctionalTestData::INTERESTING_TTL * 2);
  801. $startingMessage = new CreateMessageOptions();
  802. $startingMessage->setTimeout( QueueServiceFunctionalTestData::INTERESTING_TTL);
  803. $startingMessage->setTimeToLiveInSeconds(QueueServiceFunctionalTestData::INTERESTING_TTL * 1.5);
  804. foreach($interestingTimes as $timeout) {
  805. foreach($interestingVisibilityTimes as $visibilityTimeoutInSeconds) {
  806. $options = new QueueServiceOptions();
  807. $options->setTimeout($timeout);
  808. $this->updateMessageWorker(QueueServiceFunctionalTestData::getSimpleMessageText(), $startingMessage, $visibilityTimeoutInSeconds, $options);
  809. }
  810. }
  811. }
  812. private function updateMessageWorker($messageText, $startingMessage, $visibilityTimeoutInSeconds, $options) {
  813. self::println( 'Trying $options: ' . self::tmptostring($options) .
  814. ' and $visibilityTimeoutInSeconds: ' . self::tmptostring($visibilityTimeoutInSeconds));
  815. $queue = QueueServiceFunctionalTestData::$TEST_QUEUE_NAMES;
  816. $queue = $queue[0];
  817. $this->restProxy->clearMessages($queue);
  818. $this->restProxy->createMessage($queue, QueueServiceFunctionalTestData::getSimpleMessageText(), $startingMessage);
  819. $lmr = $this->restProxy->listMessages($queue);
  820. $m = $lmr->getQueueMessages();
  821. $m = $m[0];
  822. try {
  823. if (is_null($options)) {
  824. $this->restProxy->updateMessage($queue, $m->getMessageId(), $m->getPopReceipt(), $messageText, $visibilityTimeoutInSeconds);
  825. }
  826. else {
  827. $this->restProxy->updateMessage($queue, $m->getMessageId(), $m->getPopReceipt(), $messageText, $visibilityTimeoutInSeconds, $options);
  828. }
  829. if (is_null($options)) {
  830. $options = new CreateMessageOptions();
  831. }
  832. if ($visibilityTimeoutInSeconds < 0) {
  833. $this->assertTrue(false, 'Expect negative getVisibilityTimeoutInSeconds in $options to throw');
  834. }
  835. else if (!is_null($options->getTimeout()) && $options->getTimeout() < 1) {
  836. $this->assertTrue(false, 'Expect negative timeouts in $options to throw');
  837. }
  838. // Check that the message matches
  839. $lmr = $this->restProxy->listMessages($queue);
  840. if ($visibilityTimeoutInSeconds > 0) {
  841. $this->assertEquals(0, count($lmr->getQueueMessages()), 'getQueueMessages() count');
  842. sleep(QueueServiceFunctionalTestData::INTERESTING_TTL);
  843. // Try again, not that the 4 second visibility has passed
  844. $lmr = $this->restProxy->listMessages($queue);
  845. if ($visibilityTimeoutInSeconds > QueueServiceFunctionalTestData::INTERESTING_TTL) {
  846. $this->assertEquals(0, count($lmr->getQueueMessages()), 'getQueueMessages() count');
  847. }
  848. else {
  849. $this->assertEquals(1, count($lmr->getQueueMessages()), 'getQueueMessages() count');
  850. $qm = $lmr->getQueueMessages();
  851. $qm = $qm[0];
  852. $this->assertEquals($messageText, $qm->getMessageText(), '$qm->getMessageText');
  853. }
  854. }
  855. else {
  856. $this->assertEquals(1, count($lmr->getQueueMessages()), 'getQueueMessages() count');
  857. $qm = $lmr->getQueueMessages();
  858. $qm = $qm[0];
  859. $this->assertEquals($messageText, $qm->getMessageText(), '$qm->getMessageText');
  860. }
  861. }
  862. catch (ServiceException $e) {
  863. if (is_null($options)) {
  864. $options = new CreateMessageOptions();
  865. }
  866. if (!is_null($options->getTimeout()) && $options->getTimeout() < 1) {
  867. $this->assertEquals(500, $e->getCode(), 'getCode');
  868. }
  869. else if ($visibilityTimeoutInSeconds < 0) {
  870. // Trying to pass bad metadata
  871. $this->assertEquals(400, $e->getCode(), 'getCode');
  872. }
  873. else {
  874. $this->assertNull($e, 'Expect positive timeouts in $options to be fine');
  875. }
  876. }
  877. $this->restProxy->clearMessages($queue);
  878. }
  879. /**
  880. * @covers WindowsAzure\Queue\QueueRestProxy::clearMessages
  881. * @covers WindowsAzure\Queue\QueueRestProxy::createMessage
  882. * @covers WindowsAzure\Queue\QueueRestProxy::deleteMessage
  883. * @covers WindowsAzure\Queue\QueueRestProxy::listMessages
  884. */
  885. public function testDeleteMessageNoOptions() {
  886. $this->deleteMessageWorker(null);
  887. }
  888. /**
  889. * @covers WindowsAzure\Queue\QueueRestProxy::clearMessages
  890. * @covers WindowsAzure\Queue\QueueRestProxy::createMessage
  891. * @covers WindowsAzure\Queue\QueueRestProxy::deleteMessage
  892. * @covers WindowsAzure\Queue\QueueRestProxy::listMessages
  893. */
  894. public function testDeleteMessage() {
  895. $interestingTimes = array(null, -1, 0, QueueServiceFunctionalTestData::INTERESTING_TTL, 1000);
  896. foreach($interestingTimes as $timeout) {
  897. $options = new QueueServiceOptions();
  898. $options->setTimeout($timeout);
  899. $this->deleteMessageWorker($options);
  900. }
  901. }
  902. private function deleteMessageWorker($options) {
  903. self::println( 'Trying $options: ' . self::tmptostring($options));
  904. $queue = QueueServiceFunctionalTestData::$TEST_QUEUE_NAMES;
  905. $queue = $queue[0];
  906. $this->restProxy->clearMessages($queue);
  907. $this->restProxy->createMessage($queue, 'test');
  908. $opts = new ListMessagesOptions();
  909. $opts->setVisibilityTimeoutInSeconds(QueueServiceFunctionalTestData::INTERESTING_TTL);
  910. $lmr = $this->restProxy->listMessages($queue, $opts);
  911. $m = $lmr->getQueueMessages();
  912. $m = $m[0];
  913. try {
  914. if (is_null($options)) {
  915. $this->restProxy->deleteMessage($queue, $m->getMessageId(), $m->getPopReceipt());
  916. }
  917. else {
  918. $this->restProxy->deleteMessage($queue, $m->getMessageId(), $m->getPopReceipt(), $options);
  919. }
  920. if (is_null($options)) {
  921. $options = new CreateMessageOptions();
  922. }
  923. else if (!is_null($options->getTimeout()) && $options->getTimeout() < 1) {
  924. $this->assertTrue(false, 'Expect negative timeouts in $options to throw');
  925. }
  926. // Check that the message matches
  927. $lmr = $this->restProxy->listMessages($queue);
  928. $this->assertEquals(0, count($lmr->getQueueMessages()), 'getQueueMessages() count');
  929. // Wait until the popped message should be visible again.
  930. sleep(QueueServiceFunctionalTestData::INTERESTING_TTL + 1);
  931. // Try again, to make sure the message really is gone.
  932. $lmr = $this->restProxy->listMessages($queue);
  933. $this->assertEquals(0, count($lmr->getQueueMessages()), 'getQueueMessages() count');
  934. }
  935. catch (ServiceException $e) {
  936. if (!is_null($options->getTimeout()) && $options->getTimeout() < 1) {
  937. $this->assertEquals(500, $e->getCode(), 'getCode');
  938. }
  939. else {
  940. $this->assertNull($e, 'Expect positive timeouts in $options to be fine');
  941. }
  942. }
  943. $this->restProxy->clearMessages($queue);
  944. }
  945. /**
  946. * @covers WindowsAzure\Queue\QueueRestProxy::clearMessages
  947. * @covers WindowsAzure\Queue\QueueRestProxy::createMessage
  948. * @covers WindowsAzure\Queue\QueueRestProxy::listMessages
  949. * @covers WindowsAzure\Queue\QueueRestProxy::peekMessages
  950. */
  951. public function testListMessagesNoOptions() {
  952. $this->listMessagesWorker(new ListMessagesOptions());
  953. }
  954. /**
  955. * @covers WindowsAzure\Queue\QueueRestProxy::clearMessages
  956. * @covers WindowsAzure\Queue\QueueRestProxy::createMessage
  957. * @covers WindowsAzure\Queue\QueueRestProxy::listMessages
  958. * @covers WindowsAzure\Queue\QueueRestProxy::peekMessages
  959. */
  960. public function testListMessages() {
  961. $interestingTimes = array(null, -1, 0, QueueServiceFunctionalTestData::INTERESTING_TTL, 1000);
  962. $interestingNums = array(null, -1, 0, 2, 10, 1000);
  963. foreach($interestingNums as $numberOfMessages) {
  964. foreach($interestingTimes as $visibilityTimeoutInSeconds) {

Large files files are truncated, but you can click here to view the full file