Repository: camel Updated Branches: refs/heads/master 81ea4398c -> 59c3420d8
CAMEL-10183: Camel-Aws: add list and delete buckets operations on the S3 Producer Endpoint - Added deleteBucket operation Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/cd0887c6 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/cd0887c6 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/cd0887c6 Branch: refs/heads/master Commit: cd0887c665c227d1ca8e92d05d98059eadd0b117 Parents: 6355428 Author: Andrea Cosentino <anco...@gmail.com> Authored: Tue Jul 26 11:47:30 2016 +0200 Committer: Andrea Cosentino <anco...@gmail.com> Committed: Tue Jul 26 12:01:50 2016 +0200 ---------------------------------------------------------------------- .../camel/component/aws/s3/S3Operations.java | 1 - .../camel/component/aws/s3/S3Producer.java | 17 +++++ .../s3/S3ComponentListBucketsSpringTest.java | 75 ++++++++++++++++++++ .../aws/s3/S3ComponentListBucketsTest.java | 6 +- .../aws/s3/S3ComponentSpringTest-context.xml | 5 ++ 5 files changed, 100 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/cd0887c6/components/camel-aws/src/main/java/org/apache/camel/component/aws/s3/S3Operations.java ---------------------------------------------------------------------- diff --git a/components/camel-aws/src/main/java/org/apache/camel/component/aws/s3/S3Operations.java b/components/camel-aws/src/main/java/org/apache/camel/component/aws/s3/S3Operations.java index d4dbb0a..28246bb 100644 --- a/components/camel-aws/src/main/java/org/apache/camel/component/aws/s3/S3Operations.java +++ b/components/camel-aws/src/main/java/org/apache/camel/component/aws/s3/S3Operations.java @@ -19,7 +19,6 @@ package org.apache.camel.component.aws.s3; public enum S3Operations { copyObject, - createBucket, deleteBucket, listBuckets } http://git-wip-us.apache.org/repos/asf/camel/blob/cd0887c6/components/camel-aws/src/main/java/org/apache/camel/component/aws/s3/S3Producer.java ---------------------------------------------------------------------- diff --git a/components/camel-aws/src/main/java/org/apache/camel/component/aws/s3/S3Producer.java b/components/camel-aws/src/main/java/org/apache/camel/component/aws/s3/S3Producer.java index 33e40db..7b13ced 100644 --- a/components/camel-aws/src/main/java/org/apache/camel/component/aws/s3/S3Producer.java +++ b/components/camel-aws/src/main/java/org/apache/camel/component/aws/s3/S3Producer.java @@ -34,6 +34,8 @@ import com.amazonaws.services.s3.model.CompleteMultipartUploadRequest; import com.amazonaws.services.s3.model.CompleteMultipartUploadResult; import com.amazonaws.services.s3.model.CopyObjectRequest; import com.amazonaws.services.s3.model.CopyObjectResult; +import com.amazonaws.services.s3.model.CreateBucketRequest; +import com.amazonaws.services.s3.model.DeleteBucketRequest; import com.amazonaws.services.s3.model.InitiateMultipartUploadRequest; import com.amazonaws.services.s3.model.InitiateMultipartUploadResult; import com.amazonaws.services.s3.model.ObjectMetadata; @@ -90,6 +92,9 @@ public class S3Producer extends DefaultProducer { case listBuckets: listBuckets(getEndpoint().getS3Client(), exchange); break; + case deleteBucket: + deleteBucket(getEndpoint().getS3Client(), exchange); + break; default: throw new IllegalArgumentException("Unsupported operation"); } @@ -296,6 +301,18 @@ public class S3Producer extends DefaultProducer { message.setBody(bucketsList); } + private void deleteBucket(AmazonS3 s3Client, Exchange exchange) { + String bucketName; + + bucketName = exchange.getIn().getHeader(S3Constants.BUCKET_NAME, String.class); + if (ObjectHelper.isEmpty(bucketName)) { + bucketName = getConfiguration().getBucketName(); + } + + DeleteBucketRequest deleteBucketRequest = new DeleteBucketRequest(bucketName); + s3Client.deleteBucket(deleteBucketRequest); + } + private S3Operations determineOperation(Exchange exchange) { S3Operations operation = exchange.getIn().getHeader(EC2Constants.OPERATION, S3Operations.class); if (operation == null) { http://git-wip-us.apache.org/repos/asf/camel/blob/cd0887c6/components/camel-aws/src/test/java/org/apache/camel/component/aws/s3/S3ComponentListBucketsSpringTest.java ---------------------------------------------------------------------- diff --git a/components/camel-aws/src/test/java/org/apache/camel/component/aws/s3/S3ComponentListBucketsSpringTest.java b/components/camel-aws/src/test/java/org/apache/camel/component/aws/s3/S3ComponentListBucketsSpringTest.java new file mode 100644 index 0000000..1cee1a7 --- /dev/null +++ b/components/camel-aws/src/test/java/org/apache/camel/component/aws/s3/S3ComponentListBucketsSpringTest.java @@ -0,0 +1,75 @@ +/** + * 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.s3; + +import java.util.List; + +import com.amazonaws.services.s3.model.Bucket; + +import org.apache.camel.EndpointInject; +import org.apache.camel.Exchange; +import org.apache.camel.ExchangePattern; +import org.apache.camel.ProducerTemplate; +import org.apache.camel.component.mock.MockEndpoint; +import org.apache.camel.impl.JndiRegistry; +import org.apache.camel.test.spring.CamelSpringTestSupport; +import org.junit.Test; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +public class S3ComponentListBucketsSpringTest extends CamelSpringTestSupport { + + @EndpointInject(uri = "direct:start") + private ProducerTemplate template; + + @EndpointInject(uri = "mock:result") + private MockEndpoint result; + + private AmazonS3ClientMock client; + + @Test + public void sendIn() throws Exception { + result.expectedMessageCount(1); + + template.sendBody("direct:start", ExchangePattern.InOnly, ""); + assertMockEndpointsSatisfied(); + + assertResultExchange(result.getExchanges().get(0)); + + } + + private void assertResultExchange(Exchange resultExchange) { + List<Bucket> list = resultExchange.getIn().getBody(List.class); + assertEquals(1, list.size()); + assertEquals("camel", ((Bucket) list.get(0)).getOwner().getDisplayName()); + assertEquals("camel-bucket", ((Bucket) list.get(0)).getName()); + } + + @Override + protected JndiRegistry createRegistry() throws Exception { + JndiRegistry registry = super.createRegistry(); + + client = new AmazonS3ClientMock(); + registry.bind("amazonS3Client", client); + + return registry; + } + + @Override + protected ClassPathXmlApplicationContext createApplicationContext() { + return new ClassPathXmlApplicationContext("org/apache/camel/component/aws/s3/S3ComponentSpringTest-context.xml"); + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/cd0887c6/components/camel-aws/src/test/java/org/apache/camel/component/aws/s3/S3ComponentListBucketsTest.java ---------------------------------------------------------------------- diff --git a/components/camel-aws/src/test/java/org/apache/camel/component/aws/s3/S3ComponentListBucketsTest.java b/components/camel-aws/src/test/java/org/apache/camel/component/aws/s3/S3ComponentListBucketsTest.java index 8e509de..9d3db60 100644 --- a/components/camel-aws/src/test/java/org/apache/camel/component/aws/s3/S3ComponentListBucketsTest.java +++ b/components/camel-aws/src/test/java/org/apache/camel/component/aws/s3/S3ComponentListBucketsTest.java @@ -32,7 +32,7 @@ import org.junit.Test; public class S3ComponentListBucketsTest extends CamelTestSupport { - @EndpointInject(uri = "direct:start") + @EndpointInject(uri = "direct:listBuckets") private ProducerTemplate template; @EndpointInject(uri = "mock:result") @@ -44,7 +44,7 @@ public class S3ComponentListBucketsTest extends CamelTestSupport { public void sendIn() throws Exception { result.expectedMessageCount(1); - template.sendBody("direct:start", ExchangePattern.InOnly, ""); + template.sendBody("direct:listBuckets", ExchangePattern.InOnly, ""); assertMockEndpointsSatisfied(); assertResultExchange(result.getExchanges().get(0)); @@ -75,7 +75,7 @@ public class S3ComponentListBucketsTest extends CamelTestSupport { public void configure() throws Exception { String awsEndpoint = "aws-s3://mycamelbucket?amazonS3Client=#amazonS3Client®ion=us-west-1&operation=listBuckets"; - from("direct:start") + from("direct:listBuckets") .to(awsEndpoint) .to("mock:result"); http://git-wip-us.apache.org/repos/asf/camel/blob/cd0887c6/components/camel-aws/src/test/resources/org/apache/camel/component/aws/s3/S3ComponentSpringTest-context.xml ---------------------------------------------------------------------- diff --git a/components/camel-aws/src/test/resources/org/apache/camel/component/aws/s3/S3ComponentSpringTest-context.xml b/components/camel-aws/src/test/resources/org/apache/camel/component/aws/s3/S3ComponentSpringTest-context.xml index bf6212c..9d2770a 100644 --- a/components/camel-aws/src/test/resources/org/apache/camel/component/aws/s3/S3ComponentSpringTest-context.xml +++ b/components/camel-aws/src/test/resources/org/apache/camel/component/aws/s3/S3ComponentSpringTest-context.xml @@ -29,6 +29,11 @@ <from uri="direct:copyObject"/> <to uri="aws-s3://mycamelbucket?amazonS3Client=#amazonS3Client&operation=copyObject"/> <to uri="mock:result"/> + </route> + <route> + <from uri="direct:listBuckets"/> + <to uri="aws-s3://mycamelbucket?amazonS3Client=#amazonS3Client&operation=listBuckets"/> + <to uri="mock:result"/> </route> <route> <from uri="aws-s3://mycamelbucket?amazonS3Client=#amazonS3Client&maxMessagesPerPoll=5"/>