/*
* Copyright (C) Scott Cranton, Jakub Korab, and Christian Posta
* https://github.com/CamelCookbook
*
* Licensed 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.camelcookbook.structuringroutes.vm;
import org.apache.camel.CamelContext;
import org.apache.camel.Message;
import org.apache.camel.ProducerTemplate;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.impl.DefaultCamelContext;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.assertFalse;
/**
* To test communication between Camel contexts in the same JVM, we are going to wire up the test my hand instead of
* relying on CamelTestSupport.
*/
public class VmTest {
private CamelContext testHarnessContext;
private CamelContext externalLoggingContext;
@Before
public void setupContexts() throws Exception {
testHarnessContext = new DefaultCamelContext();
testHarnessContext.addRoutes(new RouteBuilder() {
@Override
public void configure() throws Exception {
from("direct:in")
.setHeader("harness.threadName", simple("${threadName}"))
.to("vm:logMessageToBackendSystem")
.log("Completed logging");
}
});
testHarnessContext.start();
externalLoggingContext = new DefaultCamelContext();
externalLoggingContext.addRoutes(new ExternalLoggingRouteBuilder("vm"));
externalLoggingContext.start();
}
@After
public void shutdownContexts() throws Exception {
testHarnessContext.stop();
externalLoggingContext.stop();
}
@Test
public void testMessagePassing() throws InterruptedException {
ProducerTemplate producerTemplate = testHarnessContext.createProducerTemplate();
MockEndpoint out = externalLoggingContext.getEndpoint("mock:out", MockEndpoint.class);
out.setExpectedMessageCount(1);
out.message(0).body().isEqualTo("logging: something happened");
producerTemplate.sendBody("direct:in", "something happened");
out.assertIsSatisfied(1000);
Message message = out.getExchanges().get(0).getIn();
assertFalse(message.getHeader("harness.threadName").equals(
message.getHeader(ExternalLoggingRouteBuilder.LOGGING_THREAD_NAME)));
}
}