Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions components/camel-amqp/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,14 @@

<!-- testing -->
<!-- test infra -->
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-test-infra-core</artifactId>
<version>${project.version}</version>
<scope>test</scope>
<type>test-jar</type>
</dependency>

<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-test-infra-artemis</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,15 @@
import jakarta.jms.TextMessage;

import org.apache.camel.CamelContext;
import org.apache.camel.EndpointInject;
import org.apache.camel.ProducerTemplate;
import org.apache.camel.RuntimeCamelException;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.test.infra.core.ContextFixture;
import org.apache.camel.test.infra.core.RouteFixture;
import org.apache.qpid.jms.message.JmsMessage;
import org.apache.qpid.jms.provider.amqp.message.AmqpJmsMessageFacade;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import static org.apache.camel.component.amqp.AMQPComponent.amqpComponent;
Expand All @@ -40,15 +43,22 @@

public class AMQPRouteTest extends AMQPTestSupport {

@EndpointInject("mock:result")
MockEndpoint resultEndpoint;
private ProducerTemplate template;

String expectedBody = "Hello there!";
private MockEndpoint resultEndpoint;
private String expectedBody = "Hello there!";

@BeforeEach
void setupTemplate() {
template = contextExtension.getProducerTemplate();
resultEndpoint = contextExtension.getMockEndpoint("mock:result");
}

@Test
public void testJmsQueue() throws Exception {
resultEndpoint.expectedMessageCount(1);
resultEndpoint.message(0).header("cheese").isEqualTo(123);

template.sendBodyAndHeader("amqp-customized:queue:ping", expectedBody, "cheese", 123);
resultEndpoint.assertIsSatisfied();
}
Expand Down Expand Up @@ -88,7 +98,7 @@ public void testNoAmqpAnnotations() throws Exception {
resultEndpoint.message(0).header("cheese").isEqualTo(123);
// default doesn't map annotations to headers
resultEndpoint.message(0).header("JMS_AMQP_MA_cheese").isNull();
sendAmqpMessage(context.getComponent("amqp-customized", AMQPComponent.class),
sendAmqpMessage(contextExtension.getContext().getComponent("amqp-customized", AMQPComponent.class),
"ping", expectedBody, facade -> {
try {
facade.setApplicationProperty("cheese", 123);
Expand All @@ -105,7 +115,7 @@ public void testAmqpAnnotations() throws Exception {
resultEndpoint.expectedMessageCount(1);
resultEndpoint.message(0).header("cheese").isEqualTo(123);
resultEndpoint.message(0).header("JMS_AMQP_MA_cheese").isEqualTo(456);
sendAmqpMessage(context.getComponent("amqp-customized2", AMQPComponent.class),
sendAmqpMessage(contextExtension.getContext().getComponent("amqp-customized2", AMQPComponent.class),
"ping2", expectedBody, facade -> {
try {
facade.setApplicationProperty("cheese", 123);
Expand All @@ -131,21 +141,22 @@ private void sendAmqpMessage(
}
}

// Routes fixtures
@ContextFixture
public void configureContext(CamelContext context) {
System.setProperty(AMQPConnectionDetails.AMQP_PORT, service.brokerPort() + "");

@Override
protected CamelContext createCamelContext() throws Exception {
CamelContext camelContext = super.createCamelContext();
camelContext.getRegistry().bind("amqpConnection", discoverAMQP(camelContext));
context.getRegistry().bind("amqpConnection", discoverAMQP(context));
context.addComponent("amqp-customized", amqpComponent(service.serviceAddress()));
context.addComponent("amqp-customized2", amqpComponent(service.serviceAddress()));
context.getComponent("amqp-customized2", AMQPComponent.class).setIncludeAmqpAnnotations(true);
}

camelContext.addComponent("amqp-customized", amqpComponent(service.serviceAddress()));
camelContext.addComponent("amqp-customized2", amqpComponent(service.serviceAddress()));
camelContext.getComponent("amqp-customized2", AMQPComponent.class).setIncludeAmqpAnnotations(true);
return camelContext;
@RouteFixture
public void createRouteBuilder(CamelContext context) throws Exception {
context.addRoutes(createRouteBuilder());
}

@Override
protected RouteBuilder createRouteBuilder() {
private static RouteBuilder createRouteBuilder() {
return new RouteBuilder() {
public void configure() {
from("amqp-customized:queue:ping")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,54 +17,73 @@
package org.apache.camel.component.amqp;

import org.apache.camel.CamelContext;
import org.apache.camel.EndpointInject;
import org.apache.camel.ProducerTemplate;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.test.infra.artemis.services.ArtemisService;
import org.apache.camel.test.infra.artemis.services.ArtemisServiceFactory;
import org.apache.camel.test.infra.core.CamelContextExtension;
import org.apache.camel.test.infra.core.ContextFixture;
import org.apache.camel.test.infra.core.DefaultCamelContextExtension;
import org.apache.camel.test.infra.core.RouteFixture;
import org.apache.qpid.jms.JmsConnectionFactory;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;

import static org.apache.camel.component.amqp.AMQPComponent.amqpComponent;
import static org.apache.camel.component.amqp.AMQPConnectionDetails.discoverAMQP;

public class AMQPRouteTraceFrameTest extends AMQPTestSupport {

@EndpointInject("mock:result")
MockEndpoint resultEndpoint;
@RegisterExtension
protected static ArtemisService service = ArtemisServiceFactory.createSingletonAMQPService();

String expectedBody = "Hello there!";
@RegisterExtension
protected static CamelContextExtension contextExtension = new DefaultCamelContextExtension();

private MockEndpoint resultEndpoint;

private String expectedBody = "Hello there!";
private ProducerTemplate template;

@BeforeEach
void setupTemplate() {
resultEndpoint = contextExtension.getMockEndpoint("mock:result");
template = contextExtension.getProducerTemplate();
}

@Test
public void testTraceFrame() throws Exception {
resultEndpoint.expectedMessageCount(1);
resultEndpoint.message(0).header("cheese").isEqualTo(123);
template.sendBodyAndHeader("amqp-customized:queue:ping", expectedBody, "cheese", 123);

template.sendBodyAndHeader("amqp-with-trace:queue:ping", expectedBody, "cheese", 123);
resultEndpoint.assertIsSatisfied();
}

@Override
protected CamelContext createCamelContext() throws Exception {
CamelContext camelContext = super.createCamelContext();

camelContext.getRegistry().bind("amqpConnection", discoverAMQP(camelContext));
@ContextFixture
public void configureContext(CamelContext context) {
System.setProperty(AMQPConnectionDetails.AMQP_PORT, service.brokerPort() + "");
context.getRegistry().bind("amqpConnection", discoverAMQP(context));

JmsConnectionFactory connectionFactory
= new JmsConnectionFactory(service.serviceAddress() + "?amqp.traceFrames=true");

AMQPComponent amqp = amqpComponent(service.serviceAddress());
amqp.getConfiguration().setConnectionFactory(connectionFactory);

camelContext.addComponent("amqp-customized", amqp);
return camelContext;
context.addComponent("amqp-with-trace", amqp);
}

@Override
protected RouteBuilder createRouteBuilder() {
return new RouteBuilder() {
@RouteFixture
public void createRouteBuilder(CamelContext context) throws Exception {
context.addRoutes(new RouteBuilder() {
public void configure() {
from("amqp-customized:queue:ping")
from("amqp-with-trace:queue:ping")
.to("log:routing")
.to("mock:result");
}
};
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,21 +14,24 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.apache.camel.component.amqp;

import org.apache.camel.test.infra.artemis.services.ArtemisService;
import org.apache.camel.test.infra.artemis.services.ArtemisServiceFactory;
import org.apache.camel.test.junit5.CamelTestSupport;
import org.junit.jupiter.api.BeforeAll;
import org.apache.camel.test.infra.core.CamelContextExtension;
import org.apache.camel.test.infra.core.DefaultCamelContextExtension;
import org.apache.camel.test.infra.core.api.ConfigurableContext;
import org.apache.camel.test.infra.core.api.ConfigurableRoute;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.extension.RegisterExtension;

public class AMQPTestSupport extends CamelTestSupport {

public abstract class AMQPTestSupport implements ConfigurableContext, ConfigurableRoute {
@Order(1)
@RegisterExtension
protected static ArtemisService service = ArtemisServiceFactory.createSingletonAMQPService();

@BeforeAll
public static void beforeAll() {
System.setProperty(AMQPConnectionDetails.AMQP_PORT, service.brokerPort() + "");
}
@Order(2)
@RegisterExtension
protected static CamelContextExtension contextExtension = new DefaultCamelContextExtension();
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,21 +17,30 @@
package org.apache.camel.component.amqp;

import org.apache.camel.CamelContext;
import org.apache.camel.ConsumerTemplate;
import org.apache.camel.ProducerTemplate;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.test.infra.core.ContextFixture;
import org.apache.camel.test.infra.core.RouteFixture;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import static org.apache.camel.component.amqp.AMQPConnectionDetails.discoverAMQP;
import static org.junit.jupiter.api.Assertions.assertEquals;

public class AMQPToDSendDynamicTest extends AMQPTestSupport {
private ProducerTemplate template;
private ConsumerTemplate consumer;

@Test
public void testToD() {
template.sendBodyAndHeader("direct:start", "Hello bar", "where", "bar");
template.sendBodyAndHeader("direct:start", "Hello beer", "where", "beer");

// there should only be one amqp endpoint
long count = context.getEndpoints().stream().filter(e -> e.getEndpointUri().startsWith("amqp:")).count();
long count = contextExtension.getContext().getEndpoints().stream().filter(e -> e.getEndpointUri().startsWith("amqp:"))
.count();
assertEquals(1, count, "There should only be 1 amqp endpoint");

// and the messages should be in the queues
Expand All @@ -41,15 +50,30 @@ public void testToD() {
assertEquals("Hello beer", out);
}

@Override
protected CamelContext createCamelContext() throws Exception {
CamelContext camelContext = super.createCamelContext();
@BeforeAll
static void startContext() throws Exception {
System.setProperty(AMQPConnectionDetails.AMQP_PORT, service.brokerPort() + "");
}

@BeforeEach
void setupTemplate() {
template = contextExtension.getProducerTemplate();
consumer = contextExtension.getConsumerTemplate();
}

@ContextFixture
public void configureContext(CamelContext camelContext) {
System.setProperty(AMQPConnectionDetails.AMQP_PORT, service.brokerPort() + "");

camelContext.getRegistry().bind("amqpConnection", discoverAMQP(camelContext));
return camelContext;
}

@Override
protected RouteBuilder createRouteBuilder() {
@RouteFixture
public void createRouteBuilder(CamelContext context) throws Exception {
context.addRoutes(createRouteBuilder());
}

private RouteBuilder createRouteBuilder() {
return new RouteBuilder() {
public void configure() {
// route message dynamic using toD
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,34 +17,54 @@
package org.apache.camel.component.amqp;

import org.apache.camel.CamelContext;
import org.apache.camel.ProducerTemplate;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.test.infra.core.ContextFixture;
import org.apache.camel.test.infra.core.RouteFixture;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import static org.apache.camel.component.amqp.AMQPConnectionDetails.discoverAMQP;

public class AMQPToDTest extends AMQPTestSupport {
private ProducerTemplate template;

@Test
public void testToD() throws Exception {
getMockEndpoint("mock:bar").expectedBodiesReceived("Hello bar");
getMockEndpoint("mock:beer").expectedBodiesReceived("Hello beer");
contextExtension.getMockEndpoint("mock:bar").expectedBodiesReceived("Hello bar");
contextExtension.getMockEndpoint("mock:beer").expectedBodiesReceived("Hello beer");

template.sendBodyAndHeader("direct:start", "Hello bar", "where", "bar");
template.sendBodyAndHeader("direct:start", "Hello beer", "where", "beer");

MockEndpoint.assertIsSatisfied(context);
MockEndpoint.assertIsSatisfied(contextExtension.getContext());
}

@Override
protected CamelContext createCamelContext() throws Exception {
CamelContext camelContext = super.createCamelContext();
@BeforeAll
static void startContext() throws Exception {
System.setProperty(AMQPConnectionDetails.AMQP_PORT, service.brokerPort() + "");
}

@BeforeEach
void setupTemplate() {
template = contextExtension.getProducerTemplate();
}

@ContextFixture
public void configureContext(CamelContext camelContext) {
System.setProperty(AMQPConnectionDetails.AMQP_PORT, service.brokerPort() + "");

camelContext.getRegistry().bind("amqpConnection", discoverAMQP(camelContext));
return camelContext;
}

@Override
protected RouteBuilder createRouteBuilder() {
@RouteFixture
public void createRouteBuilder(CamelContext context) throws Exception {
context.addRoutes(createRouteBuilder());
}

private RouteBuilder createRouteBuilder() {
return new RouteBuilder() {
public void configure() {
// route message dynamic using toD
Expand Down
Loading