package org.switchyard.karaf.test.quickstarts; import static org.ops4j.pax.exam.karaf.options.KarafDistributionOption.editConfigurationFilePut; import static org.ops4j.pax.exam.karaf.options.KarafDistributionOption.replaceConfigurationFile; import java.io.File; import java.net.URL; import java.util.concurrent.TimeUnit; import org.fusesource.mqtt.client.BlockingConnection; import org.fusesource.mqtt.client.MQTT; import org.fusesource.mqtt.client.Message; import org.fusesource.mqtt.client.QoS; import org.fusesource.mqtt.client.Topic; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Ignore; import org.junit.Test; import org.ops4j.pax.exam.CoreOptions; import org.switchyard.common.type.Classes; @Ignore("Disable for now due to https://issues.jboss.org/browse/SWITCHYARD-2220") public class CamelMQTTBindingQuickstartTest extends AbstractQuickstartTest { private static String bundleName = "org.switchyard.quickstarts.switchyard.camel.mqtt.binding"; private static String featureName = "switchyard-quickstart-camel-mqtt-binding"; private static final String TOPIC_INPUT = "camel/mqtt/test/input"; private static final String TOPIC_OUTPUT = "camel/mqtt/test/output"; private static final String MESSAGE_INPUT = "SquarePants"; private static final String MESSAGE_OUTPUT = "Hello there " + MESSAGE_INPUT + " :-) "; private static final String USER_NAME = "karaf"; private static final String PASSWORD = "karaf"; @BeforeClass public static void before() throws Exception { URL activemqXml = Classes.getResource("activemq.xml"); startTestContainer(featureName, bundleName, CoreOptions.options( editConfigurationFilePut("etc/org.ops4j.pax.logging.cfg", "log4j.logger.org.apache.activemq", "DEBUG"), replaceConfigurationFile("etc/activemq.xml", new File(activemqXml.toURI()))), DeploymentProbe.class); } @Test public void testDeployment() throws Exception { BlockingConnection publishConnection = null; BlockingConnection subscribeConnection = null; try { Topic outputTopic = new Topic(TOPIC_OUTPUT, QoS.AT_LEAST_ONCE); MQTT mqtt = new MQTT(); mqtt.setUserName(USER_NAME); mqtt.setPassword(PASSWORD); subscribeConnection = mqtt.blockingConnection(); subscribeConnection.connect(); subscribeConnection.subscribe(new Topic[]{outputTopic}); publishConnection = mqtt.blockingConnection(); publishConnection.connect(); publishConnection.publish(TOPIC_INPUT, MESSAGE_INPUT.getBytes(), QoS.AT_LEAST_ONCE, false); Message message = subscribeConnection.receive(1000, TimeUnit.MILLISECONDS); Assert.assertNotNull("No output message from " + TOPIC_OUTPUT, message); Assert.assertEquals(MESSAGE_OUTPUT, new String(message.getPayload())); Assert.assertNull("More than one message received from " + TOPIC_OUTPUT, subscribeConnection.receive(1000, TimeUnit.MILLISECONDS)); } finally { if (publishConnection != null) { publishConnection.disconnect(); } } } }