package com.amazonaws.services.sqs; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; import java.util.Optional; import java.util.concurrent.TimeUnit; import org.junit.After; import org.junit.Before; import org.junit.Test; import com.amazonaws.services.sqs.model.CreateQueueRequest; import com.amazonaws.services.sqs.model.QueueDoesNotExistException; import com.amazonaws.services.sqs.model.ReceiveMessageRequest; import com.amazonaws.services.sqs.util.IntegrationTest; public class AmazonSQSVirtualQueuesClientIT extends IntegrationTest { private static String hostQueueUrl; private static AmazonSQS client; @Before public void setup() { client = AmazonSQSVirtualQueuesClientBuilder.standard().withAmazonSQS(sqs).build(); hostQueueUrl = client.createQueue(queueNamePrefix + "-HostQueue").getQueueUrl(); } @After public void teardown() { if (hostQueueUrl != null) { client.deleteQueue(hostQueueUrl); } if (client != null) { client.shutdown(); } } @Test public void expiringVirtualQueue() throws InterruptedException { CreateQueueRequest request = new CreateQueueRequest() .withQueueName("ShortLived") .addAttributesEntry(AmazonSQSVirtualQueuesClient.VIRTUAL_QUEUE_HOST_QUEUE_ATTRIBUTE, hostQueueUrl) .addAttributesEntry(AmazonSQSIdleQueueDeletingClient.IDLE_QUEUE_RETENTION_PERIOD, "10"); String virtualQueueUrl = client.createQueue(request).getQueueUrl(); // Do a few long poll receives and validate the queue stays alive. // We expect empty receives but not errors. ReceiveMessageRequest receiveRequest = new ReceiveMessageRequest() .withQueueUrl(virtualQueueUrl) .withWaitTimeSeconds(5); for (int i = 0; i < 3; i++) { assertEquals(0, client.receiveMessage(receiveRequest).getMessages().size()); } // Now go idle for a while and the queue should be deleted. TimeUnit.SECONDS.sleep(12); try { client.receiveMessage(virtualQueueUrl); fail("Expected queue to be automatically deleted: " + virtualQueueUrl); } catch (QueueDoesNotExistException e) { // Expected } } @Test public void ReceiveMessageWaitTimeSecondsNull() { CreateQueueRequest request = new CreateQueueRequest() .withQueueName("ReceiveMessageWaitTimeSecondsNull") .addAttributesEntry(AmazonSQSVirtualQueuesClient.VIRTUAL_QUEUE_HOST_QUEUE_ATTRIBUTE, hostQueueUrl) .addAttributesEntry(AmazonSQSIdleQueueDeletingClient.IDLE_QUEUE_RETENTION_PERIOD, "5"); String virtualQueueUrl = client.createQueue(request).getQueueUrl(); // Do Receive message request with null WaitTimeSeconds. ReceiveMessageRequest receiveRequest = new ReceiveMessageRequest() .withQueueUrl(virtualQueueUrl); try { assertEquals(0, client.receiveMessage(receiveRequest).getMessages().size()); } catch (NullPointerException npe) { fail("NPE not expected with null WaitTimeSeconds on ReceiveMessageRequest"); } } }