This is an automated email from the ASF dual-hosted git repository. acosentino pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/camel.git
commit 2646688b1b0abad2a28f38edc93f4a5acf83626f Author: Andrea Cosentino <anco...@gmail.com> AuthorDate: Thu May 23 12:00:52 2019 +0200 CAMEL-13562 - Camel-AWS-SQS: Add an operation to list existing queues --- .../camel/component/aws/sqs/SqsConstants.java | 1 + .../camel/component/aws/sqs/SqsOperations.java | 3 +- .../camel/component/aws/sqs/SqsProducer.java | 16 +++++ .../component/aws/sqs/AmazonSQSClientMock.java | 11 ++++ .../aws/sqs/SqsProducerListQueuesTest.java | 70 ++++++++++++++++++++++ 5 files changed, 100 insertions(+), 1 deletion(-) diff --git a/components/camel-aws-sqs/src/main/java/org/apache/camel/component/aws/sqs/SqsConstants.java b/components/camel-aws-sqs/src/main/java/org/apache/camel/component/aws/sqs/SqsConstants.java index f661178..4294fd7 100644 --- a/components/camel-aws-sqs/src/main/java/org/apache/camel/component/aws/sqs/SqsConstants.java +++ b/components/camel-aws-sqs/src/main/java/org/apache/camel/component/aws/sqs/SqsConstants.java @@ -29,5 +29,6 @@ public interface SqsConstants { String RECEIPT_HANDLE = "CamelAwsSqsReceiptHandle"; String DELAY_HEADER = "CamelAwsSqsDelaySeconds"; String MESSAGE_GROUP_ID_PROPERTY = "CamelAwsMessageGroupId"; + String SQS_QUEUE_PREFIX = "CamelAwsSqsPrefix"; String SQS_OPERATION = "CamelAwsSqsOperation"; } \ No newline at end of file diff --git a/components/camel-aws-sqs/src/main/java/org/apache/camel/component/aws/sqs/SqsOperations.java b/components/camel-aws-sqs/src/main/java/org/apache/camel/component/aws/sqs/SqsOperations.java index 1fb8a20..2ef17c7 100644 --- a/components/camel-aws-sqs/src/main/java/org/apache/camel/component/aws/sqs/SqsOperations.java +++ b/components/camel-aws-sqs/src/main/java/org/apache/camel/component/aws/sqs/SqsOperations.java @@ -19,5 +19,6 @@ package org.apache.camel.component.aws.sqs; public enum SqsOperations { sendBatchMessage, - deleteMessage + deleteMessage, + listQueues } diff --git a/components/camel-aws-sqs/src/main/java/org/apache/camel/component/aws/sqs/SqsProducer.java b/components/camel-aws-sqs/src/main/java/org/apache/camel/component/aws/sqs/SqsProducer.java index 01eecfe..e1b09cf 100644 --- a/components/camel-aws-sqs/src/main/java/org/apache/camel/component/aws/sqs/SqsProducer.java +++ b/components/camel-aws-sqs/src/main/java/org/apache/camel/component/aws/sqs/SqsProducer.java @@ -29,6 +29,8 @@ import java.util.UUID; import com.amazonaws.services.sqs.AmazonSQS; import com.amazonaws.services.sqs.model.DeleteMessageRequest; import com.amazonaws.services.sqs.model.DeleteMessageResult; +import com.amazonaws.services.sqs.model.ListQueuesRequest; +import com.amazonaws.services.sqs.model.ListQueuesResult; import com.amazonaws.services.sqs.model.MessageAttributeValue; import com.amazonaws.services.sqs.model.SendMessageBatchRequest; import com.amazonaws.services.sqs.model.SendMessageBatchRequestEntry; @@ -70,6 +72,9 @@ public class SqsProducer extends DefaultProducer { case deleteMessage: deleteMessage(getClient(), exchange); break; + case listQueues: + listQueues(getClient(), exchange); + break; default: throw new IllegalArgumentException("Unsupported operation"); } @@ -134,6 +139,17 @@ public class SqsProducer extends DefaultProducer { Message message = getMessageForResponse(exchange); message.setBody(result); } + + private void listQueues(AmazonSQS amazonSQS, Exchange exchange) { + ListQueuesRequest request = new ListQueuesRequest(); + if (ObjectHelper.isNotEmpty(exchange.getIn().getHeader(SqsConstants.SQS_QUEUE_PREFIX))) { + request.setQueueNamePrefix(exchange.getIn().getHeader(SqsConstants.SQS_QUEUE_PREFIX, String.class)); + } + ListQueuesResult result = new ListQueuesResult(); + result = amazonSQS.listQueues(request); + Message message = getMessageForResponse(exchange); + message.setBody(result); + } private void configureFifoAttributes(SendMessageRequest request, Exchange exchange) { if (getEndpoint().getConfiguration().isFifoQueue()) { diff --git a/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/AmazonSQSClientMock.java b/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/AmazonSQSClientMock.java index b3ca00d..a6c333b 100644 --- a/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/AmazonSQSClientMock.java +++ b/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/AmazonSQSClientMock.java @@ -39,6 +39,7 @@ import com.amazonaws.services.sqs.model.CreateQueueRequest; import com.amazonaws.services.sqs.model.CreateQueueResult; import com.amazonaws.services.sqs.model.DeleteMessageRequest; import com.amazonaws.services.sqs.model.DeleteMessageResult; +import com.amazonaws.services.sqs.model.ListQueuesRequest; import com.amazonaws.services.sqs.model.ListQueuesResult; import com.amazonaws.services.sqs.model.Message; import com.amazonaws.services.sqs.model.ReceiveMessageRequest; @@ -70,6 +71,16 @@ public class AmazonSQSClientMock extends AbstractAmazonSQS { ListQueuesResult result = new ListQueuesResult(); return result; } + + @Override + public ListQueuesResult listQueues(ListQueuesRequest request) { + ListQueuesResult result = new ListQueuesResult(); + List<String> queues = new ArrayList<String>(); + queues.add("queue1"); + queues.add("queue2"); + result.setQueueUrls(queues); + return result; + } @Override public CreateQueueResult createQueue(CreateQueueRequest createQueueRequest) throws AmazonServiceException, AmazonClientException { diff --git a/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsProducerListQueuesTest.java b/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsProducerListQueuesTest.java new file mode 100644 index 0000000..f122cde --- /dev/null +++ b/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsProducerListQueuesTest.java @@ -0,0 +1,70 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.component.aws.sqs; + +import com.amazonaws.services.sqs.model.ListQueuesResult; + +import org.apache.camel.BindToRegistry; +import org.apache.camel.EndpointInject; +import org.apache.camel.Exchange; +import org.apache.camel.Processor; +import org.apache.camel.ProducerTemplate; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.component.mock.MockEndpoint; +import org.apache.camel.test.junit4.CamelTestSupport; +import org.junit.Test; + +public class SqsProducerListQueuesTest extends CamelTestSupport { + + @BindToRegistry("client") + AmazonSQSClientMock mock = new AmazonSQSClientMock(); + + @EndpointInject("direct:start") + private ProducerTemplate template; + + @EndpointInject("mock:result") + private MockEndpoint result; + + @Test + public void listQueues() throws Exception { + result.expectedMessageCount(1); + + template.send("direct:start", new Processor() { + + @Override + public void process(Exchange exchange) throws Exception { + exchange.getIn().setHeader(SqsConstants.RECEIPT_HANDLE, "123456"); + } + }); + assertMockEndpointsSatisfied(); + ListQueuesResult res = result.getExchanges().get(0).getIn().getBody(ListQueuesResult.class); + assertNotNull(res); + assertEquals(2, res.getQueueUrls().size()); + } + + @Override + protected RouteBuilder createRouteBuilder() throws Exception { + return new RouteBuilder() { + @Override + public void configure() throws Exception { + from("direct:start") + .to("aws-sqs://camel-1?amazonSQSClient=#client&operation=listQueues").to("mock:result"); + } + }; + } + +}