From 4975d237292b3dfbdd1f03a41e689965caa146ea Mon Sep 17 00:00:00 2001 From: Albert Cheng Date: Fri, 19 Apr 2013 16:05:13 -0700 Subject: [PATCH] fix empty queue scenario. --- .../implementation/ServiceBusRestProxy.java | 4 ++ .../serviceBus/ServiceBusIntegrationTest.java | 46 ++++++++++++++++++- 2 files changed, 48 insertions(+), 2 deletions(-) diff --git a/microsoft-azure-api/src/main/java/com/microsoft/windowsazure/services/serviceBus/implementation/ServiceBusRestProxy.java b/microsoft-azure-api/src/main/java/com/microsoft/windowsazure/services/serviceBus/implementation/ServiceBusRestProxy.java index 86a104fcaead..633c98336292 100644 --- a/microsoft-azure-api/src/main/java/com/microsoft/windowsazure/services/serviceBus/implementation/ServiceBusRestProxy.java +++ b/microsoft-azure-api/src/main/java/com/microsoft/windowsazure/services/serviceBus/implementation/ServiceBusRestProxy.java @@ -183,6 +183,10 @@ else if (options.isPeekLock()) { throw new RuntimeException("Unknown ReceiveMode"); } + if (clientResult.getStatus() == 204) { + return null; + } + BrokerProperties brokerProperties; if (clientResult.getHeaders().containsKey("BrokerProperties")) { brokerProperties = mapper.fromString(clientResult.getHeaders().getFirst("BrokerProperties")); diff --git a/microsoft-azure-api/src/test/java/com/microsoft/windowsazure/services/serviceBus/ServiceBusIntegrationTest.java b/microsoft-azure-api/src/test/java/com/microsoft/windowsazure/services/serviceBus/ServiceBusIntegrationTest.java index c09af13305b8..a4b414600ab8 100644 --- a/microsoft-azure-api/src/test/java/com/microsoft/windowsazure/services/serviceBus/ServiceBusIntegrationTest.java +++ b/microsoft-azure-api/src/test/java/com/microsoft/windowsazure/services/serviceBus/ServiceBusIntegrationTest.java @@ -47,6 +47,7 @@ import com.microsoft.windowsazure.services.serviceBus.models.ListTopicsResult; import com.microsoft.windowsazure.services.serviceBus.models.QueueInfo; import com.microsoft.windowsazure.services.serviceBus.models.ReceiveMessageOptions; +import com.microsoft.windowsazure.services.serviceBus.models.ReceiveQueueMessageResult; import com.microsoft.windowsazure.services.serviceBus.models.RuleInfo; import com.microsoft.windowsazure.services.serviceBus.models.SubscriptionInfo; import com.microsoft.windowsazure.services.serviceBus.models.TopicInfo; @@ -172,6 +173,21 @@ public void receiveMessageWorks() throws Exception { assertArrayEquals("Hello World".getBytes(), Arrays.copyOf(data, size)); } + @Test + public void receiveMessageEmptyQueueWorks() throws Exception { + // Arrange + String queueName = "TestReceiveMessageEmptyQueueWorks"; + service.createQueue(new QueueInfo(queueName)); + + // Act + ReceiveQueueMessageResult receiveQueueMessageResult = service.receiveQueueMessage(queueName, + RECEIVE_AND_DELETE_5_SECONDS); + + // Assert + assertNotNull(receiveQueueMessageResult); + assertNull(receiveQueueMessageResult.getValue()); + } + @Test public void peekLockMessageWorks() throws Exception { // Arrange @@ -189,6 +205,20 @@ public void peekLockMessageWorks() throws Exception { assertEquals("Hello Again", new String(data, 0, size)); } + @Test + public void peekLockMessageEmptyQueueWorks() throws Exception { + // Arrange + String queueName = "TestPeekLockMessageEmptyQueueWorks"; + service.createQueue(new QueueInfo(queueName)); + + // Act + ReceiveQueueMessageResult result = service.receiveQueueMessage(queueName, PEEK_LOCK_5_SECONDS); + + // Assert + assertNotNull(result); + assertNull(result.getValue()); + } + @Test public void peekLockedMessageCanBeCompleted() throws Exception { // Arrange @@ -252,8 +282,20 @@ public void peekLockedMessageCanBeDeleted() throws Exception { // Assert assertNotNull(lockToken); assertNotNull(lockedUntil); - assertNull(receivedMessage.getLockToken()); - assertNull(receivedMessage.getLockedUntilUtc()); + assertNull(receivedMessage); + } + + @Test + public void emptyQueueReturnsNullMessage() throws Exception { + // Arrange + String queueName = "testEmptyQueueReturnsNullMessage"; + service.createQueue(new QueueInfo(queueName)); + + // Act + BrokeredMessage brokeredMessage = service.receiveQueueMessage(queueName, PEEK_LOCK_5_SECONDS).getValue(); + + // Assert + assertNull(brokeredMessage); } @Test