This is an automated email from the ASF dual-hosted git repository. ppalaga pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
The following commit(s) were added to refs/heads/master by this push: new beba017 Add more integration tests for camel-hazelcast extension #2094 beba017 is described below commit beba017629240b76c63aad5a4328793eac40d886 Author: Zineb Bendhiba <bendhiba.zi...@gmail.com> AuthorDate: Wed Dec 23 17:38:46 2020 +0100 Add more integration tests for camel-hazelcast extension #2094 --- integration-tests/hazelcast/pom.xml | 23 +++- .../it/AbstractHazelcastCollectionResource.java | 27 ++-- .../hazelcast/it/AbstractHazelcastMapResource.java | 9 +- .../hazelcast/it/HazelcastAtomicResource.java | 9 +- ...ource.java => HazelcastIdempotentResource.java} | 24 ++-- ...esource.java => HazelcastInstanceResource.java} | 43 +++---- .../hazelcast/it/HazelcastMapResource.java | 6 +- ...cResource.java => HazelcastPolicyResource.java} | 27 ++-- .../hazelcast/it/HazelcastQueueResource.java | 140 +++++++++++++++++++++ ...ource.java => HazelcastRingbufferResource.java} | 56 +++++---- .../component/hazelcast/it/HazelcastRoutes.java | 107 +++++++++++++++- .../hazelcast/it/HazelcastSedaResource.java | 112 +++++++++++++++++ .../hazelcast/it/HazelcastTopicResource.java | 7 +- .../src/main/resources/application.properties | 17 +++ .../hazelcast/src/main/resources/hazelcast.xml | 34 +++++ .../hazelcast/it/HazelcastAtomicTest.java | 3 +- .../hazelcast/it/HazelcastIdempotentIT.java | 23 ++++ ...edmapTest.java => HazelcastIdempotentTest.java} | 87 ++++--------- .../hazelcast/it/HazelcastInstanceIT.java | 23 ++++ ...stTopicTest.java => HazelcastInstanceTest.java} | 30 ++--- .../component/hazelcast/it/HazelcastListTest.java | 3 +- .../component/hazelcast/it/HazelcastMapTest.java | 3 +- .../hazelcast/it/HazelcastMultimapTest.java | 3 +- .../component/hazelcast/it/HazelcastPolicyIT.java | 23 ++++ ...castTopicTest.java => HazelcastPolicyTest.java} | 38 ++++-- .../component/hazelcast/it/HazelcastQueueIT.java | 23 ++++ ...elcastListTest.java => HazelcastQueueTest.java} | 109 ++++++++-------- .../hazelcast/it/HazelcastReplicatedmapIT.java | 23 ++++ .../hazelcast/it/HazelcastReplicatedmapTest.java | 3 +- .../hazelcast/it/HazelcastRingbufferIT.java | 23 ++++ ...tomicTest.java => HazelcastRingbufferTest.java} | 58 ++++++--- .../component/hazelcast/it/HazelcastSedaIT.java | 23 ++++ ...azelcastSetTest.java => HazelcastSedaTest.java} | 89 ++++++------- .../component/hazelcast/it/HazelcastSetTest.java | 3 +- .../hazelcast/it/HazelcastTestResource.java | 53 ++++++++ .../component/hazelcast/it/HazelcastTopicTest.java | 3 +- poms/bom-test/pom.xml | 6 - 37 files changed, 936 insertions(+), 357 deletions(-) diff --git a/integration-tests/hazelcast/pom.xml b/integration-tests/hazelcast/pom.xml index dae841b..724f906 100644 --- a/integration-tests/hazelcast/pom.xml +++ b/integration-tests/hazelcast/pom.xml @@ -26,8 +26,8 @@ </parent> <artifactId>camel-quarkus-integration-test-hazelcast</artifactId> - <name>Camel Quarkus :: Integration Tests :: Hazelcast Atomic Number</name> - <description>Integration tests for Camel Quarkus Hazelcast Atomic Number extension</description> + <name>Camel Quarkus :: Integration Tests :: Hazelcast</name> + <description>Integration tests for Camel Quarkus Hazelcast extension</description> <dependencyManagement> <dependencies> @@ -54,6 +54,10 @@ <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-log</artifactId> </dependency> + <dependency> + <groupId>org.apache.camel.quarkus</groupId> + <artifactId>camel-quarkus-direct</artifactId> + </dependency> <dependency> <groupId>io.quarkus</groupId> @@ -75,9 +79,20 @@ <artifactId>rest-assured</artifactId> <scope>test</scope> </dependency> + + <!-- The following dependencies guarantee that this module is built after them. You can update them by running `mvn process-resources -Pformat -N` from the source tree root directory --> <dependency> - <groupId>com.hazelcast</groupId> - <artifactId>quarkus-test-hazelcast</artifactId> + <groupId>org.apache.camel.quarkus</groupId> + <artifactId>camel-quarkus-direct-deployment</artifactId> + <version>${project.version}</version> + <type>pom</type> + <scope>test</scope> + <exclusions> + <exclusion> + <groupId>*</groupId> + <artifactId>*</artifactId> + </exclusion> + </exclusions> </dependency> <!-- The following dependencies guarantee that this module is built after them. You can update them by running `mvn process-resources -Pformat -N` from the source tree root directory --> diff --git a/integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/AbstractHazelcastCollectionResource.java b/integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/AbstractHazelcastCollectionResource.java index 21e4492..a876c47 100644 --- a/integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/AbstractHazelcastCollectionResource.java +++ b/integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/AbstractHazelcastCollectionResource.java @@ -16,10 +16,7 @@ */ package org.apache.camel.quarkus.component.hazelcast.it; -import java.util.Collection; -import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.stream.Collectors; import javax.inject.Inject; @@ -68,7 +65,7 @@ public abstract class AbstractHazelcastCollectionResource { @PUT @Path("all") - public Response addAll(Collection values) { + public Response addAll(List<String> values) { producerTemplate.sendBodyAndHeader(endpointUri, values, HazelcastConstants.OPERATION, HazelcastOperation.ADD_ALL); return Response.accepted().build(); } @@ -76,24 +73,20 @@ public abstract class AbstractHazelcastCollectionResource { @DELETE @Path("value") public Response delete(String value) { - Map<String, Object> headers = new HashMap<>(); - headers.put(HazelcastConstants.OPERATION, HazelcastOperation.REMOVE_VALUE); - producerTemplate.sendBodyAndHeaders(endpointUri, value, headers); + producerTemplate.sendBodyAndHeader(endpointUri, value, HazelcastConstants.OPERATION, HazelcastOperation.REMOVE_VALUE); return Response.accepted().build(); } @DELETE @Path("all") - public Response delete(Collection values) { - Map<String, Object> headers = new HashMap<>(); - headers.put(HazelcastConstants.OPERATION, HazelcastOperation.REMOVE_ALL); - producerTemplate.sendBodyAndHeaders(endpointUri, values, headers); + public Response delete(List<String> values) { + producerTemplate.sendBodyAndHeader(endpointUri, values, HazelcastConstants.OPERATION, HazelcastOperation.REMOVE_ALL); return Response.accepted().build(); } @POST @Path("retain") - public Response retainAll(Collection values) { + public Response retainAll(List<String> values) { producerTemplate.sendBodyAndHeader(endpointUri, values, HazelcastConstants.OPERATION, HazelcastOperation.RETAIN_ALL); return Response.accepted().build(); } @@ -110,15 +103,11 @@ public abstract class AbstractHazelcastCollectionResource { return getValues(mockDeletedEndpoint); } - private List<String> getValues(String endpointName) { + public List<String> getValues(String endpointName) { LOG.infof("getting response from mock endpoint %s", endpointName); MockEndpoint mockEndpoint = context.getEndpoint(endpointName, MockEndpoint.class); - List<String> values = mockEndpoint.getReceivedExchanges().stream().map( - exchange -> { - ItemEvent itemEvent = exchange.getIn().getBody(ItemEvent.class); - return (String) itemEvent.getItem(); - }) + return mockEndpoint.getReceivedExchanges().stream().map( + exchange -> (String) exchange.getIn().getBody(ItemEvent.class).getItem()) .collect(Collectors.toList()); - return values; } } diff --git a/integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/AbstractHazelcastMapResource.java b/integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/AbstractHazelcastMapResource.java index e3b8ad0..7a13ebe 100644 --- a/integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/AbstractHazelcastMapResource.java +++ b/integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/AbstractHazelcastMapResource.java @@ -120,22 +120,21 @@ public abstract class AbstractHazelcastMapResource { @GET @Path("added") - public List getAddedValues() { + public List<String> getAddedValues() { return getValues(mockAddedEndpoint); } @GET @Path("deleted") - public List getDeletedValues() { + public List<String> getDeletedValues() { return getValues(mockDeletedEndpoint); } - protected List getValues(String endpointName) { + protected List<String> getValues(String endpointName) { LOG.infof("getting response from mock endpoint %s", endpointName); MockEndpoint mockEndpoint = context.getEndpoint(endpointName, MockEndpoint.class); - List<String> values = mockEndpoint.getReceivedExchanges().stream().map( + return mockEndpoint.getReceivedExchanges().stream().map( exchange -> exchange.getIn().getHeader(HazelcastConstants.OBJECT_ID, String.class)) .collect(Collectors.toList()); - return values; } } diff --git a/integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastAtomicResource.java b/integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastAtomicResource.java index 6c57f3c..ace6bae 100644 --- a/integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastAtomicResource.java +++ b/integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastAtomicResource.java @@ -51,30 +51,27 @@ public class HazelcastAtomicResource { @GET() public Long get() { LOG.infof("getting one atomic value"); - Long value = producerTemplate.requestBodyAndHeader( + return producerTemplate.requestBodyAndHeader( "hazelcast-atomicvalue:foo-atomic", null, HazelcastConstants.OPERATION, HazelcastOperation.GET, Long.class); - return value; } @GET @Path("increment") public Long incrementAndGet() { LOG.infof("increment and get new value"); - Long value = producerTemplate.requestBodyAndHeader( + return producerTemplate.requestBodyAndHeader( "hazelcast-atomicvalue:foo-atomic", null, HazelcastConstants.OPERATION, HazelcastOperation.INCREMENT, Long.class); - return value; } @GET @Path("decrement") public Long decrementAndGet() { LOG.infof("decrement and get new value"); - Long value = producerTemplate.requestBodyAndHeader( + return producerTemplate.requestBodyAndHeader( "hazelcast-atomicvalue:foo-atomic", null, HazelcastConstants.OPERATION, HazelcastOperation.DECREMENT, Long.class); - return value; } @DELETE diff --git a/integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastTopicResource.java b/integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastIdempotentResource.java similarity index 67% copy from integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastTopicResource.java copy to integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastIdempotentResource.java index 3ce0671..eb54501 100644 --- a/integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastTopicResource.java +++ b/integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastIdempotentResource.java @@ -29,20 +29,18 @@ import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; -import com.hazelcast.topic.impl.DataAwareMessage; import org.apache.camel.CamelContext; import org.apache.camel.ProducerTemplate; -import org.apache.camel.component.hazelcast.HazelcastConstants; -import org.apache.camel.component.hazelcast.HazelcastOperation; import org.apache.camel.component.mock.MockEndpoint; +import org.apache.camel.quarkus.component.hazelcast.it.model.HazelcastMapRequest; -import static org.apache.camel.quarkus.component.hazelcast.it.HazelcastRoutes.MOCK_TOPIC_RECEIVED; +import static org.apache.camel.quarkus.component.hazelcast.it.HazelcastRoutes.MOCK_IDEMPOTENT_ADDED; -@Path("/hazelcast/topic") +@Path("/hazelcast/instance") @ApplicationScoped @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) -public class HazelcastTopicResource { +public class HazelcastIdempotentResource { @Inject ProducerTemplate producerTemplate; @@ -51,18 +49,16 @@ public class HazelcastTopicResource { CamelContext context; @POST - public Response publish(String message) { - producerTemplate.sendBodyAndHeader("hazelcast-topic:foo-topic", message, HazelcastConstants.OPERATION, - HazelcastOperation.PUBLISH); + public Response add(HazelcastMapRequest request) { + producerTemplate.sendBodyAndHeader("direct:in-idempotent", request.getValue(), "messageId", request.getId()); return Response.accepted().build(); } @GET - public List getValues() { - MockEndpoint mockEndpoint = context.getEndpoint(MOCK_TOPIC_RECEIVED, MockEndpoint.class); - List<Object> values = mockEndpoint.getReceivedExchanges().stream().map( - exchange -> exchange.getMessage().getBody(DataAwareMessage.class).getMessageObject()) + public List get() { + MockEndpoint mockEndpoint = context.getEndpoint(MOCK_IDEMPOTENT_ADDED, MockEndpoint.class); + return mockEndpoint.getReceivedExchanges().stream().map( + exchange -> exchange.getIn().getBody(String.class)) .collect(Collectors.toList()); - return values; } } diff --git a/integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastTopicResource.java b/integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastInstanceResource.java similarity index 55% copy from integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastTopicResource.java copy to integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastInstanceResource.java index 3ce0671..158ee95 100644 --- a/integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastTopicResource.java +++ b/integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastInstanceResource.java @@ -16,53 +16,44 @@ */ package org.apache.camel.quarkus.component.hazelcast.it; -import java.util.List; -import java.util.stream.Collectors; - import javax.enterprise.context.ApplicationScoped; import javax.inject.Inject; import javax.ws.rs.Consumes; import javax.ws.rs.GET; -import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import com.hazelcast.topic.impl.DataAwareMessage; import org.apache.camel.CamelContext; -import org.apache.camel.ProducerTemplate; -import org.apache.camel.component.hazelcast.HazelcastConstants; -import org.apache.camel.component.hazelcast.HazelcastOperation; import org.apache.camel.component.mock.MockEndpoint; -import static org.apache.camel.quarkus.component.hazelcast.it.HazelcastRoutes.MOCK_TOPIC_RECEIVED; +import static org.apache.camel.quarkus.component.hazelcast.it.HazelcastRoutes.MOCK_INSTANCE_ADDED; +import static org.apache.camel.quarkus.component.hazelcast.it.HazelcastRoutes.MOCK_INSTANCE_REMOVED; -@Path("/hazelcast/topic") +@Path("/hazelcast/instance") @ApplicationScoped @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) -public class HazelcastTopicResource { - - @Inject - ProducerTemplate producerTemplate; +public class HazelcastInstanceResource { @Inject CamelContext context; - @POST - public Response publish(String message) { - producerTemplate.sendBodyAndHeader("hazelcast-topic:foo-topic", message, HazelcastConstants.OPERATION, - HazelcastOperation.PUBLISH); - return Response.accepted().build(); + @GET + @Path("added") + public Integer added() { + return getValues(MOCK_INSTANCE_ADDED); } @GET - public List getValues() { - MockEndpoint mockEndpoint = context.getEndpoint(MOCK_TOPIC_RECEIVED, MockEndpoint.class); - List<Object> values = mockEndpoint.getReceivedExchanges().stream().map( - exchange -> exchange.getMessage().getBody(DataAwareMessage.class).getMessageObject()) - .collect(Collectors.toList()); - return values; + @Path("deleted") + public Integer deleted() { + return getValues(MOCK_INSTANCE_REMOVED); } + + public Integer getValues(String endpointName) { + MockEndpoint mockEndpoint = context.getEndpoint(endpointName, MockEndpoint.class); + return mockEndpoint.getReceivedExchanges().size(); + } + } diff --git a/integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastMapResource.java b/integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastMapResource.java index 454c4a9..bf27731 100644 --- a/integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastMapResource.java +++ b/integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastMapResource.java @@ -59,7 +59,7 @@ public class HazelcastMapResource extends AbstractHazelcastMapResource { @POST @Path("get") - public Map getAll(Set oids) { + public Map getAll(Set<String> oids) { Map<String, Object> headers = new HashMap<>(); headers.put(HazelcastConstants.OPERATION, HazelcastOperation.GET_ALL); headers.put(HazelcastConstants.OBJECT_ID, oids); @@ -68,7 +68,7 @@ public class HazelcastMapResource extends AbstractHazelcastMapResource { @GET @Path("updated") - public List getUpdatedValues() { + public List<String> getUpdatedValues() { return getValues(mockUpdatedEndpoint); } @@ -93,7 +93,7 @@ public class HazelcastMapResource extends AbstractHazelcastMapResource { @GET @Path("evicted") - public List getEvictedValues() { + public List<String> getEvictedValues() { return getValues(mockEvictedEndpoint); } diff --git a/integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastTopicResource.java b/integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastPolicyResource.java similarity index 67% copy from integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastTopicResource.java copy to integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastPolicyResource.java index 3ce0671..6658725 100644 --- a/integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastTopicResource.java +++ b/integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastPolicyResource.java @@ -29,40 +29,35 @@ import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; -import com.hazelcast.topic.impl.DataAwareMessage; import org.apache.camel.CamelContext; import org.apache.camel.ProducerTemplate; -import org.apache.camel.component.hazelcast.HazelcastConstants; -import org.apache.camel.component.hazelcast.HazelcastOperation; import org.apache.camel.component.mock.MockEndpoint; -import static org.apache.camel.quarkus.component.hazelcast.it.HazelcastRoutes.MOCK_TOPIC_RECEIVED; +import static org.apache.camel.quarkus.component.hazelcast.it.HazelcastRoutes.MOCK_POLICY; -@Path("/hazelcast/topic") +@Path("/hazelcast/policy") @ApplicationScoped @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) -public class HazelcastTopicResource { +public class HazelcastPolicyResource { @Inject - ProducerTemplate producerTemplate; + CamelContext context; @Inject - CamelContext context; + ProducerTemplate producerTemplate; @POST - public Response publish(String message) { - producerTemplate.sendBodyAndHeader("hazelcast-topic:foo-topic", message, HazelcastConstants.OPERATION, - HazelcastOperation.PUBLISH); + public Response post(String message) { + producerTemplate.sendBody("direct:in-policy", message); return Response.accepted().build(); } @GET - public List getValues() { - MockEndpoint mockEndpoint = context.getEndpoint(MOCK_TOPIC_RECEIVED, MockEndpoint.class); - List<Object> values = mockEndpoint.getReceivedExchanges().stream().map( - exchange -> exchange.getMessage().getBody(DataAwareMessage.class).getMessageObject()) + public List<String> get() { + MockEndpoint mockEndpoint = context.getEndpoint(MOCK_POLICY, MockEndpoint.class); + return mockEndpoint.getReceivedExchanges().stream().map( + exchange -> exchange.getIn().getBody(String.class)) .collect(Collectors.toList()); - return values; } } diff --git a/integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastQueueResource.java b/integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastQueueResource.java new file mode 100644 index 0000000..e0bfec5 --- /dev/null +++ b/integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastQueueResource.java @@ -0,0 +1,140 @@ +/* + * 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.quarkus.component.hazelcast.it; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import javax.enterprise.context.ApplicationScoped; +import javax.enterprise.event.Observes; +import javax.inject.Inject; +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; + +import com.hazelcast.collection.IQueue; +import com.hazelcast.core.HazelcastInstance; +import io.quarkus.runtime.StartupEvent; +import org.apache.camel.component.hazelcast.HazelcastConstants; +import org.apache.camel.component.hazelcast.HazelcastOperation; +import org.apache.camel.component.mock.MockEndpoint; + +import static org.apache.camel.quarkus.component.hazelcast.it.HazelcastRoutes.MOCK_QUEUE_ADDED; +import static org.apache.camel.quarkus.component.hazelcast.it.HazelcastRoutes.MOCK_QUEUE_DELETED; +import static org.apache.camel.quarkus.component.hazelcast.it.HazelcastRoutes.MOCK_QUEUE_POLL; + +@Path("/hazelcast/queue") +@ApplicationScoped +@Produces(MediaType.APPLICATION_JSON) +@Consumes(MediaType.APPLICATION_JSON) +public class HazelcastQueueResource extends AbstractHazelcastCollectionResource { + + @Inject + HazelcastInstance hazelcastInstance; + + @Override + public void init(@Observes StartupEvent startupEvent) { + endpointUri = "hazelcast-queue:foo-queue"; + mockAddedEndpoint = MOCK_QUEUE_ADDED; + mockDeletedEndpoint = MOCK_QUEUE_DELETED; + } + + @PUT + @Path("put") + public Response addBlocking(String value) { + producerTemplate.sendBodyAndHeader(endpointUri, value, HazelcastConstants.OPERATION, HazelcastOperation.PUT); + return Response.accepted().build(); + } + + @PUT + @Path("offer") + public Response offer(String value) { + producerTemplate.sendBodyAndHeader(endpointUri, value, HazelcastConstants.OPERATION, HazelcastOperation.OFFER); + return Response.accepted().build(); + } + + @DELETE + @Path("poll") + public String poll() { + return producerTemplate.requestBodyAndHeader(endpointUri, null, HazelcastConstants.OPERATION, HazelcastOperation.POLL, + String.class); + } + + @GET + @Path("peek") + public String peek() { + return producerTemplate.requestBodyAndHeader(endpointUri, null, HazelcastConstants.OPERATION, HazelcastOperation.PEEK, + String.class); + } + + @DELETE + @Path("take") + public String take() { + return producerTemplate.requestBodyAndHeader(endpointUri, null, HazelcastConstants.OPERATION, HazelcastOperation.TAKE, + String.class); + } + + @GET + @Path("remainingCapacity") + public Integer remainingCapacity() { + return producerTemplate.requestBodyAndHeader(endpointUri, null, HazelcastConstants.OPERATION, + HazelcastOperation.REMAINING_CAPACITY, Integer.class); + } + + @DELETE + @Path("drain") + public List<String> drainTo() { + List<String> result = new ArrayList(); + Map<String, Object> headers = new HashMap<>(); + headers.put(HazelcastConstants.OPERATION, HazelcastOperation.DRAIN_TO); + headers.put(HazelcastConstants.DRAIN_TO_COLLECTION, result); + producerTemplate.sendBodyAndHeaders(endpointUri, "", headers); + return result; + } + + /** + * add list of values to queue with poll consumer + * + * @param values + * @return + */ + @PUT + @Path("poll/list") + public Response addListToPollConsumer(List<String> values) { + IQueue<String> queue = hazelcastInstance.getQueue("foo-queue-poll"); + queue.addAll(values); + return Response.accepted().build(); + } + + @GET + @Path("polled") + public List<String> getPolledValues() { + MockEndpoint mockEndpoint = context.getEndpoint(MOCK_QUEUE_POLL, MockEndpoint.class); + return mockEndpoint.getReceivedExchanges().stream().map( + exchange -> exchange.getIn().getBody(String.class)) + .collect(Collectors.toList()); + } + +} diff --git a/integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastTopicResource.java b/integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastRingbufferResource.java similarity index 53% copy from integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastTopicResource.java copy to integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastRingbufferResource.java index 3ce0671..a106abc 100644 --- a/integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastTopicResource.java +++ b/integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastRingbufferResource.java @@ -16,53 +16,61 @@ */ package org.apache.camel.quarkus.component.hazelcast.it; -import java.util.List; -import java.util.stream.Collectors; - import javax.enterprise.context.ApplicationScoped; import javax.inject.Inject; import javax.ws.rs.Consumes; import javax.ws.rs.GET; -import javax.ws.rs.POST; +import javax.ws.rs.PUT; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; -import com.hazelcast.topic.impl.DataAwareMessage; -import org.apache.camel.CamelContext; import org.apache.camel.ProducerTemplate; import org.apache.camel.component.hazelcast.HazelcastConstants; import org.apache.camel.component.hazelcast.HazelcastOperation; -import org.apache.camel.component.mock.MockEndpoint; - -import static org.apache.camel.quarkus.component.hazelcast.it.HazelcastRoutes.MOCK_TOPIC_RECEIVED; -@Path("/hazelcast/topic") +@Path("/hazelcast/ringbuffer") @ApplicationScoped @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) -public class HazelcastTopicResource { +public class HazelcastRingbufferResource { + private static final String ENDPOINT_URI = "hazelcast-ringbuffer:foo-ringbuffer"; @Inject ProducerTemplate producerTemplate; - @Inject - CamelContext context; - - @POST - public Response publish(String message) { - producerTemplate.sendBodyAndHeader("hazelcast-topic:foo-topic", message, HazelcastConstants.OPERATION, - HazelcastOperation.PUBLISH); + @PUT + public Response add(String value) { + producerTemplate.sendBodyAndHeader(ENDPOINT_URI, value, HazelcastConstants.OPERATION, HazelcastOperation.ADD); return Response.accepted().build(); } @GET - public List getValues() { - MockEndpoint mockEndpoint = context.getEndpoint(MOCK_TOPIC_RECEIVED, MockEndpoint.class); - List<Object> values = mockEndpoint.getReceivedExchanges().stream().map( - exchange -> exchange.getMessage().getBody(DataAwareMessage.class).getMessageObject()) - .collect(Collectors.toList()); - return values; + @Path("capacity") + public Long getCapacity() { + return producerTemplate.requestBodyAndHeader(ENDPOINT_URI, null, HazelcastConstants.OPERATION, + HazelcastOperation.CAPACITY, Long.class); + } + + @GET + @Path("capacity/remaining") + public Long getRemainingCapacity() { + return producerTemplate.requestBodyAndHeader(ENDPOINT_URI, null, HazelcastConstants.OPERATION, + HazelcastOperation.REMAINING_CAPACITY, Long.class); + } + + @GET + @Path("tail") + public String getTail() { + return producerTemplate.requestBodyAndHeader(ENDPOINT_URI, null, HazelcastConstants.OPERATION, + HazelcastOperation.READ_ONCE_TAIL, String.class); + } + + @GET + @Path("head") + public String getHead() { + return producerTemplate.requestBodyAndHeader(ENDPOINT_URI, null, HazelcastConstants.OPERATION, + HazelcastOperation.READ_ONCE_HEAD, String.class); } } diff --git a/integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastRoutes.java b/integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastRoutes.java index ef9e212..e81784c 100644 --- a/integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastRoutes.java +++ b/integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastRoutes.java @@ -16,6 +16,8 @@ */ package org.apache.camel.quarkus.component.hazelcast.it; +import java.util.concurrent.TimeUnit; + import javax.enterprise.context.ApplicationScoped; import javax.inject.Inject; import javax.inject.Named; @@ -31,9 +33,15 @@ import org.apache.camel.component.hazelcast.instance.HazelcastInstanceComponent; import org.apache.camel.component.hazelcast.list.HazelcastListComponent; import org.apache.camel.component.hazelcast.map.HazelcastMapComponent; import org.apache.camel.component.hazelcast.multimap.HazelcastMultimapComponent; +import org.apache.camel.component.hazelcast.policy.HazelcastRoutePolicy; +import org.apache.camel.component.hazelcast.queue.HazelcastQueueComponent; import org.apache.camel.component.hazelcast.replicatedmap.HazelcastReplicatedmapComponent; +import org.apache.camel.component.hazelcast.ringbuffer.HazelcastRingbufferComponent; +import org.apache.camel.component.hazelcast.seda.HazelcastSedaComponent; import org.apache.camel.component.hazelcast.set.HazelcastSetComponent; import org.apache.camel.component.hazelcast.topic.HazelcastTopicComponent; +import org.apache.camel.processor.idempotent.hazelcast.HazelcastIdempotentRepository; +import org.apache.camel.spi.RoutePolicy; @ApplicationScoped public class HazelcastRoutes extends RouteBuilder { @@ -50,6 +58,17 @@ public class HazelcastRoutes extends RouteBuilder { public static final String MOCK_REPLICATED_ADDED = "mock:replicatedmap-added"; public static final String MOCK_REPLICATED_DELETED = "mock:replicatedmap-removed"; public static final String MOCK_TOPIC_RECEIVED = "mock:topic-received"; + public static final String MOCK_QUEUE_ADDED = "mock:queue-listen-added"; + public static final String MOCK_QUEUE_DELETED = "mock:queue-listen-removed"; + public static final String MOCK_QUEUE_POLL = "mock:queue-poll-result"; + public static final String MOCK_SEDA_FIFO = "mock:seda-fifo"; + public static final String MOCK_SEDA_IN_ONLY = "mock:seda-in-only"; + public static final String MOCK_SEDA_IN_OUT = "mock:seda-in-out"; + public static final String MOCK_SEDA_IN_OUT_TRANSACTED = "mock:seda-in-out-trans"; + public static final String MOCK_INSTANCE_ADDED = "mock:instance-added"; + public static final String MOCK_INSTANCE_REMOVED = "mock:instance-removed"; + public static final String MOCK_IDEMPOTENT_ADDED = "mock:idempotent-added"; + public static final String MOCK_POLICY = "mock:policy"; @Inject HazelcastInstance hazelcastInstance; @@ -126,6 +145,33 @@ public class HazelcastRoutes extends RouteBuilder { return configureHazelcastComponent(hazelcastComponent); } + @Produces + @ApplicationScoped + @Unremovable + @Named("hazelcast-queue") + HazelcastDefaultComponent hazelcastQueue() { + final HazelcastQueueComponent hazelcastComponent = new HazelcastQueueComponent(); + return configureHazelcastComponent(hazelcastComponent); + } + + @Produces + @ApplicationScoped + @Unremovable + @Named("hazelcast-ringbuffer") + HazelcastDefaultComponent hazelcastRingbuffer() { + final HazelcastRingbufferComponent hazelcastComponent = new HazelcastRingbufferComponent(); + return configureHazelcastComponent(hazelcastComponent); + } + + @Produces + @ApplicationScoped + @Unremovable + @Named("hazelcast-seda") + HazelcastDefaultComponent hazelcastSeda() { + final HazelcastSedaComponent hazelcastComponent = new HazelcastSedaComponent(); + return configureHazelcastComponent(hazelcastComponent); + } + private HazelcastDefaultComponent configureHazelcastComponent(HazelcastDefaultComponent hazelcastComponent) { // pass the hazelcast generated by the hazelcast extension hazelcastComponent.setHazelcastInstance(hazelcastInstance); @@ -135,7 +181,7 @@ public class HazelcastRoutes extends RouteBuilder { } @Override - public void configure() throws Exception { + public void configure() { // HazelcastListConsumer from("hazelcast-list:foo-list").log("object...").choice() .when(header(HazelcastConstants.LISTENER_ACTION).isEqualTo(HazelcastConstants.ADDED)) @@ -185,5 +231,64 @@ public class HazelcastRoutes extends RouteBuilder { .log("...received").to(MOCK_TOPIC_RECEIVED) .otherwise() .log("fail!"); + + // 2 different consumers of type : HazelcastQueueConsumer + // consumer mode : LISTEN + from("hazelcast-queue:foo-queue").log("object...").choice() + .when(header(HazelcastConstants.LISTENER_ACTION).isEqualTo(HazelcastConstants.ADDED)) + .log("...added").to(MOCK_QUEUE_ADDED) + .when(header(HazelcastConstants.LISTENER_ACTION).isEqualTo(HazelcastConstants.REMOVED)) + .log("...removed").to(MOCK_QUEUE_DELETED).otherwise() + .log("fail!"); + // consumer mode : poll + from("hazelcast-queue:foo-queue-poll?queueConsumerMode=Poll") + .to(MOCK_QUEUE_POLL); + + //different HazelcastSedaConsumer + // FIFO consumer + from("hazelcast-seda:foo-fifo") + .to(MOCK_SEDA_FIFO); + // IN ONLY consumer + from("hazelcast-seda:foo-in-only") + .to(MOCK_SEDA_IN_ONLY); + // IN OUT consumer + from("hazelcast-seda:foo-in-out") + .to(MOCK_SEDA_IN_OUT); + // IN OUT transacted consumer + from("hazelcast-seda:foo-in-out-trans?transacted=true") + .to(MOCK_SEDA_IN_OUT_TRANSACTED); + + // HazelcastInstanceConsumer + from("hazelcast-instance:foo-instance").log("instance...") + .choice() + .when(header(HazelcastConstants.LISTENER_ACTION).isEqualTo(HazelcastConstants.ADDED)) + .log("...added").to(MOCK_INSTANCE_ADDED) + .otherwise().log("...removed").to(MOCK_INSTANCE_REMOVED); + + // Idempotent Repository + HazelcastIdempotentRepository repo = new HazelcastIdempotentRepository(hazelcastInstance, "myRepo"); + from("direct:in-idempotent") + .idempotentConsumer(header("messageId"), repo) + .to(MOCK_IDEMPOTENT_ADDED); + + // route policy + from("direct:in-policy") + .routeId("id-value") + .routePolicy(createRoutePolicy()) + .to(MOCK_POLICY); + + } + + /** + * Creates a RoutePolicy + * + */ + private RoutePolicy createRoutePolicy() { + HazelcastRoutePolicy policy = new HazelcastRoutePolicy(hazelcastInstance); + policy.setLockMapName("camel:lock:map"); + policy.setLockKey("route-policy"); + policy.setLockValue("id-value"); + policy.setTryLockTimeout(5, TimeUnit.SECONDS); + return policy; } } diff --git a/integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastSedaResource.java b/integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastSedaResource.java new file mode 100644 index 0000000..cec8adc --- /dev/null +++ b/integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastSedaResource.java @@ -0,0 +1,112 @@ +/* + * 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.quarkus.component.hazelcast.it; + +import java.util.List; +import java.util.stream.Collectors; + +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Inject; +import javax.ws.rs.Consumes; +import javax.ws.rs.GET; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; + +import org.apache.camel.CamelContext; +import org.apache.camel.ExchangePattern; +import org.apache.camel.ProducerTemplate; +import org.apache.camel.component.mock.MockEndpoint; + +import static org.apache.camel.quarkus.component.hazelcast.it.HazelcastRoutes.MOCK_SEDA_FIFO; +import static org.apache.camel.quarkus.component.hazelcast.it.HazelcastRoutes.MOCK_SEDA_IN_ONLY; +import static org.apache.camel.quarkus.component.hazelcast.it.HazelcastRoutes.MOCK_SEDA_IN_OUT; +import static org.apache.camel.quarkus.component.hazelcast.it.HazelcastRoutes.MOCK_SEDA_IN_OUT_TRANSACTED; + +@Path("/hazelcast/seda") +@ApplicationScoped +@Produces(MediaType.APPLICATION_JSON) +@Consumes(MediaType.APPLICATION_JSON) +public class HazelcastSedaResource { + + @Inject + ProducerTemplate producerTemplate; + + @Inject + CamelContext context; + + @PUT + @Path("fifo") + public Response addFifo(String value) { + producerTemplate.sendBody("hazelcast-seda:foo-fifo", value); + return Response.accepted().build(); + } + + @GET + @Path("fifo") + public List<String> getFifoValues() { + return getValues(MOCK_SEDA_FIFO); + } + + @PUT + @Path("in") + public Response addInOnly(String value) { + producerTemplate.sendBody("hazelcast-seda:foo-in-only", ExchangePattern.InOnly, value); + return Response.accepted().build(); + } + + @GET + @Path("in") + public List<String> getInOnlyValues() { + return getValues(MOCK_SEDA_IN_ONLY); + } + + @PUT + @Path("out") + public Response addInOut(String value) { + producerTemplate.sendBody("hazelcast-seda:foo-in-out", ExchangePattern.InOut, value); + return Response.accepted().build(); + } + + @GET + @Path("out") + public List<String> getInOutValues() { + return getValues(MOCK_SEDA_IN_OUT); + } + + @PUT + @Path("out/transacted") + public Response addInOutTransacted(String value) { + producerTemplate.sendBody("hazelcast-seda:foo-in-out-trans", ExchangePattern.InOut, value); + return Response.accepted().build(); + } + + @GET + @Path("out/transacted") + public List<String> getInOutTransactedValues() { + return getValues(MOCK_SEDA_IN_OUT_TRANSACTED); + } + + private List<String> getValues(String endpoint) { + MockEndpoint mockEndpoint = context.getEndpoint(endpoint, MockEndpoint.class); + return mockEndpoint.getReceivedExchanges().stream().map( + exchange -> exchange.getMessage().getBody(String.class)) + .collect(Collectors.toList()); + } +} diff --git a/integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastTopicResource.java b/integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastTopicResource.java index 3ce0671..9413799 100644 --- a/integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastTopicResource.java +++ b/integration-tests/hazelcast/src/main/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastTopicResource.java @@ -58,11 +58,10 @@ public class HazelcastTopicResource { } @GET - public List getValues() { + public List<String> getValues() { MockEndpoint mockEndpoint = context.getEndpoint(MOCK_TOPIC_RECEIVED, MockEndpoint.class); - List<Object> values = mockEndpoint.getReceivedExchanges().stream().map( - exchange -> exchange.getMessage().getBody(DataAwareMessage.class).getMessageObject()) + return mockEndpoint.getReceivedExchanges().stream().map( + exchange -> (String) exchange.getMessage().getBody(DataAwareMessage.class).getMessageObject()) .collect(Collectors.toList()); - return values; } } diff --git a/integration-tests/hazelcast/src/main/resources/application.properties b/integration-tests/hazelcast/src/main/resources/application.properties new file mode 100644 index 0000000..2a23dd8 --- /dev/null +++ b/integration-tests/hazelcast/src/main/resources/application.properties @@ -0,0 +1,17 @@ +## --------------------------------------------------------------------------- +## 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. +## --------------------------------------------------------------------------- +quarkus.hazelcast-client.cluster-members=localhost:5701 \ No newline at end of file diff --git a/integration-tests/hazelcast/src/main/resources/hazelcast.xml b/integration-tests/hazelcast/src/main/resources/hazelcast.xml new file mode 100644 index 0000000..b05c0c1 --- /dev/null +++ b/integration-tests/hazelcast/src/main/resources/hazelcast.xml @@ -0,0 +1,34 @@ +<!-- + + 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. + +--> +<hazelcast xmlns="http://www.hazelcast.com/schema/config" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.hazelcast.com/schema/config + http://www.hazelcast.com/schema/config/hazelcast-config-4.0.xsd"> + <cluster-name>dev</cluster-name> + <network> + <port auto-increment="true" port-count="100">5701</port> + <join> + <multicast enabled="false"/> + <tcp-ip enabled="true"> + <required-member>127.0.0.1:5701</required-member> + <members>127.0.0.1:5702,127.0.0.1:5703</members> + </tcp-ip> + </join> + </network> +</hazelcast> \ No newline at end of file diff --git a/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastAtomicTest.java b/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastAtomicTest.java index 3ca5324..845c276 100644 --- a/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastAtomicTest.java +++ b/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastAtomicTest.java @@ -18,7 +18,6 @@ package org.apache.camel.quarkus.component.hazelcast.it; import io.quarkus.test.common.QuarkusTestResource; import io.quarkus.test.common.http.TestHTTPEndpoint; -import io.quarkus.test.hazelcast.HazelcastServerTestResource; import io.quarkus.test.junit.QuarkusTest; import org.junit.jupiter.api.Test; @@ -27,7 +26,7 @@ import static org.hamcrest.Matchers.equalTo; @QuarkusTest @TestHTTPEndpoint(HazelcastAtomicResource.class) -@QuarkusTestResource(HazelcastServerTestResource.class) +@QuarkusTestResource(HazelcastTestResource.class) class HazelcastAtomicTest { @Test public void testAtomicLong() { diff --git a/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastIdempotentIT.java b/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastIdempotentIT.java new file mode 100644 index 0000000..4aec2b4 --- /dev/null +++ b/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastIdempotentIT.java @@ -0,0 +1,23 @@ +/* + * 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.quarkus.component.hazelcast.it; + +import io.quarkus.test.junit.NativeImageTest; + +@NativeImageTest +public class HazelcastIdempotentIT extends HazelcastIdempotentTest { +} diff --git a/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastReplicatedmapTest.java b/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastIdempotentTest.java similarity index 52% copy from integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastReplicatedmapTest.java copy to integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastIdempotentTest.java index 2558ab3..7c9a02f 100644 --- a/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastReplicatedmapTest.java +++ b/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastIdempotentTest.java @@ -16,109 +16,74 @@ */ package org.apache.camel.quarkus.component.hazelcast.it; -import java.util.concurrent.TimeUnit; - import io.quarkus.test.common.QuarkusTestResource; import io.quarkus.test.common.http.TestHTTPEndpoint; -import io.quarkus.test.hazelcast.HazelcastServerTestResource; import io.quarkus.test.junit.QuarkusTest; import io.restassured.http.ContentType; import org.apache.camel.quarkus.component.hazelcast.it.model.HazelcastMapRequest; import org.junit.jupiter.api.Test; import static io.restassured.RestAssured.given; -import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.hasItems; +import static org.hamcrest.Matchers.hasSize; +import static org.hamcrest.Matchers.not; @QuarkusTest -@TestHTTPEndpoint(HazelcastReplicatedMapResource.class) -@QuarkusTestResource(HazelcastServerTestResource.class) -public class HazelcastReplicatedmapTest { +@TestHTTPEndpoint(HazelcastIdempotentResource.class) +@QuarkusTestResource(HazelcastTestResource.class) +public class HazelcastIdempotentTest { @Test - public void testReplicatedmap() { - // add one value + public void testIdempotentRepository() { + // add value with key 1 HazelcastMapRequest request = new HazelcastMapRequest().withVaLue("val1").withId("1"); given() .contentType(ContentType.JSON) .body(request) .when() - .post("/add") + .post() .then() .statusCode(202); - // get value with id - given() - .contentType(ContentType.JSON) - .when() - .get("/get/1") - .then() - .body(equalTo("val1")); - - // add one value with TTL - request = request.withId("2") - .withVaLue("val2") - .withTtl(Long.valueOf(5), TimeUnit.MINUTES); + // add value with key 2 + request = request.withVaLue("val2").withId("2"); given() .contentType(ContentType.JSON) .body(request) .when() - .post("/add") + .post() .then() .statusCode(202); - // verify that map contains key "1" - given() - .contentType(ContentType.JSON) - .when() - .get("/key/1") - .then() - .body(equalTo("true")); - - // verify that map doesn't contain key "3" - given() - .contentType(ContentType.JSON) - .when() - .get("/key/3") - .then() - .body(equalTo("false")); - - // verify that map contains value "val1" + // add same value with key 3 + request = request.withVaLue("val2").withId("3"); given() .contentType(ContentType.JSON) + .body(request) .when() - .get("/value/val1") + .post() .then() - .body(equalTo("true")); + .statusCode(202); - // verify that map doesn't contain value "val2" + // add another value with key 1 -- this one is supposed to be skipped + request = request.withVaLue("val4").withId("1"); given() .contentType(ContentType.JSON) + .body(request) .when() - .get("/value/val3") - .then() - .body(equalTo("false")); - - // remove value by id - given() - .when() - .delete("/1") + .post() .then() .statusCode(202); - // verify that map doesn't contain key "1" anymore + // get all values added to the map given() .contentType(ContentType.JSON) .when() - .get("/key/1") + .get() .then() - .body(equalTo("false")); - - // clear - given() - .when() - .get("/clear") - .then() - .statusCode(202); + .body("$", hasSize(3)) + .body("$", hasItems("val1", "val2")) + .body("$", not(hasItems("val4"))); } } diff --git a/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastInstanceIT.java b/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastInstanceIT.java new file mode 100644 index 0000000..0e72f92 --- /dev/null +++ b/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastInstanceIT.java @@ -0,0 +1,23 @@ +/* + * 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.quarkus.component.hazelcast.it; + +import io.quarkus.test.junit.NativeImageTest; + +@NativeImageTest +public class HazelcastInstanceIT extends HazelcastInstanceTest { +} diff --git a/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastTopicTest.java b/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastInstanceTest.java similarity index 59% copy from integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastTopicTest.java copy to integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastInstanceTest.java index d401556..f6b173f 100644 --- a/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastTopicTest.java +++ b/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastInstanceTest.java @@ -18,37 +18,25 @@ package org.apache.camel.quarkus.component.hazelcast.it; import io.quarkus.test.common.QuarkusTestResource; import io.quarkus.test.common.http.TestHTTPEndpoint; -import io.quarkus.test.hazelcast.HazelcastServerTestResource; import io.quarkus.test.junit.QuarkusTest; -import io.restassured.http.ContentType; import org.junit.jupiter.api.Test; import static io.restassured.RestAssured.given; -import static org.hamcrest.Matchers.hasItems; -import static org.hamcrest.Matchers.hasSize; +import static org.hamcrest.Matchers.equalTo; @QuarkusTest -@TestHTTPEndpoint(HazelcastTopicResource.class) -@QuarkusTestResource(HazelcastServerTestResource.class) -public class HazelcastTopicTest { +@TestHTTPEndpoint(HazelcastInstanceResource.class) +@QuarkusTestResource(HazelcastTestResource.class) +public class HazelcastInstanceTest { + @Test - public void testTopic() { - // publish topic + public void testInstance() { + HazelcastTestResource.addMemberToCluster(); given() - .contentType(ContentType.JSON) - .body("test1") .when() - .post() + .get("/added") .then() - .statusCode(202); + .body(equalTo("1")); - // verify that the consumer has received the topic - given() - .contentType(ContentType.JSON) - .when() - .get() - .then() - .body("$", hasSize(1)) - .body("$", hasItems("test1")); } } diff --git a/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastListTest.java b/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastListTest.java index c38faba..d334fb8 100644 --- a/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastListTest.java +++ b/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastListTest.java @@ -20,7 +20,6 @@ import java.util.Arrays; import io.quarkus.test.common.QuarkusTestResource; import io.quarkus.test.common.http.TestHTTPEndpoint; -import io.quarkus.test.hazelcast.HazelcastServerTestResource; import io.quarkus.test.junit.QuarkusTest; import io.restassured.http.ContentType; import org.junit.jupiter.api.Test; @@ -32,7 +31,7 @@ import static org.hamcrest.Matchers.hasSize; @QuarkusTest @TestHTTPEndpoint(HazelcastListResource.class) -@QuarkusTestResource(HazelcastServerTestResource.class) +@QuarkusTestResource(HazelcastTestResource.class) public class HazelcastListTest { @Test diff --git a/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastMapTest.java b/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastMapTest.java index 96b9615..6a994d4 100644 --- a/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastMapTest.java +++ b/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastMapTest.java @@ -21,7 +21,6 @@ import java.util.concurrent.TimeUnit; import io.quarkus.test.common.QuarkusTestResource; import io.quarkus.test.common.http.TestHTTPEndpoint; -import io.quarkus.test.hazelcast.HazelcastServerTestResource; import io.quarkus.test.junit.QuarkusTest; import io.restassured.http.ContentType; import org.apache.camel.quarkus.component.hazelcast.it.model.HazelcastMapRequest; @@ -34,7 +33,7 @@ import static org.hamcrest.Matchers.hasSize; @QuarkusTest @TestHTTPEndpoint(HazelcastMapResource.class) -@QuarkusTestResource(HazelcastServerTestResource.class) +@QuarkusTestResource(HazelcastTestResource.class) public class HazelcastMapTest { @Test diff --git a/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastMultimapTest.java b/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastMultimapTest.java index 8e330c0..a02b2ed 100644 --- a/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastMultimapTest.java +++ b/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastMultimapTest.java @@ -20,7 +20,6 @@ import java.util.concurrent.TimeUnit; import io.quarkus.test.common.QuarkusTestResource; import io.quarkus.test.common.http.TestHTTPEndpoint; -import io.quarkus.test.hazelcast.HazelcastServerTestResource; import io.quarkus.test.junit.QuarkusTest; import io.restassured.http.ContentType; import org.apache.camel.quarkus.component.hazelcast.it.model.HazelcastMapRequest; @@ -33,7 +32,7 @@ import static org.hamcrest.Matchers.hasSize; @QuarkusTest @TestHTTPEndpoint(HazelcastMultimapResource.class) -@QuarkusTestResource(HazelcastServerTestResource.class) +@QuarkusTestResource(HazelcastTestResource.class) public class HazelcastMultimapTest { @Test diff --git a/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastPolicyIT.java b/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastPolicyIT.java new file mode 100644 index 0000000..a65670f --- /dev/null +++ b/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastPolicyIT.java @@ -0,0 +1,23 @@ +/* + * 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.quarkus.component.hazelcast.it; + +import io.quarkus.test.junit.NativeImageTest; + +@NativeImageTest +public class HazelcastPolicyIT extends HazelcastPolicyTest { +} diff --git a/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastTopicTest.java b/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastPolicyTest.java similarity index 67% copy from integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastTopicTest.java copy to integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastPolicyTest.java index d401556..bd7f1a6 100644 --- a/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastTopicTest.java +++ b/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastPolicyTest.java @@ -18,7 +18,6 @@ package org.apache.camel.quarkus.component.hazelcast.it; import io.quarkus.test.common.QuarkusTestResource; import io.quarkus.test.common.http.TestHTTPEndpoint; -import io.quarkus.test.hazelcast.HazelcastServerTestResource; import io.quarkus.test.junit.QuarkusTest; import io.restassured.http.ContentType; import org.junit.jupiter.api.Test; @@ -28,27 +27,46 @@ import static org.hamcrest.Matchers.hasItems; import static org.hamcrest.Matchers.hasSize; @QuarkusTest -@TestHTTPEndpoint(HazelcastTopicResource.class) -@QuarkusTestResource(HazelcastServerTestResource.class) -public class HazelcastTopicTest { +@TestHTTPEndpoint(HazelcastPolicyResource.class) +@QuarkusTestResource(HazelcastTestResource.class) +public class HazelcastPolicyTest { + @Test - public void testTopic() { - // publish topic + public void testPolicy() { + + // send exchanges + given() + .contentType(ContentType.JSON) + .body("foo1") + .when() + .post() + .then() + .statusCode(202); + given() .contentType(ContentType.JSON) - .body("test1") + .body("foo2") .when() .post() .then() .statusCode(202); - // verify that the consumer has received the topic + given() + .contentType(ContentType.JSON) + .body("foo3") + .when() + .post() + .then() + .statusCode(202); + + // should receive the 3 exchanges given() .contentType(ContentType.JSON) .when() .get() .then() - .body("$", hasSize(1)) - .body("$", hasItems("test1")); + .body("$", hasSize(3)) + .body("$", hasItems("foo1", "foo2", "foo3")); + } } diff --git a/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastQueueIT.java b/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastQueueIT.java new file mode 100644 index 0000000..6c1c132 --- /dev/null +++ b/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastQueueIT.java @@ -0,0 +1,23 @@ +/* + * 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.quarkus.component.hazelcast.it; + +import io.quarkus.test.junit.NativeImageTest; + +@NativeImageTest +public class HazelcastQueueIT extends HazelcastQueueTest { +} diff --git a/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastListTest.java b/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastQueueTest.java similarity index 62% copy from integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastListTest.java copy to integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastQueueTest.java index c38faba..f0e13bc 100644 --- a/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastListTest.java +++ b/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastQueueTest.java @@ -18,9 +18,7 @@ package org.apache.camel.quarkus.component.hazelcast.it; import java.util.Arrays; -import io.quarkus.test.common.QuarkusTestResource; import io.quarkus.test.common.http.TestHTTPEndpoint; -import io.quarkus.test.hazelcast.HazelcastServerTestResource; import io.quarkus.test.junit.QuarkusTest; import io.restassured.http.ContentType; import org.junit.jupiter.api.Test; @@ -31,123 +29,130 @@ import static org.hamcrest.Matchers.hasItems; import static org.hamcrest.Matchers.hasSize; @QuarkusTest -@TestHTTPEndpoint(HazelcastListResource.class) -@QuarkusTestResource(HazelcastServerTestResource.class) -public class HazelcastListTest { - +@TestHTTPEndpoint(HazelcastQueueResource.class) +public class HazelcastQueueTest { @Test - public void testList() { - // add one value + public void testQueue() { + // add a value using the add method :: non blocking given() .contentType(ContentType.JSON) - .body("foo1") + .body("q1") .when() .put() .then() .statusCode(202); - // find value :: should be first value + // retrieves head given() .contentType(ContentType.JSON) .when() - .get("/0") + .get("peek") .then() - .body(equalTo("foo1")); + .body(equalTo("q1")); - // remove value by index + // add a value :: blocking method put given() .contentType(ContentType.JSON) - .body(0) + .body("q2") .when() - .delete("/index") + .put("put") .then() .statusCode(202); - // add all values + // take + given() + .contentType(ContentType.JSON) + .when() + .delete("take") + .then() + .body(equalTo("q1")); + + // offer given() .contentType(ContentType.JSON) - .body(Arrays.asList("foo2", "foo3")) + .body("q3") .when() - .put("/all") + .put("offer") .then() .statusCode(202); - // find values + // poll given() .contentType(ContentType.JSON) .when() - .get("/0") + .delete("poll") .then() - .body(equalTo("foo2")); + .body(equalTo("q2")); + + // poll after q2 is deleted by precedent poll given() .contentType(ContentType.JSON) .when() - .get("/1") + .delete("poll") .then() - .body(equalTo("foo3")); + .body(equalTo("q3")); - // remove value foo2 + // add multiple values given() .contentType(ContentType.JSON) - .body("foo2") + .body("q4") .when() - .delete("/value") + .put() .then() .statusCode(202); - - // foo3 must be on index 0 now given() .contentType(ContentType.JSON) + .body("q5") .when() - .get("/0") + .put() .then() - .body(equalTo("foo3")); - - // delete all + .statusCode(202); given() .contentType(ContentType.JSON) - .body(Arrays.asList("foo3")) + .body("alpha1") .when() - .delete("/all") + .put() .then() .statusCode(202); - // add multiple values + // remaining capacity :: no max capacity so max capacity of the queue is Integer.MAX_VALUE + Integer remainingCapacity = Integer.MAX_VALUE - 3; given() .contentType(ContentType.JSON) - .body(Arrays.asList("foo4", "foo5", "foo6", "foo7")) .when() - .put("/all") + .get("/remainingCapacity") .then() - .statusCode(202); + .body(equalTo(remainingCapacity.toString())); - // retain only 2 : should delete foo5 and foo6 + // drainTo : delete all values and return to list given() .contentType(ContentType.JSON) - .body(Arrays.asList("foo4", "foo7")) .when() - .post("/retain") + .delete("drain") .then() - .statusCode(202); + .body("$", hasSize(3)) + .body("$", hasItems("q4", "q5", "alpha1")); - // verify that the consumer has received all added values + } + + @Test + public void testPollConsumer() { + // add all values given() .contentType(ContentType.JSON) + .body(Arrays.asList("v1", "v2", "v3")) .when() - .get("/added") + .put("poll/list") .then() - .body("$", hasSize(7)) - .body("$", hasItems("foo1", "foo2", "foo3", "foo4", "foo5", "foo6", "foo7")); + .statusCode(202); - // verify that the consumer has received all removed values - // we can't expect foo1 because we gave it just the index, not the value. but the size should be 5 + // retrieve values from consumer given() .contentType(ContentType.JSON) .when() - .get("/deleted") + .get("/polled") .then() - .body("$", hasSize(5)) - .body("$", hasItems("foo2", "foo3", "foo5", "foo6")); + .body("$", hasSize(3)) + .body("$", hasItems("v1", "v2", "v3")); } - } diff --git a/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastReplicatedmapIT.java b/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastReplicatedmapIT.java new file mode 100644 index 0000000..b9aadfb --- /dev/null +++ b/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastReplicatedmapIT.java @@ -0,0 +1,23 @@ +/* + * 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.quarkus.component.hazelcast.it; + +import io.quarkus.test.junit.NativeImageTest; + +@NativeImageTest +public class HazelcastReplicatedmapIT extends HazelcastReplicatedmapTest { +} diff --git a/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastReplicatedmapTest.java b/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastReplicatedmapTest.java index 2558ab3..c194e14 100644 --- a/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastReplicatedmapTest.java +++ b/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastReplicatedmapTest.java @@ -20,7 +20,6 @@ import java.util.concurrent.TimeUnit; import io.quarkus.test.common.QuarkusTestResource; import io.quarkus.test.common.http.TestHTTPEndpoint; -import io.quarkus.test.hazelcast.HazelcastServerTestResource; import io.quarkus.test.junit.QuarkusTest; import io.restassured.http.ContentType; import org.apache.camel.quarkus.component.hazelcast.it.model.HazelcastMapRequest; @@ -31,7 +30,7 @@ import static org.hamcrest.Matchers.equalTo; @QuarkusTest @TestHTTPEndpoint(HazelcastReplicatedMapResource.class) -@QuarkusTestResource(HazelcastServerTestResource.class) +@QuarkusTestResource(HazelcastTestResource.class) public class HazelcastReplicatedmapTest { @Test diff --git a/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastRingbufferIT.java b/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastRingbufferIT.java new file mode 100644 index 0000000..d3927b2 --- /dev/null +++ b/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastRingbufferIT.java @@ -0,0 +1,23 @@ +/* + * 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.quarkus.component.hazelcast.it; + +import io.quarkus.test.junit.NativeImageTest; + +@NativeImageTest +public class HazelcastRingbufferIT extends HazelcastRingbufferTest { +} diff --git a/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastAtomicTest.java b/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastRingbufferTest.java similarity index 52% copy from integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastAtomicTest.java copy to integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastRingbufferTest.java index 3ca5324..89482da 100644 --- a/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastAtomicTest.java +++ b/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastRingbufferTest.java @@ -18,54 +18,74 @@ package org.apache.camel.quarkus.component.hazelcast.it; import io.quarkus.test.common.QuarkusTestResource; import io.quarkus.test.common.http.TestHTTPEndpoint; -import io.quarkus.test.hazelcast.HazelcastServerTestResource; import io.quarkus.test.junit.QuarkusTest; +import io.restassured.http.ContentType; import org.junit.jupiter.api.Test; import static io.restassured.RestAssured.given; import static org.hamcrest.Matchers.equalTo; @QuarkusTest -@TestHTTPEndpoint(HazelcastAtomicResource.class) -@QuarkusTestResource(HazelcastServerTestResource.class) -class HazelcastAtomicTest { +@TestHTTPEndpoint(HazelcastRingbufferResource.class) +@QuarkusTestResource(HazelcastTestResource.class) +public class HazelcastRingbufferTest { @Test - public void testAtomicLong() { + public void testRingBuffer() { + // get capacity -- should be default capacity 10K + given() + .contentType(ContentType.JSON) + .when() + .get("/capacity") + .then() + .body(equalTo("10000")); - // set value + // add values given() + .contentType(ContentType.JSON) + .body("foo1") .when() - .put("/4711") + .put() .then() .statusCode(202); - // get value given() + .contentType(ContentType.JSON) + .body("foo2") .when() - .get() + .put() .then() - .body(equalTo("4711")); + .statusCode(202); - // increment and get new value given() + .contentType(ContentType.JSON) + .body("foo3") .when() - .get("/increment") + .put() .then() - .body(equalTo("4712")); + .statusCode(202); - // decrement and get new value + // gets HEAD given() + .contentType(ContentType.JSON) .when() - .get("/decrement") + .get("/head") .then() - .body(equalTo("4711")); + .body(equalTo("foo1")); - // destroy value + // gets TAIL given() + .contentType(ContentType.JSON) .when() - .delete() + .get("/tail") .then() - .statusCode(202); + .body(equalTo("foo3")); + // it returns capacity instead because there is no expiration policy set for the RingBuffer + given() + .contentType(ContentType.JSON) + .when() + .get("/capacity/remaining") + .then() + .body(equalTo("10000")); } } diff --git a/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastSedaIT.java b/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastSedaIT.java new file mode 100644 index 0000000..773ca4f --- /dev/null +++ b/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastSedaIT.java @@ -0,0 +1,23 @@ +/* + * 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.quarkus.component.hazelcast.it; + +import io.quarkus.test.junit.NativeImageTest; + +@NativeImageTest +public class HazelcastSedaIT extends HazelcastSedaTest { +} diff --git a/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastSetTest.java b/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastSedaTest.java similarity index 56% copy from integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastSetTest.java copy to integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastSedaTest.java index 474f3c9..80b435e 100644 --- a/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastSetTest.java +++ b/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastSedaTest.java @@ -16,11 +16,8 @@ */ package org.apache.camel.quarkus.component.hazelcast.it; -import java.util.Arrays; - import io.quarkus.test.common.QuarkusTestResource; import io.quarkus.test.common.http.TestHTTPEndpoint; -import io.quarkus.test.hazelcast.HazelcastServerTestResource; import io.quarkus.test.junit.QuarkusTest; import io.restassured.http.ContentType; import org.junit.jupiter.api.Test; @@ -30,100 +27,88 @@ import static org.hamcrest.Matchers.hasItems; import static org.hamcrest.Matchers.hasSize; @QuarkusTest -@TestHTTPEndpoint(HazelcastSetResource.class) -@QuarkusTestResource(HazelcastServerTestResource.class) -public class HazelcastSetTest { - +@TestHTTPEndpoint(HazelcastSedaResource.class) +@QuarkusTestResource(HazelcastTestResource.class) +public class HazelcastSedaTest { @Test - public void testSet() { - // add one value + public void testSedaFifo() { + // add one value First In First Out given() .contentType(ContentType.JSON) .body("foo1") .when() - .put() + .put("/fifo") .then() .statusCode(202); - // trying to add same value:: shouldn't be added twice : verify with consumer + // verify that the consumer received the message given() .contentType(ContentType.JSON) - .body("foo1") .when() - .put() + .get("/fifo") .then() - .statusCode(202); + .body("$", hasSize(1)) + .body("$", hasItems("foo1")); + } - // remove value + @Test + public void testSedaInOnly() { + // add one value In Only given() .contentType(ContentType.JSON) .body("foo1") .when() - .delete("/value") + .put("/in") .then() .statusCode(202); - // add multiple values + // verify that the consumer received the message given() .contentType(ContentType.JSON) - .body(Arrays.asList("foo2", "foo3")) .when() - .put("/all") + .get("/in") .then() - .statusCode(202); - - // remove value foo2 - given() - .contentType(ContentType.JSON) - .body("foo2") - .when() - .delete("/value") - .then() - .statusCode(202); + .body("$", hasSize(1)) + .body("$", hasItems("foo1")); + } - // delete all + @Test + public void testSedaInOut() { given() .contentType(ContentType.JSON) - .body(Arrays.asList("foo3")) + .body("foo1") .when() - .delete("/all") + .put("/out") .then() .statusCode(202); - // add multiple values + // verify that the consumer received the message given() .contentType(ContentType.JSON) - .body(Arrays.asList("foo4", "foo5", "foo6", "foo7")) .when() - .put("/all") + .get("/out") .then() - .statusCode(202); + .body("$", hasSize(1)) + .body("$", hasItems("foo1")); + } - // retain only 2 : should delete foo5 and foo6 + @Test + public void testSedaInOutTransacted() { given() .contentType(ContentType.JSON) - .body(Arrays.asList("foo4", "foo7")) + .body("foo1") .when() - .post("/retain") + .put("/out/transacted") .then() .statusCode(202); - // verify that the consumer has received all added values - given() - .contentType(ContentType.JSON) - .when() - .get("/added") - .then() - .body("$", hasSize(7)) - .body("$", hasItems("foo1", "foo2", "foo3", "foo4", "foo5", "foo6", "foo7")); - - // verify that the consumer has received all removed values + // verify that the consumer received the message given() .contentType(ContentType.JSON) .when() - .get("/deleted") + .get("/out/transacted") .then() - .body("$", hasSize(5)) - .body("$", hasItems("foo1", "foo2", "foo3", "foo5", "foo6")); + .body("$", hasSize(1)) + .body("$", hasItems("foo1")); } } diff --git a/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastSetTest.java b/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastSetTest.java index 474f3c9..13340ed 100644 --- a/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastSetTest.java +++ b/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastSetTest.java @@ -20,7 +20,6 @@ import java.util.Arrays; import io.quarkus.test.common.QuarkusTestResource; import io.quarkus.test.common.http.TestHTTPEndpoint; -import io.quarkus.test.hazelcast.HazelcastServerTestResource; import io.quarkus.test.junit.QuarkusTest; import io.restassured.http.ContentType; import org.junit.jupiter.api.Test; @@ -31,7 +30,7 @@ import static org.hamcrest.Matchers.hasSize; @QuarkusTest @TestHTTPEndpoint(HazelcastSetResource.class) -@QuarkusTestResource(HazelcastServerTestResource.class) +@QuarkusTestResource(HazelcastTestResource.class) public class HazelcastSetTest { @Test diff --git a/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastTestResource.java b/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastTestResource.java new file mode 100644 index 0000000..c73c9d9 --- /dev/null +++ b/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastTestResource.java @@ -0,0 +1,53 @@ +/* + * 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.quarkus.component.hazelcast.it; + +import java.util.Map; + +import com.hazelcast.core.Hazelcast; +import com.hazelcast.core.HazelcastInstance; +import io.quarkus.test.common.QuarkusTestResourceLifecycleManager; + +public class HazelcastTestResource implements QuarkusTestResourceLifecycleManager { + private volatile HazelcastInstance member; + private static volatile HazelcastInstance member2; + + @Override + public Map<String, String> start() { + member = Hazelcast.newHazelcastInstance(); + return null; + } + + @Override + public void stop() { + if (member != null) { + member.shutdown(); + } + + if (member2 != null) { + member.shutdown(); + } + } + + /** + * this is used to test new instance in the same cluster + */ + public static void addMemberToCluster() { + member2 = Hazelcast.newHazelcastInstance(); + } + +} diff --git a/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastTopicTest.java b/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastTopicTest.java index d401556..5e525f8 100644 --- a/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastTopicTest.java +++ b/integration-tests/hazelcast/src/test/java/org/apache/camel/quarkus/component/hazelcast/it/HazelcastTopicTest.java @@ -18,7 +18,6 @@ package org.apache.camel.quarkus.component.hazelcast.it; import io.quarkus.test.common.QuarkusTestResource; import io.quarkus.test.common.http.TestHTTPEndpoint; -import io.quarkus.test.hazelcast.HazelcastServerTestResource; import io.quarkus.test.junit.QuarkusTest; import io.restassured.http.ContentType; import org.junit.jupiter.api.Test; @@ -29,7 +28,7 @@ import static org.hamcrest.Matchers.hasSize; @QuarkusTest @TestHTTPEndpoint(HazelcastTopicResource.class) -@QuarkusTestResource(HazelcastServerTestResource.class) +@QuarkusTestResource(HazelcastTestResource.class) public class HazelcastTopicTest { @Test public void testTopic() { diff --git a/poms/bom-test/pom.xml b/poms/bom-test/pom.xml index fa0f073..76ccd47 100644 --- a/poms/bom-test/pom.xml +++ b/poms/bom-test/pom.xml @@ -52,12 +52,6 @@ <type>pom</type> <scope>import</scope> </dependency> - - <dependency> - <groupId>com.hazelcast</groupId> - <artifactId>quarkus-test-hazelcast</artifactId> - <version>${quarkus-hazelcast-client.version}</version> - </dependency> <dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-integration-test-support-custom-dataformat</artifactId>