/lib/php/Services/Amazon/tests/SQSTest.php

https://github.com/kastner/simple-aws · PHP · 176 lines · 112 code · 50 blank · 14 comment · 2 complexity · 7aa6b605c9d1f6523ad7aaea7d2c35ba MD5 · raw file

  1. <?php
  2. /**
  3. * NOTICE: Deleting queues, which happens in a few places in these unit tests,
  4. * must be followed by a timeout to make sure that successive list requests do
  5. * not return the banished queues. This might make some tests extremely slow
  6. * during timeouts.
  7. */
  8. require_once '../../../test_helper.php';
  9. ini_set("display_errors", true);
  10. ini_set("error_reporting", E_ALL);
  11. class SQSTest extends PHPUnit_Framework_TestCase {
  12. static $test_queues = array("unittest-test-queue-one",
  13. "unittest-test-queue-two");
  14. static $test_messages = array("Sample message right here, folks!");
  15. /** Deletes can take up to 60 seconds, use this timeout after deletes during test. */
  16. static $service_timeout = 65;
  17. public function testSetupTestQueues() {
  18. $rand = rand(1, 1000);
  19. foreach (self::$test_queues as &$name) {
  20. $name = "$name-$rand";
  21. }
  22. }
  23. public function testDeleteExistingQueues() {
  24. $manager = new Services_Amazon_SQS_QueueManager();
  25. $list = $manager->listQueues('unittest-');
  26. $this->assertEquals(true, is_array($list));
  27. foreach ($list as $queue) {
  28. $manager->deleteQueue($queue);
  29. }
  30. if (count($list) > 0) {
  31. sleep(self::$service_timeout);
  32. }
  33. }
  34. public function testListQueues() {
  35. $manager = new Services_Amazon_SQS_QueueManager();
  36. $list = $manager->listQueues();
  37. $this->assertEquals(true, is_array($list));
  38. $list = $manager->listQueues('unittest-');
  39. $this->assertEquals(true, is_array($list));
  40. $this->assertEquals(0, count($list));
  41. }
  42. public function testCreateQueue() {
  43. $manager = new Services_Amazon_SQS_QueueManager();
  44. $success = $manager->createQueue(self::$test_queues[0]);
  45. $this->assertEquals(true, $success);
  46. $success = $manager->createQueue(self::$test_queues[1]);
  47. $this->assertEquals(true, $success);
  48. sleep(self::$service_timeout);
  49. $list = $manager->listQueues('unittest-');
  50. $this->assertEquals(true, is_array($list));
  51. $this->assertEquals(2, count($list));
  52. }
  53. public function testSendAndReceiveMessages() {
  54. $manager = new Services_Amazon_SQS_QueueManager();
  55. // Get available queue URLs.
  56. $list = $manager->listQueues('unittest-');
  57. // Push a bunch of messages into the first queue.
  58. $queue = new Services_Amazon_SQS_Queue($list[0]);
  59. $result = $queue->push(self::$test_messages[0]);
  60. $this->assertEquals(true, $result);
  61. $timestamp = date("H:i:s");
  62. for ($i = 0; $i < count(10); $i++) {
  63. $message = "Message:$timestamp:" . rand(1,1000);
  64. $result = $queue->push($message);
  65. $this->assertEquals(true, $result);
  66. }
  67. sleep(3);
  68. // Pop a selection of messages (shorten timeout).
  69. $messages = $queue->pop(10, 5);
  70. $this->assertEquals(true, is_array($messages));
  71. $this->assertGreaterThan(0, count($messages));
  72. $this->assertEquals(true, is_array($messages[0]));
  73. $this->assertArrayHasKey("message", $messages[0]);
  74. $this->assertArrayHasKey("handle", $messages[0]);
  75. sleep(10);
  76. // Pop a single message.
  77. $messages = $queue->pop();
  78. $this->assertEquals(true, is_array($messages));
  79. $this->assertEquals(1, count($messages));
  80. // Delete one message.
  81. $response = $queue->delete($messages[0]['handle']);
  82. $this->assertEquals(true, $response);
  83. // Delete a fake message.
  84. $response = $queue->delete("invalidresponsehandle");
  85. $this->assertEquals(false, $response);
  86. // Check the second queue for messages.
  87. $queue = new Services_Amazon_SQS_Queue($list[1]);
  88. $messages = $queue->pop();
  89. $this->assertEquals(0, count($messages));
  90. }
  91. public function testGetAndSetAttributes() {
  92. $manager = new Services_Amazon_SQS_QueueManager();
  93. $queues = $manager->listQueues('unittest-');
  94. $attrs = $manager->getQueueAttributes($queues[0]);
  95. $this->assertEquals(true, is_array($attrs));
  96. $this->assertArrayHasKey('VisibilityTimeout', $attrs);
  97. $this->assertRegExp('/^\d+$/', $attrs['VisibilityTimeout']);
  98. $this->assertEquals(30, $attrs['VisibilityTimeout']);
  99. $this->assertArrayHasKey('ApproximateNumberOfMessages', $attrs);
  100. $this->assertRegExp('/^\d+$/', $attrs['ApproximateNumberOfMessages']);
  101. $response = $manager->setQueueAttribute($queues[0], 'InvalidAttributeName', 1);
  102. $this->assertEquals(false, $response);
  103. $response = $manager->setQueueAttribute($queues[0], 'VisibilityTimeout', 10000);
  104. $this->assertEquals(false, $response);
  105. $response = $manager->setQueueAttribute($queues[0], 'VisibilityTimeout', 200);
  106. $this->assertEquals(true, $response);
  107. sleep(self::$service_timeout);
  108. $attrs = $manager->getQueueAttributes($queues[0]);
  109. $this->assertArrayHasKey('VisibilityTimeout', $attrs);
  110. $this->assertRegExp('/^\d+$/', $attrs['VisibilityTimeout']);
  111. $this->assertEquals(200, $attrs['VisibilityTimeout']);
  112. }
  113. public function testDeleteQueue() {
  114. $manager = new Services_Amazon_SQS_QueueManager();
  115. $list = $manager->listQueues('unittest-');
  116. $this->assertEquals(true, is_array($list));
  117. $this->assertEquals(2, count($list));
  118. $manager->deleteQueue($list[0]);
  119. $manager->deleteQueue($list[1]);
  120. sleep(self::$service_timeout);
  121. $list = $manager->listQueues('unittest-');
  122. $this->assertEquals(true, is_array($list));
  123. $this->assertEquals(0, count($list));
  124. }
  125. }
  126. ?>