You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2015/03/30 14:32:33 UTC

[1/4] camel git commit: Fix Camel-8540 S3Consumer uses maxMessagesPerPoll incorrectly

Repository: camel
Updated Branches:
  refs/heads/camel-2.15.x f92078e14 -> 50017e615
  refs/heads/master 88fe5dd1e -> 17fd873cc


Fix Camel-8540 S3Consumer uses maxMessagesPerPoll incorrectly


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/ec625602
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/ec625602
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/ec625602

Branch: refs/heads/master
Commit: ec6256023327027fd48924b1b3bdab28cafc4bd5
Parents: 88fe5dd
Author: ancosen <an...@gmail.com>
Authored: Sun Mar 29 14:24:57 2015 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Mon Mar 30 14:25:02 2015 +0200

----------------------------------------------------------------------
 .../camel/component/aws/s3/S3Consumer.java      |   4 +-
 .../component/aws/s3/AmazonS3ClientMock.java    |  12 +-
 .../S3BatchConsumerMaxMessagesPerPollTest.java  | 110 +++++++++++++++++++
 3 files changed, 123 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/ec625602/components/camel-aws/src/main/java/org/apache/camel/component/aws/s3/S3Consumer.java
----------------------------------------------------------------------
diff --git a/components/camel-aws/src/main/java/org/apache/camel/component/aws/s3/S3Consumer.java b/components/camel-aws/src/main/java/org/apache/camel/component/aws/s3/S3Consumer.java
index 73656e4..bac2649 100644
--- a/components/camel-aws/src/main/java/org/apache/camel/component/aws/s3/S3Consumer.java
+++ b/components/camel-aws/src/main/java/org/apache/camel/component/aws/s3/S3Consumer.java
@@ -75,7 +75,9 @@ public class S3Consumer extends ScheduledBatchPollingConsumer {
             ListObjectsRequest listObjectsRequest = new ListObjectsRequest();
             listObjectsRequest.setBucketName(bucketName);
             listObjectsRequest.setPrefix(getConfiguration().getPrefix());
-            listObjectsRequest.setMaxKeys(maxMessagesPerPoll);
+            if (maxMessagesPerPoll > 0) {
+                listObjectsRequest.setMaxKeys(maxMessagesPerPoll);
+            }
             if (marker != null && !getConfiguration().isDeleteAfterRead()) {
                 listObjectsRequest.setMarker(marker);
             }

http://git-wip-us.apache.org/repos/asf/camel/blob/ec625602/components/camel-aws/src/test/java/org/apache/camel/component/aws/s3/AmazonS3ClientMock.java
----------------------------------------------------------------------
diff --git a/components/camel-aws/src/test/java/org/apache/camel/component/aws/s3/AmazonS3ClientMock.java b/components/camel-aws/src/test/java/org/apache/camel/component/aws/s3/AmazonS3ClientMock.java
index de839b1..93f2186 100644
--- a/components/camel-aws/src/test/java/org/apache/camel/component/aws/s3/AmazonS3ClientMock.java
+++ b/components/camel-aws/src/test/java/org/apache/camel/component/aws/s3/AmazonS3ClientMock.java
@@ -75,6 +75,8 @@ import com.amazonaws.services.s3.model.StorageClass;
 import com.amazonaws.services.s3.model.UploadPartRequest;
 import com.amazonaws.services.s3.model.UploadPartResult;
 import com.amazonaws.services.s3.model.VersionListing;
+
+import org.apache.camel.util.ObjectHelper;
 import org.junit.Assert;
 
 public class AmazonS3ClientMock extends AmazonS3Client {
@@ -84,6 +86,8 @@ public class AmazonS3ClientMock extends AmazonS3Client {
     
     private boolean nonExistingBucketCreated;
     
+    private int maxCapacity = 100;
+    
     public AmazonS3ClientMock() {
         super(new BasicAWSCredentials("myAccessKey", "mySecretKey"));
     }
@@ -126,9 +130,13 @@ public class AmazonS3ClientMock extends AmazonS3Client {
             ex.setStatusCode(404);
             throw ex; 
         }
-        
+        int capacity;
         ObjectListing objectListing = new ObjectListing();
-        int capacity = listObjectsRequest.getMaxKeys();
+        if (!ObjectHelper.isEmpty(listObjectsRequest.getMaxKeys()) && listObjectsRequest.getMaxKeys() != null) {
+            capacity = listObjectsRequest.getMaxKeys();
+        } else {
+        	capacity = maxCapacity;
+        }
         
         for (int index = 0; index < objects.size() && index < capacity; index++) {
             S3ObjectSummary s3ObjectSummary = new S3ObjectSummary();

http://git-wip-us.apache.org/repos/asf/camel/blob/ec625602/components/camel-aws/src/test/java/org/apache/camel/component/aws/s3/S3BatchConsumerMaxMessagesPerPollTest.java
----------------------------------------------------------------------
diff --git a/components/camel-aws/src/test/java/org/apache/camel/component/aws/s3/S3BatchConsumerMaxMessagesPerPollTest.java b/components/camel-aws/src/test/java/org/apache/camel/component/aws/s3/S3BatchConsumerMaxMessagesPerPollTest.java
new file mode 100644
index 0000000..c1b9fe2
--- /dev/null
+++ b/components/camel-aws/src/test/java/org/apache/camel/component/aws/s3/S3BatchConsumerMaxMessagesPerPollTest.java
@@ -0,0 +1,110 @@
+/**
+ * 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 com.amazonaws.services.s3.model.S3Object;
+import org.apache.camel.EndpointInject;
+import org.apache.camel.Exchange;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.impl.JndiRegistry;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+public class S3BatchConsumerMaxMessagesPerPollTest extends CamelTestSupport {
+    
+    @EndpointInject(uri = "mock:result")
+    private MockEndpoint mock;
+        
+    @Test
+    public void receiveBatch() throws Exception {
+        mock.expectedMessageCount(20);
+        assertMockEndpointsSatisfied();
+        
+        mock.message(0).exchangeProperty(Exchange.BATCH_INDEX).isEqualTo(1);
+        mock.message(1).exchangeProperty(Exchange.BATCH_INDEX).isEqualTo(2);
+        mock.message(2).exchangeProperty(Exchange.BATCH_INDEX).isEqualTo(3);
+        mock.message(3).exchangeProperty(Exchange.BATCH_INDEX).isEqualTo(4);
+        mock.message(4).exchangeProperty(Exchange.BATCH_INDEX).isEqualTo(5);
+        mock.message(5).exchangeProperty(Exchange.BATCH_INDEX).isEqualTo(6);
+        mock.message(6).exchangeProperty(Exchange.BATCH_INDEX).isEqualTo(7);
+        mock.message(7).exchangeProperty(Exchange.BATCH_INDEX).isEqualTo(8);
+        mock.message(8).exchangeProperty(Exchange.BATCH_INDEX).isEqualTo(9);
+        mock.message(9).exchangeProperty(Exchange.BATCH_INDEX).isEqualTo(10);
+        mock.message(10).exchangeProperty(Exchange.BATCH_INDEX).isEqualTo(11);
+        mock.message(11).exchangeProperty(Exchange.BATCH_INDEX).isEqualTo(12);
+        mock.message(12).exchangeProperty(Exchange.BATCH_INDEX).isEqualTo(13);
+        mock.message(13).exchangeProperty(Exchange.BATCH_INDEX).isEqualTo(14);
+        mock.message(14).exchangeProperty(Exchange.BATCH_INDEX).isEqualTo(15);
+        mock.message(15).exchangeProperty(Exchange.BATCH_INDEX).isEqualTo(16);
+        mock.message(16).exchangeProperty(Exchange.BATCH_INDEX).isEqualTo(17);
+        mock.message(17).exchangeProperty(Exchange.BATCH_INDEX).isEqualTo(18);
+        mock.message(18).exchangeProperty(Exchange.BATCH_INDEX).isEqualTo(19);
+        mock.message(19).exchangeProperty(Exchange.BATCH_INDEX).isEqualTo(20);
+        mock.message(0).exchangeProperty(Exchange.BATCH_COMPLETE).isEqualTo(false);
+        mock.message(1).exchangeProperty(Exchange.BATCH_COMPLETE).isEqualTo(false);
+        mock.message(2).exchangeProperty(Exchange.BATCH_COMPLETE).isEqualTo(false);
+        mock.message(3).exchangeProperty(Exchange.BATCH_COMPLETE).isEqualTo(false);
+        mock.message(4).exchangeProperty(Exchange.BATCH_COMPLETE).isEqualTo(false);
+        mock.message(5).exchangeProperty(Exchange.BATCH_COMPLETE).isEqualTo(false);
+        mock.message(6).exchangeProperty(Exchange.BATCH_COMPLETE).isEqualTo(false);
+        mock.message(7).exchangeProperty(Exchange.BATCH_COMPLETE).isEqualTo(false);
+        mock.message(8).exchangeProperty(Exchange.BATCH_COMPLETE).isEqualTo(false);
+        mock.message(9).exchangeProperty(Exchange.BATCH_COMPLETE).isEqualTo(false);
+        mock.message(10).exchangeProperty(Exchange.BATCH_COMPLETE).isEqualTo(false);
+        mock.message(11).exchangeProperty(Exchange.BATCH_COMPLETE).isEqualTo(false);
+        mock.message(12).exchangeProperty(Exchange.BATCH_COMPLETE).isEqualTo(false);
+        mock.message(13).exchangeProperty(Exchange.BATCH_COMPLETE).isEqualTo(false);
+        mock.message(14).exchangeProperty(Exchange.BATCH_COMPLETE).isEqualTo(false);
+        mock.message(15).exchangeProperty(Exchange.BATCH_COMPLETE).isEqualTo(false);
+        mock.message(16).exchangeProperty(Exchange.BATCH_COMPLETE).isEqualTo(false);
+        mock.message(17).exchangeProperty(Exchange.BATCH_COMPLETE).isEqualTo(false);
+        mock.message(18).exchangeProperty(Exchange.BATCH_COMPLETE).isEqualTo(false);
+        mock.message(19).exchangeProperty(Exchange.BATCH_COMPLETE).isEqualTo(true);
+        mock.expectedPropertyReceived(Exchange.BATCH_SIZE, 20);
+    }
+    
+    @Override
+    protected JndiRegistry createRegistry() throws Exception {
+        JndiRegistry registry = super.createRegistry();
+        
+        AmazonS3ClientMock clientMock = new AmazonS3ClientMock();
+        // add 20 messages
+        for (int counter = 0; counter < 20; counter++) {
+            S3Object s3Object = new S3Object();
+            s3Object.setBucketName("mycamelbucket");
+            s3Object.setKey("counter-" + counter);
+            
+            clientMock.objects.add(s3Object);
+        }
+        
+        registry.bind("amazonS3Client", clientMock);
+        
+        return registry;
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("aws-s3://mycamelbucket?amazonS3Client=#amazonS3Client&region=us-west-1&delay=5000&maxMessagesPerPoll=0")
+                    .to("mock:result");
+            }
+        };
+    }
+}
\ No newline at end of file


[2/4] camel git commit: CAMEL-8540: Fixed CS

Posted by da...@apache.org.
CAMEL-8540: Fixed CS


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/17fd873c
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/17fd873c
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/17fd873c

Branch: refs/heads/master
Commit: 17fd873cc2528bee962af6ef083fe4ac82d6ca8d
Parents: ec62560
Author: Claus Ibsen <da...@apache.org>
Authored: Mon Mar 30 14:34:19 2015 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Mon Mar 30 14:34:19 2015 +0200

----------------------------------------------------------------------
 .../org/apache/camel/component/aws/s3/AmazonS3ClientMock.java    | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/17fd873c/components/camel-aws/src/test/java/org/apache/camel/component/aws/s3/AmazonS3ClientMock.java
----------------------------------------------------------------------
diff --git a/components/camel-aws/src/test/java/org/apache/camel/component/aws/s3/AmazonS3ClientMock.java b/components/camel-aws/src/test/java/org/apache/camel/component/aws/s3/AmazonS3ClientMock.java
index 93f2186..60ad8e0 100644
--- a/components/camel-aws/src/test/java/org/apache/camel/component/aws/s3/AmazonS3ClientMock.java
+++ b/components/camel-aws/src/test/java/org/apache/camel/component/aws/s3/AmazonS3ClientMock.java
@@ -126,7 +126,7 @@ public class AmazonS3ClientMock extends AmazonS3Client {
     @Override
     public ObjectListing listObjects(ListObjectsRequest listObjectsRequest) throws AmazonClientException, AmazonServiceException {
         if ("nonExistingBucket".equals(listObjectsRequest.getBucketName()) && !nonExistingBucketCreated) {
-            AmazonServiceException ex = new AmazonServiceException("Unknow bucket");
+            AmazonServiceException ex = new AmazonServiceException("Unknown bucket");
             ex.setStatusCode(404);
             throw ex; 
         }
@@ -135,7 +135,7 @@ public class AmazonS3ClientMock extends AmazonS3Client {
         if (!ObjectHelper.isEmpty(listObjectsRequest.getMaxKeys()) && listObjectsRequest.getMaxKeys() != null) {
             capacity = listObjectsRequest.getMaxKeys();
         } else {
-        	capacity = maxCapacity;
+            capacity = maxCapacity;
         }
         
         for (int index = 0; index < objects.size() && index < capacity; index++) {


[4/4] camel git commit: CAMEL-8540: Fixed CS

Posted by da...@apache.org.
CAMEL-8540: Fixed CS


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/50017e61
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/50017e61
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/50017e61

Branch: refs/heads/camel-2.15.x
Commit: 50017e615d4ec185c24e2f930e0c768314dab604
Parents: dbf52d5
Author: Claus Ibsen <da...@apache.org>
Authored: Mon Mar 30 14:34:19 2015 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Mon Mar 30 14:34:50 2015 +0200

----------------------------------------------------------------------
 .../org/apache/camel/component/aws/s3/AmazonS3ClientMock.java    | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/50017e61/components/camel-aws/src/test/java/org/apache/camel/component/aws/s3/AmazonS3ClientMock.java
----------------------------------------------------------------------
diff --git a/components/camel-aws/src/test/java/org/apache/camel/component/aws/s3/AmazonS3ClientMock.java b/components/camel-aws/src/test/java/org/apache/camel/component/aws/s3/AmazonS3ClientMock.java
index 93f2186..60ad8e0 100644
--- a/components/camel-aws/src/test/java/org/apache/camel/component/aws/s3/AmazonS3ClientMock.java
+++ b/components/camel-aws/src/test/java/org/apache/camel/component/aws/s3/AmazonS3ClientMock.java
@@ -126,7 +126,7 @@ public class AmazonS3ClientMock extends AmazonS3Client {
     @Override
     public ObjectListing listObjects(ListObjectsRequest listObjectsRequest) throws AmazonClientException, AmazonServiceException {
         if ("nonExistingBucket".equals(listObjectsRequest.getBucketName()) && !nonExistingBucketCreated) {
-            AmazonServiceException ex = new AmazonServiceException("Unknow bucket");
+            AmazonServiceException ex = new AmazonServiceException("Unknown bucket");
             ex.setStatusCode(404);
             throw ex; 
         }
@@ -135,7 +135,7 @@ public class AmazonS3ClientMock extends AmazonS3Client {
         if (!ObjectHelper.isEmpty(listObjectsRequest.getMaxKeys()) && listObjectsRequest.getMaxKeys() != null) {
             capacity = listObjectsRequest.getMaxKeys();
         } else {
-        	capacity = maxCapacity;
+            capacity = maxCapacity;
         }
         
         for (int index = 0; index < objects.size() && index < capacity; index++) {


[3/4] camel git commit: Fix Camel-8540 S3Consumer uses maxMessagesPerPoll incorrectly

Posted by da...@apache.org.
Fix Camel-8540 S3Consumer uses maxMessagesPerPoll incorrectly


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/dbf52d54
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/dbf52d54
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/dbf52d54

Branch: refs/heads/camel-2.15.x
Commit: dbf52d546f32d1506e95c20709e287b3c5c4f59b
Parents: f92078e
Author: ancosen <an...@gmail.com>
Authored: Sun Mar 29 14:24:57 2015 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Mon Mar 30 14:34:45 2015 +0200

----------------------------------------------------------------------
 .../camel/component/aws/s3/S3Consumer.java      |   4 +-
 .../component/aws/s3/AmazonS3ClientMock.java    |  12 +-
 .../S3BatchConsumerMaxMessagesPerPollTest.java  | 110 +++++++++++++++++++
 3 files changed, 123 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/dbf52d54/components/camel-aws/src/main/java/org/apache/camel/component/aws/s3/S3Consumer.java
----------------------------------------------------------------------
diff --git a/components/camel-aws/src/main/java/org/apache/camel/component/aws/s3/S3Consumer.java b/components/camel-aws/src/main/java/org/apache/camel/component/aws/s3/S3Consumer.java
index 73656e4..bac2649 100644
--- a/components/camel-aws/src/main/java/org/apache/camel/component/aws/s3/S3Consumer.java
+++ b/components/camel-aws/src/main/java/org/apache/camel/component/aws/s3/S3Consumer.java
@@ -75,7 +75,9 @@ public class S3Consumer extends ScheduledBatchPollingConsumer {
             ListObjectsRequest listObjectsRequest = new ListObjectsRequest();
             listObjectsRequest.setBucketName(bucketName);
             listObjectsRequest.setPrefix(getConfiguration().getPrefix());
-            listObjectsRequest.setMaxKeys(maxMessagesPerPoll);
+            if (maxMessagesPerPoll > 0) {
+                listObjectsRequest.setMaxKeys(maxMessagesPerPoll);
+            }
             if (marker != null && !getConfiguration().isDeleteAfterRead()) {
                 listObjectsRequest.setMarker(marker);
             }

http://git-wip-us.apache.org/repos/asf/camel/blob/dbf52d54/components/camel-aws/src/test/java/org/apache/camel/component/aws/s3/AmazonS3ClientMock.java
----------------------------------------------------------------------
diff --git a/components/camel-aws/src/test/java/org/apache/camel/component/aws/s3/AmazonS3ClientMock.java b/components/camel-aws/src/test/java/org/apache/camel/component/aws/s3/AmazonS3ClientMock.java
index de839b1..93f2186 100644
--- a/components/camel-aws/src/test/java/org/apache/camel/component/aws/s3/AmazonS3ClientMock.java
+++ b/components/camel-aws/src/test/java/org/apache/camel/component/aws/s3/AmazonS3ClientMock.java
@@ -75,6 +75,8 @@ import com.amazonaws.services.s3.model.StorageClass;
 import com.amazonaws.services.s3.model.UploadPartRequest;
 import com.amazonaws.services.s3.model.UploadPartResult;
 import com.amazonaws.services.s3.model.VersionListing;
+
+import org.apache.camel.util.ObjectHelper;
 import org.junit.Assert;
 
 public class AmazonS3ClientMock extends AmazonS3Client {
@@ -84,6 +86,8 @@ public class AmazonS3ClientMock extends AmazonS3Client {
     
     private boolean nonExistingBucketCreated;
     
+    private int maxCapacity = 100;
+    
     public AmazonS3ClientMock() {
         super(new BasicAWSCredentials("myAccessKey", "mySecretKey"));
     }
@@ -126,9 +130,13 @@ public class AmazonS3ClientMock extends AmazonS3Client {
             ex.setStatusCode(404);
             throw ex; 
         }
-        
+        int capacity;
         ObjectListing objectListing = new ObjectListing();
-        int capacity = listObjectsRequest.getMaxKeys();
+        if (!ObjectHelper.isEmpty(listObjectsRequest.getMaxKeys()) && listObjectsRequest.getMaxKeys() != null) {
+            capacity = listObjectsRequest.getMaxKeys();
+        } else {
+        	capacity = maxCapacity;
+        }
         
         for (int index = 0; index < objects.size() && index < capacity; index++) {
             S3ObjectSummary s3ObjectSummary = new S3ObjectSummary();

http://git-wip-us.apache.org/repos/asf/camel/blob/dbf52d54/components/camel-aws/src/test/java/org/apache/camel/component/aws/s3/S3BatchConsumerMaxMessagesPerPollTest.java
----------------------------------------------------------------------
diff --git a/components/camel-aws/src/test/java/org/apache/camel/component/aws/s3/S3BatchConsumerMaxMessagesPerPollTest.java b/components/camel-aws/src/test/java/org/apache/camel/component/aws/s3/S3BatchConsumerMaxMessagesPerPollTest.java
new file mode 100644
index 0000000..c1b9fe2
--- /dev/null
+++ b/components/camel-aws/src/test/java/org/apache/camel/component/aws/s3/S3BatchConsumerMaxMessagesPerPollTest.java
@@ -0,0 +1,110 @@
+/**
+ * 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 com.amazonaws.services.s3.model.S3Object;
+import org.apache.camel.EndpointInject;
+import org.apache.camel.Exchange;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.impl.JndiRegistry;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+public class S3BatchConsumerMaxMessagesPerPollTest extends CamelTestSupport {
+    
+    @EndpointInject(uri = "mock:result")
+    private MockEndpoint mock;
+        
+    @Test
+    public void receiveBatch() throws Exception {
+        mock.expectedMessageCount(20);
+        assertMockEndpointsSatisfied();
+        
+        mock.message(0).exchangeProperty(Exchange.BATCH_INDEX).isEqualTo(1);
+        mock.message(1).exchangeProperty(Exchange.BATCH_INDEX).isEqualTo(2);
+        mock.message(2).exchangeProperty(Exchange.BATCH_INDEX).isEqualTo(3);
+        mock.message(3).exchangeProperty(Exchange.BATCH_INDEX).isEqualTo(4);
+        mock.message(4).exchangeProperty(Exchange.BATCH_INDEX).isEqualTo(5);
+        mock.message(5).exchangeProperty(Exchange.BATCH_INDEX).isEqualTo(6);
+        mock.message(6).exchangeProperty(Exchange.BATCH_INDEX).isEqualTo(7);
+        mock.message(7).exchangeProperty(Exchange.BATCH_INDEX).isEqualTo(8);
+        mock.message(8).exchangeProperty(Exchange.BATCH_INDEX).isEqualTo(9);
+        mock.message(9).exchangeProperty(Exchange.BATCH_INDEX).isEqualTo(10);
+        mock.message(10).exchangeProperty(Exchange.BATCH_INDEX).isEqualTo(11);
+        mock.message(11).exchangeProperty(Exchange.BATCH_INDEX).isEqualTo(12);
+        mock.message(12).exchangeProperty(Exchange.BATCH_INDEX).isEqualTo(13);
+        mock.message(13).exchangeProperty(Exchange.BATCH_INDEX).isEqualTo(14);
+        mock.message(14).exchangeProperty(Exchange.BATCH_INDEX).isEqualTo(15);
+        mock.message(15).exchangeProperty(Exchange.BATCH_INDEX).isEqualTo(16);
+        mock.message(16).exchangeProperty(Exchange.BATCH_INDEX).isEqualTo(17);
+        mock.message(17).exchangeProperty(Exchange.BATCH_INDEX).isEqualTo(18);
+        mock.message(18).exchangeProperty(Exchange.BATCH_INDEX).isEqualTo(19);
+        mock.message(19).exchangeProperty(Exchange.BATCH_INDEX).isEqualTo(20);
+        mock.message(0).exchangeProperty(Exchange.BATCH_COMPLETE).isEqualTo(false);
+        mock.message(1).exchangeProperty(Exchange.BATCH_COMPLETE).isEqualTo(false);
+        mock.message(2).exchangeProperty(Exchange.BATCH_COMPLETE).isEqualTo(false);
+        mock.message(3).exchangeProperty(Exchange.BATCH_COMPLETE).isEqualTo(false);
+        mock.message(4).exchangeProperty(Exchange.BATCH_COMPLETE).isEqualTo(false);
+        mock.message(5).exchangeProperty(Exchange.BATCH_COMPLETE).isEqualTo(false);
+        mock.message(6).exchangeProperty(Exchange.BATCH_COMPLETE).isEqualTo(false);
+        mock.message(7).exchangeProperty(Exchange.BATCH_COMPLETE).isEqualTo(false);
+        mock.message(8).exchangeProperty(Exchange.BATCH_COMPLETE).isEqualTo(false);
+        mock.message(9).exchangeProperty(Exchange.BATCH_COMPLETE).isEqualTo(false);
+        mock.message(10).exchangeProperty(Exchange.BATCH_COMPLETE).isEqualTo(false);
+        mock.message(11).exchangeProperty(Exchange.BATCH_COMPLETE).isEqualTo(false);
+        mock.message(12).exchangeProperty(Exchange.BATCH_COMPLETE).isEqualTo(false);
+        mock.message(13).exchangeProperty(Exchange.BATCH_COMPLETE).isEqualTo(false);
+        mock.message(14).exchangeProperty(Exchange.BATCH_COMPLETE).isEqualTo(false);
+        mock.message(15).exchangeProperty(Exchange.BATCH_COMPLETE).isEqualTo(false);
+        mock.message(16).exchangeProperty(Exchange.BATCH_COMPLETE).isEqualTo(false);
+        mock.message(17).exchangeProperty(Exchange.BATCH_COMPLETE).isEqualTo(false);
+        mock.message(18).exchangeProperty(Exchange.BATCH_COMPLETE).isEqualTo(false);
+        mock.message(19).exchangeProperty(Exchange.BATCH_COMPLETE).isEqualTo(true);
+        mock.expectedPropertyReceived(Exchange.BATCH_SIZE, 20);
+    }
+    
+    @Override
+    protected JndiRegistry createRegistry() throws Exception {
+        JndiRegistry registry = super.createRegistry();
+        
+        AmazonS3ClientMock clientMock = new AmazonS3ClientMock();
+        // add 20 messages
+        for (int counter = 0; counter < 20; counter++) {
+            S3Object s3Object = new S3Object();
+            s3Object.setBucketName("mycamelbucket");
+            s3Object.setKey("counter-" + counter);
+            
+            clientMock.objects.add(s3Object);
+        }
+        
+        registry.bind("amazonS3Client", clientMock);
+        
+        return registry;
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("aws-s3://mycamelbucket?amazonS3Client=#amazonS3Client&region=us-west-1&delay=5000&maxMessagesPerPoll=0")
+                    .to("mock:result");
+            }
+        };
+    }
+}
\ No newline at end of file