Problem:
The unit test, provided below, fails with message:
java.lang.RuntimeException: Gave up waiting for BlueprintContainer from bundle "RouteXmlTest"
The exception is vague and there is no cogent documentation or examples that illustrate how to unit test this scenario.
Therefore, need help :-)
Below, I've listed the code used in my failed attempt, thus far, i.e., extending test file with "CamelBlueprintTestSupport.java".
Please note that the application (code also supplied, below) runs successfully when deployed to Red Hat Fuse 7.2 container.
Any guidance/solution appreciated.
Thx!
Here is the unit test class...
src/main/test/aaa/bbb.ccc.jar/RouteXmlTest.java
package aaa.bbb.ccc.jar;
import java.io.File;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import org.apache.camel.Consume;
import org.apache.camel.Produce;
import org.apache.camel.ProducerTemplate;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.test.blueprint.CamelBlueprintTestSupport;
//import org.apache.camel.test.junit4.CamelTestSupport;
import org.junit.Test;
public class RouteXmlTest extends CamelBlueprintTestSupport { //CamelTestSupport {
protected Object[] expectedBodies = {}; // empty to start
@Produce(uri = "file:work/cbr/input")
protected ProducerTemplate inputEndpoint;
@Consume(uri = "jms:queue:myFromQueueA")
protected MockEndpoint myFromQueueA;
@Consume(uri = "jms:queue:myToQueueB")
protected MockEndpoint myToQueueB;
@Consume(uri = "jms:queue:myToQueueC")
protected MockEndpoint myToQueueC;
@Consume(uri = "jms:queue:myToQueueD")
protected MockEndpoint myToQueueD;
@Override
protected RouteBuilder createRouteBuilder() throws Exception {
return new CamelRoute();
}
@Override
public String isMockEndpoints() {
return "*";
}
@Test
public void testCamelRoute() throws Exception {
// Define some input data based on the files we have to test against
String value1 = getFileContents("src/test/resources/data/order1.xml");
String value2 = getFileContents("src/test/resources/data/order2.xml");
String value3 = getFileContents("src/test/resources/data/order3.xml");
String value4 = getFileContents("src/test/resources/data/order4.xml");
String value5 = getFileContents("src/test/resources/data/order5.xml");
expectedBodies = new Object[]{value1, value2, value3, value4, value5};
// Define some expectations
getMockEndpoint("mock:jms:queue:myToQueueB").expectedMinimumMessageCount(5);
getMockEndpoint("mock:jms:queue:myToQueueC").expectedMinimumMessageCount(5);
getMockEndpoint("mock:jms:queue:myToQueueD").expectedMinimumMessageCount(5);
// Send some messages to input endpoints
for (Object expectedBody : expectedBodies) {
inputEndpoint.sendBody(expectedBody);
}
// Validate our expectations
assertMockEndpointsSatisfied();
}
@Override
protected String getBlueprintDescriptor() {
return "OSGI-INF/blueprint/camel-route.xml";
}
private String getFileContents(String path) throws Exception {
Path filePath = new File(path).toPath();
return new String(Files.readAllBytes(filePath), StandardCharsets.UTF_8);
}
}
here is the camel-route.xml...
src/main/resources/OSGI-INF/blueprint/camel-route
<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0
https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
http://camel.apache.org/schema/blueprint
http://camel.apache.org/schema/blueprint/camel-blueprint.xsd">
<reference id="transactionManager" interface="org.springframework.transaction.PlatformTransactionManager"/>
<bean id="jms" class="org.apache.camel.component.jms.JmsComponent">
<property name="connectionFactory">
<reference interface="javax.jms.ConnectionFactory" />
</property>
<property name="transactionManager" ref="transactionManager"/>
</bean>
<bean class="aaa.bbb.ccc.jar.CamelRoute" id="myRouteBuilder"/>
<camelContext id="cbr-example-context" xmlns="http://camel.apache.org/schema/blueprint">
<routeBuilder ref="myRouteBuilder"/>
</camelContext>
</blueprint>
Below is the exception received when attempting the unit test...
-
-
-
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running aaa.bbb.ccc.jar.RouteXmlTest
[ main] CamelBlueprintHelper INFO Using Blueprint XML file: /C:/tools/rfhpoc/target/classes/OSGI-INF/blueprint/camel-route.xml
[ Thread-0] RawBuilder INFO Copy thread finished.
[ Thread-1] RawBuilder INFO Copy thread finished.
[ main] Activator INFO Camel activator starting
[ main] Activator INFO Camel activator started
[ Blueprint Extender: 1] BlueprintContainerImpl INFO Bundle RouteXmlTest/1.0.0 is waiting for namespace handlers [http://camel.apache.org/schema/blueprint]
[ Blueprint Extender: 1] BlueprintContainerImpl INFO Bundle RouteXmlTest/1.0.0 is waiting for dependencies [(objectClass=javax.jms.ConnectionFactory), (objectClass=org.springframework.transaction.PlatformTransactionManager)]
[ main] RouteXmlTest INFO ********************************************************************************
[ main] RouteXmlTest INFO Testing done: testCamelRoute(aaa.bbb.ccc.jar.RouteXmlTest)
[ main] RouteXmlTest INFO Took: 32.815 seconds (32815 millis)
[ main] RouteXmlTest INFO ********************************************************************************
[ main] CamelBlueprintHelper INFO Deleting work directory target/bundles/1549574455436
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 33.338 s <<< FAILURE! - in aaa.bbb.ccc.jar.RouteXmlTest
testCamelRoute(aaa.bbb.ccc.jar.RouteXmlTest) Time elapsed: 32.952 s <<< ERROR!
java.lang.RuntimeException: Gave up waiting for BlueprintContainer from bundle "RouteXmlTest"
Results:
Errors:
RouteXmlTest>CamelBlueprintTestSupport.setUp:241->CamelBlueprintTestSupport.createBundleContext:175 » Runtime
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0
------------------------------------------------------------------------
BUILD FAILURE
------------------------------------------------------------------------
Total time: 01:13 min
Finished at: 2019-02-07T16:21:28-05:00
------------------------------------------------------------------------
-
-
-
OTHER RELEVANT FILES BELOW
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>aaa.bbb.ccc</groupId>
<artifactId>rfhpoc</artifactId>
<version>1.0</version>
<packaging>bundle</packaging>
<name>rfhpoc</name>
<description>rfhpoc - show dsl routing from queue to multiple queues ("spray")</description>
<licenses>
<license>
<name>Apache License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.html</url>
<distribution>repo</distribution>
</license>
</licenses>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.test.skip>false</maven.test.skip>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.jboss.redhat-fuse</groupId>
<artifactId>fuse-karaf-bom</artifactId>
<version>7.1.0.fuse-710019-redhat-00002</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-core</artifactId>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>artemis-core-client</artifactId>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>artemis-jms-client</artifactId>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-jms</artifactId>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-blueprint</artifactId>
<scope>provided</scope> <!--***-->
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12.0.redhat-003</version>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-test-blueprint</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<defaultGoal>install</defaultGoal>
<plugins>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>3.2.0</version>
<extensions>true</extensions>
<configuration>
<instructions>
<Bundle-SymbolicName>rfhpoc</Bundle-SymbolicName>
<Bundle-Name>rfhpoc</Bundle-Name>
</instructions>
</configuration>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
src/main/java/aaa.bbb.ccc.jar/CamelRoute.java
package aaa.bbb.ccc.jar;
import org.apache.camel.builder.RouteBuilder;
public class CamelRoute extends RouteBuilder {
@Override
public void configure() throws Exception {
System.getProperties().list(System.out);
from("file:work/cbr/input")
.log("from ${file:name}")
.to("jms:queue:myFromQueueA");
from("jms:queue:myFromQueueA")
//.transacted()
.log("from jms:queue:myFromQueueA")
.to("jms:queue:myToQueueB")
.to("jms:queue:myToQueueC")
.to("jms:queue:myToQueueD");
}
}
environment
red hat fuse 7.2
java 8
active mq 7.2.3
apache maven 3.5.3