You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ac...@apache.org on 2015/09/11 13:39:55 UTC
camel git commit: CAMEL-9128: Camel-Hazelcast: Add a Ringbuffer
producer
Repository: camel
Updated Branches:
refs/heads/master 31a2795f5 -> 20a3b67ed
CAMEL-9128: Camel-Hazelcast: Add a Ringbuffer producer
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/20a3b67e
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/20a3b67e
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/20a3b67e
Branch: refs/heads/master
Commit: 20a3b67ed010f158fbe49e792422ed07bb704066
Parents: 31a2795
Author: Andrea Cosentino <an...@gmail.com>
Authored: Thu Sep 10 12:30:15 2015 +0200
Committer: Andrea Cosentino <an...@gmail.com>
Committed: Fri Sep 11 13:36:17 2015 +0200
----------------------------------------------------------------------
.../component/hazelcast/HazelcastCommand.java | 2 +-
.../component/hazelcast/HazelcastComponent.java | 14 ++-
.../hazelcast/HazelcastComponentHelper.java | 5 +
.../component/hazelcast/HazelcastConstants.java | 6 ++
.../ringbuffer/HazelcastRingbufferEndpoint.java | 40 +++++++
.../ringbuffer/HazelcastRingbufferProducer.java | 95 +++++++++++++++++
.../hazelcast/HazelcastErrorMessagesTest.java | 2 +-
...azelcastRingbufferProducerForSpringTest.java | 79 ++++++++++++++
.../HazelcastRingbufferProducerTest.java | 106 +++++++++++++++++++
.../spring/test-camel-context-ringbuffer.xml | 67 ++++++++++++
10 files changed, 412 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/20a3b67e/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/HazelcastCommand.java
----------------------------------------------------------------------
diff --git a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/HazelcastCommand.java b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/HazelcastCommand.java
index f97d017..1b7bab2 100644
--- a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/HazelcastCommand.java
+++ b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/HazelcastCommand.java
@@ -18,6 +18,6 @@ package org.apache.camel.component.hazelcast;
public enum HazelcastCommand {
- map, multimap, queue, topic, seda, set, atomicvalue, instance, list, replicatedmap
+ map, multimap, queue, topic, seda, set, atomicvalue, instance, list, replicatedmap, ringbuffer
}
http://git-wip-us.apache.org/repos/asf/camel/blob/20a3b67e/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/HazelcastComponent.java
----------------------------------------------------------------------
diff --git a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/HazelcastComponent.java b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/HazelcastComponent.java
index 94a09aa..a0a4308 100644
--- a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/HazelcastComponent.java
+++ b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/HazelcastComponent.java
@@ -32,6 +32,7 @@ import org.apache.camel.component.hazelcast.map.HazelcastMapEndpoint;
import org.apache.camel.component.hazelcast.multimap.HazelcastMultimapEndpoint;
import org.apache.camel.component.hazelcast.queue.HazelcastQueueEndpoint;
import org.apache.camel.component.hazelcast.replicatedmap.HazelcastReplicatedmapEndpoint;
+import org.apache.camel.component.hazelcast.ringbuffer.HazelcastRingbufferEndpoint;
import org.apache.camel.component.hazelcast.seda.HazelcastSedaConfiguration;
import org.apache.camel.component.hazelcast.seda.HazelcastSedaEndpoint;
import org.apache.camel.component.hazelcast.set.HazelcastSetEndpoint;
@@ -147,10 +148,19 @@ public class HazelcastComponent extends UriEndpointComponent {
endpoint.setCommand(HazelcastCommand.set);
}
+
+ if (remaining.startsWith(HazelcastConstants.RINGBUFFER_PREFIX)) {
+ // remaining is anything (name it foo ;)
+ remaining = removeStartingCharacters(remaining.substring(HazelcastConstants.RINGBUFFER_PREFIX.length()), '/');
+ endpoint = new HazelcastRingbufferEndpoint(hzInstance, uri, this, remaining);
+ endpoint.setCommand(HazelcastCommand.ringbuffer);
+ }
+
if (endpoint == null) {
- throw new IllegalArgumentException(String.format("Your URI does not provide a correct 'type' prefix. It should be anything like 'hazelcast:[%s|%s|%s|%s|%s|%s|%s|%s|%s]name' but is '%s'.",
+ throw new IllegalArgumentException(String.format("Your URI does not provide a correct 'type' prefix. It should be anything like "
+ + "'hazelcast:[%s|%s|%s|%s|%s|%s|%s|%s|%s|%s]name' but is '%s'.",
HazelcastConstants.MAP_PREFIX, HazelcastConstants.MULTIMAP_PREFIX, HazelcastConstants.ATOMICNUMBER_PREFIX, HazelcastConstants.INSTANCE_PREFIX, HazelcastConstants.QUEUE_PREFIX,
- HazelcastConstants.SEDA_PREFIX, HazelcastConstants.LIST_PREFIX, HazelcastConstants.REPLICATEDMAP_PREFIX, HazelcastConstants.SET_PREFIX, uri));
+ HazelcastConstants.SEDA_PREFIX, HazelcastConstants.LIST_PREFIX, HazelcastConstants.REPLICATEDMAP_PREFIX, HazelcastConstants.SET_PREFIX, HazelcastConstants.RINGBUFFER_PREFIX, uri));
}
if (defaultOperation != -1) {
http://git-wip-us.apache.org/repos/asf/camel/blob/20a3b67e/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/HazelcastComponentHelper.java
----------------------------------------------------------------------
diff --git a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/HazelcastComponentHelper.java b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/HazelcastComponentHelper.java
index 114fac5..a2d63e9 100644
--- a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/HazelcastComponentHelper.java
+++ b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/HazelcastComponentHelper.java
@@ -125,6 +125,11 @@ public final class HazelcastComponentHelper {
// topic
addMapping("publish", HazelcastConstants.PUBLISH_OPERATION);
+
+ // ringbuffer
+ addMapping("capacity", HazelcastConstants.GET_CAPACITY_OPERATION);
+ addMapping("readonceHead", HazelcastConstants.READ_ONCE_HEAD_OPERATION);
+ addMapping("readonceTail", HazelcastConstants.READ_ONCE_TAIL_OPERATION);
}
private void addMapping(String operationName, int operationNumber) {
http://git-wip-us.apache.org/repos/asf/camel/blob/20a3b67e/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/HazelcastConstants.java
----------------------------------------------------------------------
diff --git a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/HazelcastConstants.java b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/HazelcastConstants.java
index edc1090..e4e8405 100644
--- a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/HazelcastConstants.java
+++ b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/HazelcastConstants.java
@@ -31,6 +31,7 @@ public final class HazelcastConstants {
public static final String SEDA_PREFIX = "seda:";
public static final String LIST_PREFIX = "list:";
public static final String SET_PREFIX = "set:";
+ public static final String RINGBUFFER_PREFIX = "ringbuffer:";
/*
* incoming header properties
@@ -95,6 +96,11 @@ public final class HazelcastConstants {
// topic
public static final int PUBLISH_OPERATION = 37;
+
+ // ring_buffer
+ public static final int READ_ONCE_HEAD_OPERATION = 38;
+ public static final int READ_ONCE_TAIL_OPERATION = 39;
+ public static final int GET_CAPACITY_OPERATION = 40;
/*
* header values
http://git-wip-us.apache.org/repos/asf/camel/blob/20a3b67e/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/ringbuffer/HazelcastRingbufferEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/ringbuffer/HazelcastRingbufferEndpoint.java b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/ringbuffer/HazelcastRingbufferEndpoint.java
new file mode 100644
index 0000000..6b0df4a
--- /dev/null
+++ b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/ringbuffer/HazelcastRingbufferEndpoint.java
@@ -0,0 +1,40 @@
+/**
+ * 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.hazelcast.ringbuffer;
+
+import com.hazelcast.core.HazelcastInstance;
+import org.apache.camel.Component;
+import org.apache.camel.Consumer;
+import org.apache.camel.Processor;
+import org.apache.camel.Producer;
+import org.apache.camel.component.hazelcast.HazelcastDefaultEndpoint;
+
+public class HazelcastRingbufferEndpoint extends HazelcastDefaultEndpoint {
+
+ public HazelcastRingbufferEndpoint(HazelcastInstance hazelcastInstance, String uri, Component component, final String cacheName) {
+ super(hazelcastInstance, uri, component, cacheName);
+ }
+
+ public Consumer createConsumer(Processor processor) throws Exception {
+ throw new UnsupportedOperationException("You cannot send messages to this endpoint: " + getEndpointUri());
+ }
+
+ public Producer createProducer() throws Exception {
+ return new HazelcastRingbufferProducer(hazelcastInstance, this, cacheName);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/20a3b67e/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/ringbuffer/HazelcastRingbufferProducer.java
----------------------------------------------------------------------
diff --git a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/ringbuffer/HazelcastRingbufferProducer.java b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/ringbuffer/HazelcastRingbufferProducer.java
new file mode 100644
index 0000000..a1c35a5
--- /dev/null
+++ b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/ringbuffer/HazelcastRingbufferProducer.java
@@ -0,0 +1,95 @@
+/**
+ * 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.hazelcast.ringbuffer;
+
+import java.util.Map;
+
+import com.hazelcast.core.HazelcastInstance;
+import com.hazelcast.ringbuffer.Ringbuffer;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.component.hazelcast.HazelcastComponentHelper;
+import org.apache.camel.component.hazelcast.HazelcastConstants;
+import org.apache.camel.component.hazelcast.HazelcastDefaultEndpoint;
+import org.apache.camel.component.hazelcast.HazelcastDefaultProducer;
+
+public class HazelcastRingbufferProducer extends HazelcastDefaultProducer {
+
+ private final Ringbuffer<Object> ringbuffer;
+
+ public HazelcastRingbufferProducer(HazelcastInstance hazelcastInstance, HazelcastDefaultEndpoint endpoint, String cacheName) {
+ super(endpoint);
+ this.ringbuffer = hazelcastInstance.getRingbuffer(cacheName);
+ }
+
+ public void process(Exchange exchange) throws Exception {
+
+ Map<String, Object> headers = exchange.getIn().getHeaders();
+
+ int operation = lookupOperationNumber(exchange);
+
+ switch (operation) {
+
+ case HazelcastConstants.READ_ONCE_HEAD_OPERATION:
+ this.readOnceHead(exchange);
+ break;
+
+ case HazelcastConstants.READ_ONCE_TAIL_OPERATION:
+ this.readOnceTail(exchange);
+ break;
+
+ case HazelcastConstants.GET_CAPACITY_OPERATION:
+ this.getCapacity(exchange);
+ break;
+
+ case HazelcastConstants.REMAINING_CAPACITY_OPERATION:
+ this.getRemainingCapacity(exchange);
+ break;
+
+ case HazelcastConstants.ADD_OPERATION:
+ this.add(exchange);
+ break;
+
+ default:
+ throw new IllegalArgumentException(String.format("The value '%s' is not allowed for parameter '%s' on the RINGBUFFER.", operation, HazelcastConstants.OPERATION));
+ }
+
+ // finally copy headers
+ HazelcastComponentHelper.copyHeaders(exchange);
+ }
+
+ private void readOnceHead(Exchange exchange) throws InterruptedException {
+ exchange.getOut().setBody(this.ringbuffer.readOne(ringbuffer.headSequence()));
+ }
+
+ private void readOnceTail(Exchange exchange) throws InterruptedException {
+ exchange.getOut().setBody(this.ringbuffer.readOne(ringbuffer.tailSequence()));
+ }
+
+ private void getCapacity(Exchange exchange) throws InterruptedException {
+ exchange.getOut().setBody(this.ringbuffer.capacity());
+ }
+
+ private void getRemainingCapacity(Exchange exchange) throws InterruptedException {
+ exchange.getOut().setBody(this.ringbuffer.remainingCapacity());
+ }
+
+ private void add(Exchange exchange) {
+ final Object body = exchange.getIn().getBody();
+ exchange.getOut().setBody(ringbuffer.add(body));
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/20a3b67e/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastErrorMessagesTest.java
----------------------------------------------------------------------
diff --git a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastErrorMessagesTest.java b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastErrorMessagesTest.java
index 63f454c..ec365e6 100644
--- a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastErrorMessagesTest.java
+++ b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastErrorMessagesTest.java
@@ -36,7 +36,7 @@ public class HazelcastErrorMessagesTest extends HazelcastCamelTestSupport {
} catch (Exception e) {
assertTrue(e.getMessage().contains(
"Your URI does not provide a correct 'type' prefix. It should be anything like "
- + "'hazelcast:[map:|multimap:|atomicvalue:|instance:|queue:|seda:|list:|replicatedmap:|set:]name' but is 'hazelcast://error:foo"));
+ + "'hazelcast:[map:|multimap:|atomicvalue:|instance:|queue:|seda:|list:|replicatedmap:|set:|ringbuffer:]name' but is 'hazelcast://error:foo"));
}
}
http://git-wip-us.apache.org/repos/asf/camel/blob/20a3b67e/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastRingbufferProducerForSpringTest.java
----------------------------------------------------------------------
diff --git a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastRingbufferProducerForSpringTest.java b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastRingbufferProducerForSpringTest.java
new file mode 100644
index 0000000..fbc4c8e
--- /dev/null
+++ b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastRingbufferProducerForSpringTest.java
@@ -0,0 +1,79 @@
+/**
+ * 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.hazelcast;
+
+import com.hazelcast.core.HazelcastInstance;
+import com.hazelcast.ringbuffer.Ringbuffer;
+
+import org.junit.Test;
+import org.mockito.Matchers;
+import org.mockito.Mock;
+import org.springframework.context.support.AbstractApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+import static org.mockito.Mockito.atLeastOnce;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+public class HazelcastRingbufferProducerForSpringTest extends HazelcastCamelSpringTestSupport {
+
+ @Mock
+ private Ringbuffer<Object> ringbuffer;
+
+ @Override
+ protected void trainHazelcastInstance(HazelcastInstance hazelcastInstance) {
+ when(hazelcastInstance.getRingbuffer("foo")).thenReturn(ringbuffer);
+ }
+
+ @Override
+ protected void verifyHazelcastInstance(HazelcastInstance hazelcastInstance) {
+ verify(hazelcastInstance, atLeastOnce()).getRingbuffer("foo");
+ }
+
+ @Override
+ protected AbstractApplicationContext createApplicationContext() {
+ return new ClassPathXmlApplicationContext("/META-INF/spring/test-camel-context-ringbuffer.xml");
+ }
+
+ @Test
+ public void testReadTail() throws InterruptedException {
+ when(ringbuffer.readOne(Matchers.anyLong())).thenReturn("pippo");
+ Object result = template.requestBody("direct:readonceTail", 12L, String.class);
+ assertEquals("pippo", result);
+ }
+
+ @Test
+ public void testAdd() throws InterruptedException {
+ when(ringbuffer.add(Matchers.anyLong())).thenReturn(13L);
+ Object result = template.requestBody("direct:add", 12L, Long.class);
+ assertEquals(13L, result);
+ }
+
+ @Test
+ public void testCapacity() throws InterruptedException {
+ when(ringbuffer.capacity()).thenReturn(13L);
+ Object result = template.requestBody("direct:capacity", 12L, Long.class);
+ assertEquals(13L, result);
+ }
+
+ @Test
+ public void testRemainingCapacity() throws InterruptedException {
+ when(ringbuffer.remainingCapacity()).thenReturn(2L);
+ Object result = template.requestBody("direct:remainingCapacity", "", Long.class);
+ assertEquals(2L, result);
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/20a3b67e/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastRingbufferProducerTest.java
----------------------------------------------------------------------
diff --git a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastRingbufferProducerTest.java b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastRingbufferProducerTest.java
new file mode 100644
index 0000000..2d5bb5f
--- /dev/null
+++ b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastRingbufferProducerTest.java
@@ -0,0 +1,106 @@
+/**
+ * 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.hazelcast;
+
+import com.hazelcast.core.HazelcastInstance;
+import com.hazelcast.ringbuffer.Ringbuffer;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.junit.Test;
+import org.mockito.Matchers;
+import org.mockito.Mock;
+
+import static org.mockito.Mockito.atLeastOnce;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+public class HazelcastRingbufferProducerTest extends HazelcastCamelTestSupport {
+
+ @Mock
+ private Ringbuffer<Object> ringbuffer;
+
+ @Override
+ protected void trainHazelcastInstance(HazelcastInstance hazelcastInstance) {
+ when(hazelcastInstance.getRingbuffer("foo")).thenReturn(ringbuffer);
+ }
+
+ @Override
+ protected void verifyHazelcastInstance(HazelcastInstance hazelcastInstance) {
+ verify(hazelcastInstance, atLeastOnce()).getRingbuffer("foo");
+ }
+
+ @Test
+ public void testReadHead() throws InterruptedException {
+ when(ringbuffer.readOne(Matchers.anyLong())).thenReturn("pippo");
+ Object result = template.requestBody("direct:readonceHead", 12L, String.class);
+ assertEquals("pippo", result);
+ }
+
+ @Test
+ public void testReadTail() throws InterruptedException {
+ when(ringbuffer.readOne(Matchers.anyLong())).thenReturn("pippo");
+ Object result = template.requestBody("direct:readonceTail", 12L, String.class);
+ assertEquals("pippo", result);
+ }
+
+ @Test
+ public void testAdd() throws InterruptedException {
+ when(ringbuffer.add(Matchers.anyLong())).thenReturn(13L);
+ Object result = template.requestBody("direct:add", 12L, Long.class);
+ assertEquals(13L, result);
+ }
+
+ @Test
+ public void testCapacity() throws InterruptedException {
+ when(ringbuffer.capacity()).thenReturn(13L);
+ Object result = template.requestBody("direct:capacity", 12L, Long.class);
+ assertEquals(13L, result);
+ }
+
+ @Test
+ public void testRemainingCapacity() throws InterruptedException {
+ when(ringbuffer.remainingCapacity()).thenReturn(2L);
+ Object result = template.requestBody("direct:remainingCapacity", "", Long.class);
+ assertEquals(2L, result);
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+
+ from("direct:readonceHead").setHeader(HazelcastConstants.OPERATION, constant(HazelcastConstants.READ_ONCE_HEAD_OPERATION)).to(
+ String.format("hazelcast:%sfoo", HazelcastConstants.RINGBUFFER_PREFIX));
+
+ from("direct:readonceTail").setHeader(HazelcastConstants.OPERATION, constant(HazelcastConstants.READ_ONCE_TAIL_OPERATION)).to(
+ String.format("hazelcast:%sfoo", HazelcastConstants.RINGBUFFER_PREFIX));
+
+ from("direct:add").setHeader(HazelcastConstants.OPERATION, constant(HazelcastConstants.ADD_OPERATION)).to(
+ String.format("hazelcast:%sfoo", HazelcastConstants.RINGBUFFER_PREFIX));
+
+ from("direct:capacity").setHeader(HazelcastConstants.OPERATION, constant(HazelcastConstants.GET_CAPACITY_OPERATION)).to(
+ String.format("hazelcast:%sfoo", HazelcastConstants.RINGBUFFER_PREFIX));
+
+ from("direct:remainingCapacity").setHeader(HazelcastConstants.OPERATION, constant(HazelcastConstants.REMAINING_CAPACITY_OPERATION)).to(
+ String.format("hazelcast:%sfoo", HazelcastConstants.RINGBUFFER_PREFIX));
+
+ }
+ };
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/20a3b67e/components/camel-hazelcast/src/test/resources/META-INF/spring/test-camel-context-ringbuffer.xml
----------------------------------------------------------------------
diff --git a/components/camel-hazelcast/src/test/resources/META-INF/spring/test-camel-context-ringbuffer.xml b/components/camel-hazelcast/src/test/resources/META-INF/spring/test-camel-context-ringbuffer.xml
new file mode 100644
index 0000000..982d9bf
--- /dev/null
+++ b/components/camel-hazelcast/src/test/resources/META-INF/spring/test-camel-context-ringbuffer.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:camel="http://camel.apache.org/schema/spring"
+ xsi:schemaLocation="
+ http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+ http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
+
+ <camelContext xmlns="http://camel.apache.org/schema/spring">
+
+ <route>
+ <from uri="direct:add" />
+ <setHeader headerName="CamelHazelcastOperationType">
+ <constant>add</constant>
+ </setHeader>
+ <to uri="hazelcast:ringbuffer:foo" />
+ </route>
+
+ <route>
+ <from uri="direct:readonceHead" />
+ <setHeader headerName="CamelHazelcastOperationType">
+ <constant>readonceHead</constant>
+ </setHeader>
+ <to uri="hazelcast:ringbuffer:foo" />
+ </route>
+
+ <route>
+ <from uri="direct:readonceTail" />
+ <setHeader headerName="CamelHazelcastOperationType">
+ <constant>readonceTail</constant>
+ </setHeader>
+ <to uri="hazelcast:ringbuffer:foo" />
+ </route>
+
+ <route>
+ <from uri="direct:capacity" />
+ <setHeader headerName="CamelHazelcastOperationType">
+ <constant>capacity</constant>
+ </setHeader>
+ <to uri="hazelcast:ringbuffer:foo" />
+ </route>
+
+ <route>
+ <from uri="direct:remainingCapacity" />
+ <setHeader headerName="CamelHazelcastOperationType">
+ <constant>remainingCapacity</constant>
+ </setHeader>
+ <to uri="hazelcast:ringbuffer:foo" />
+ </route>
+ </camelContext>
+
+</beans>