/**
  * @covers MicrosoftAzure\Storage\ServiceBus\ServiceBusRestProxy::clearMessages
  * @covers MicrosoftAzure\Storage\ServiceBus\ServiceBusRestProxy::createMessage
  * @covers MicrosoftAzure\Storage\ServiceBus\ServiceBusRestProxy::listMessages
  * @covers MicrosoftAzure\Storage\ServiceBus\ServiceBusRestProxy::peekMessages
  */
 private function listMessagesWorker($options)
 {
     self::println('Trying $options: ' . self::tmptostring($options));
     $queue = QueueServiceFunctionalTestData::$testQueueNames;
     $queue = $queue[0];
     $this->restProxy->clearMessages($queue);
     // Put three messages into the queue.
     $this->restProxy->createMessage($queue, QueueServiceFunctionalTestData::getSimpleMessageText());
     $this->restProxy->createMessage($queue, QueueServiceFunctionalTestData::getSimpleMessageText());
     $this->restProxy->createMessage($queue, QueueServiceFunctionalTestData::getSimpleMessageText());
     // Default is 1 message
     $effectiveNumOfMessages = is_null($options) || is_null($options->getNumberOfMessages()) ? 1 : $options->getNumberOfMessages();
     $effectiveNumOfMessages = $effectiveNumOfMessages < 0 ? 0 : $effectiveNumOfMessages;
     // Default is 30 seconds
     $effectiveVisTimeout = is_null($options) || is_null($options->getVisibilityTimeoutInSeconds()) ? 30 : $options->getVisibilityTimeoutInSeconds();
     $effectiveVisTimeout = $effectiveVisTimeout < 0 ? 0 : $effectiveVisTimeout;
     $expectedNumMessagesFirst = $effectiveNumOfMessages > 3 ? 3 : $effectiveNumOfMessages;
     $expectedNumMessagesSecond = $effectiveVisTimeout <= 2 ? 3 : 3 - $effectiveNumOfMessages;
     $expectedNumMessagesSecond = $expectedNumMessagesSecond < 0 ? 0 : $expectedNumMessagesSecond;
     try {
         $res = is_null($options) ? $this->restProxy->listMessages($queue) : $this->restProxy->listMessages($queue, $options);
         if (is_null($options)) {
             $options = new ListMessagesOptions();
         }
         if (!is_null($options->getVisibilityTimeoutInSeconds()) && $options->getVisibilityTimeoutInSeconds() < 1) {
             $this->assertTrue(false, 'Expect non-positive getVisibilityTimeoutInSeconds in $options to throw');
         } else {
             if (!is_null($options->getNumberOfMessages()) && ($options->getNumberOfMessages() < 1 || $options->getNumberOfMessages() > 32)) {
                 $this->assertTrue(false, 'Expect  getNumberOfMessages < 1 or 32 < numMessages in $options to throw');
             } else {
                 if (!is_null($options->getTimeout()) && $options->getTimeout() < 1) {
                     $this->assertTrue(false, 'Expect negative timeouts in $options to throw');
                 }
             }
         }
         $this->assertEquals($expectedNumMessagesFirst, count($res->getQueueMessages()), 'list getQueueMessages() count');
         $opts = new PeekMessagesOptions();
         $opts->setNumberOfMessages(32);
         $pres = $this->restProxy->peekMessages($queue, $opts);
         $this->assertEquals(3 - $expectedNumMessagesFirst, count($pres->getQueueMessages()), 'peek getQueueMessages() count');
         // The visibilityTimeoutInSeconds controls when the requested messages will be visible again.
         // Wait 2.5 seconds to see when the messages are visible again.
         sleep(2.5);
         $opts = new ListMessagesOptions();
         $opts->setNumberOfMessages(32);
         $res2 = $this->restProxy->listMessages($queue, $opts);
         $this->assertEquals($expectedNumMessagesSecond, count($res2->getQueueMessages()), 'list getQueueMessages() count');
         $opts = new PeekMessagesOptions();
         $opts->setNumberOfMessages(32);
         $pres2 = $this->restProxy->peekMessages($queue, $opts);
         $this->assertEquals(0, count($pres2->getQueueMessages()), 'peek getQueueMessages() count');
         // TODO: These might get screwy if the timing gets off. Might need to use times spaces farther apart.
     } catch (ServiceException $e) {
         if (is_null($options)) {
             $options = new ListMessagesOptions();
         }
         if (!is_null($options->getTimeout()) && $options->getTimeout() < 1) {
             $this->assertEquals(TestResources::STATUS_INTERNAL_SERVER_ERROR, $e->getCode(), 'getCode');
         } else {
             if (!is_null($options->getVisibilityTimeoutInSeconds()) && $options->getVisibilityTimeoutInSeconds() < 1) {
                 $this->assertEquals(TestResources::STATUS_BAD_REQUEST, $e->getCode(), 'getCode');
             } else {
                 if (!is_null($options->getNumberOfMessages()) && ($options->getNumberOfMessages() < 1 || $options->getNumberOfMessages() > 32)) {
                     $this->assertEquals(TestResources::STATUS_BAD_REQUEST, $e->getCode(), 'getCode');
                 } else {
                     throw $e;
                 }
             }
         }
     }
     $this->restProxy->clearMessages($queue);
 }
 public function testCheckListMessagesOptions()
 {
     $options = new ListMessagesOptions();
     $this->assertNull($options->getTimeout(), 'Default ListMessagesOptions->getTimeout');
     $this->assertNull($options->getNumberOfMessages(), 'Default ListMessagesOptions->getNumberOfMessages');
     $this->assertNull($options->getVisibilityTimeoutInSeconds(), 'Default ListMessagesOptions->getVisibilityTimeoutInSeconds');
     $options->setTimeout(self::INT_MAX_VALUE);
     $options->setNumberOfMessages(0);
     $options->setVisibilityTimeoutInSeconds(self::INT_MIN_VALUE);
     $this->assertEquals(self::INT_MAX_VALUE, $options->getTimeout(), 'Set ListMessagesOptions->getTimeout');
     $this->assertEquals(0, $options->getNumberOfMessages(), 'Set ListMessagesOptions->getNumberOfMessages');
     $this->assertEquals(self::INT_MIN_VALUE, $options->getVisibilityTimeoutInSeconds(), 'Set ListMessagesOptions->getVisibilityTimeoutInSeconds');
 }
 /**
  * Lists all messages in the queue.
  * 
  * @param string              $queueName The queue name.
  * @param ListMessagesOptions $options   The optional parameters.
  * 
  * @return MicrosoftAzure\Storage\Common\Models\ListMessagesResult
  */
 public function listMessages($queueName, $options = null)
 {
     Validate::isString($queueName, 'queueName');
     Validate::notNullOrEmpty($queueName, 'queueName');
     $method = Resources::HTTP_GET;
     $headers = array();
     $queryParams = array();
     $postParams = array();
     $path = $queueName . '/messages';
     $statusCode = Resources::STATUS_OK;
     if (is_null($options)) {
         $options = new ListMessagesOptions();
     }
     $messagesCount = $options->getNumberOfMessages();
     $visibility = $options->getVisibilityTimeoutInSeconds();
     $timeout = $options->getTimeout();
     $this->addOptionalQueryParam($queryParams, Resources::QP_TIMEOUT, $timeout);
     $this->addOptionalQueryParam($queryParams, Resources::QP_NUM_OF_MESSAGES, $messagesCount);
     $this->addOptionalQueryParam($queryParams, Resources::QP_VISIBILITY_TIMEOUT, $visibility);
     $response = $this->send($method, $headers, $queryParams, $postParams, $path, $statusCode);
     $parsed = $this->dataSerializer->unserialize($response->getBody());
     return ListMessagesResult::create($parsed);
 }