package org.jooby.camel; import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.expectLastCall; import static org.easymock.EasyMock.isA; import static org.junit.Assert.assertEquals; import java.io.File; import java.io.IOException; import java.util.Properties; import java.util.concurrent.TimeUnit; import org.apache.camel.CamelContext; import org.apache.camel.ConsumerTemplate; import org.apache.camel.FluentProducerTemplate; import org.apache.camel.ProducerTemplate; import org.apache.camel.ShutdownRoute; import org.apache.camel.ShutdownRunningTask; import org.apache.camel.ThreadPoolRejectedPolicy; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.properties.PropertiesComponent; import org.apache.camel.component.properties.PropertiesResolver; import org.apache.camel.impl.DefaultCamelContext; import org.apache.camel.impl.DefaultShutdownStrategy; import org.apache.camel.spi.ExecutorServiceManager; import org.apache.camel.spi.ShutdownStrategy; import org.apache.camel.spi.StreamCachingStrategy; import org.apache.camel.spi.ThreadPoolProfile; import org.jooby.Env; import org.jooby.internal.camel.CamelFinalizer; import org.jooby.test.MockUnit; import org.junit.Test; import org.junit.runner.RunWith; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import com.google.common.collect.ImmutableMap; import com.google.inject.Binder; import com.google.inject.binder.AnnotatedBindingBuilder; import com.google.inject.binder.LinkedBindingBuilder; import com.google.inject.multibindings.Multibinder; import com.google.inject.name.Names; import com.typesafe.config.Config; import com.typesafe.config.ConfigFactory; import com.typesafe.config.ConfigObject; import com.typesafe.config.ConfigOrigin; import com.typesafe.config.ConfigValueFactory; @RunWith(PowerMockRunner.class) @PrepareForTest({Camel.class, DefaultCamelContext.class, Multibinder.class }) public class CamelTest { private static int processors = Math.max(1, Runtime.getRuntime().availableProcessors()); Config defConfig = ConfigFactory .parseResources(getClass(), "camel.conf") .withValue("runtime.processors-plus1", ConfigValueFactory.fromAnyRef(processors + 1)) .withValue("runtime.processors-x2", ConfigValueFactory.fromAnyRef(processors * 2)) .withValue("application.tmpdir", ConfigValueFactory.fromAnyRef(System.getProperty("java.io.tmpdir"))) .withValue("file.separator", ConfigValueFactory.fromAnyRef(File.separator)) .resolve() .getConfig("camel") .withValue("x", ConfigValueFactory.fromAnyRef("X")); private MockUnit.Block onStop = unit -> { Env env = unit.get(Env.class); expect(env.lifeCycle(CamelFinalizer.class)).andReturn(env); }; @Test(expected = IllegalArgumentException.class) public void camelBadOption() throws Exception { Config camel = ConfigFactory.empty() .withValue("autoStartup", ConfigValueFactory.fromAnyRef("si")) .withValue("jmx", ConfigValueFactory.fromAnyRef("true")) .withValue("shutdown", ConfigValueFactory.fromAnyRef(ImmutableMap.builder().build())); new MockUnit(Env.class, Config.class, Binder.class) .expect(unit -> { Config config = unit.get(Config.class); expect(config.getConfig("camel")).andReturn(camel); }) .run(unit -> { new Camel() .configure(unit.get(Env.class), unit.get(Config.class), unit.get(Binder.class)); }); } @SuppressWarnings("unchecked") @Test public void defaults() throws Exception { new MockUnit(Env.class, Config.class, Binder.class) .expect(unit -> { Config config = unit.get(Config.class); expect(config.getConfig("camel")).andReturn(defConfig); ConfigOrigin origin = unit.mock(ConfigOrigin.class); expect(origin.description()).andReturn("application.conf"); ConfigObject root = unit.mock(ConfigObject.class); expect(root.origin()).andReturn(origin); expect(config.root()).andReturn(root); }) .expect(unit -> { ShutdownStrategy shutdownStrategy = unit.mock(ShutdownStrategy.class); shutdownStrategy.setTimeout(10L); shutdownStrategy.setTimeUnit(TimeUnit.SECONDS); shutdownStrategy.setShutdownRoutesInReverseOrder(true); PropertiesComponent properties = unit.mockConstructor(PropertiesComponent.class, new Class[]{String.class }, "application.conf"); properties.setIgnoreMissingLocation(true); properties.setPropertiesResolver(isA(PropertiesResolver.class)); properties.setPrefixToken("${"); properties.setSuffixToken("}"); ThreadPoolProfile threadProfile = unit.mockConstructor(ThreadPoolProfile.class); threadProfile.setId("default"); threadProfile.setDefaultProfile(true); threadProfile.setKeepAliveTime(60L); threadProfile.setMaxPoolSize(processors * 2); threadProfile.setPoolSize(processors + 1); threadProfile.setMaxQueueSize(1000); threadProfile.setRejectedPolicy(ThreadPoolRejectedPolicy.CallerRuns); threadProfile.setTimeUnit(TimeUnit.SECONDS); ExecutorServiceManager executor = unit.mock(ExecutorServiceManager.class); executor.setDefaultThreadPoolProfile(threadProfile); DefaultCamelContext ctx = unit.mockConstructor(DefaultCamelContext.class); expect(ctx.getExecutorServiceManager()).andReturn(executor); expect(ctx.getShutdownStrategy()).andReturn(shutdownStrategy); ctx.setAutoStartup(true); ctx.setShutdownRunningTask(ShutdownRunningTask.CompleteCurrentTaskOnly); ctx.setHandleFault(false); ctx.setStreamCaching(false); ctx.setTracing(false); ctx.setAllowUseOriginalMessage(false); ctx.setShutdownRoute(ShutdownRoute.Default); ctx.disableJMX(); ctx.addComponent("properties", properties); ProducerTemplate producer = unit.mock(ProducerTemplate.class); expect(ctx.createProducerTemplate()).andReturn(producer); AnnotatedBindingBuilder<ProducerTemplate> ptABB = unit .mock(AnnotatedBindingBuilder.class); ptABB.toInstance(producer); ConsumerTemplate consumer = unit.mock(ConsumerTemplate.class); expect(ctx.createConsumerTemplate()).andReturn(consumer); AnnotatedBindingBuilder<ConsumerTemplate> ctABB = unit .mock(AnnotatedBindingBuilder.class); ctABB.toInstance(consumer); AnnotatedBindingBuilder<CamelContext> ccABB = unit .mock(AnnotatedBindingBuilder.class); ccABB.toInstance(ctx); AnnotatedBindingBuilder<DefaultCamelContext> dccABB = unit .mock(AnnotatedBindingBuilder.class); dccABB.toInstance(ctx); AnnotatedBindingBuilder<CamelFinalizer> cfABB = unit .mock(AnnotatedBindingBuilder.class); cfABB.asEagerSingleton(); AnnotatedBindingBuilder<RouteBuilder> rbABB = unit .mock(AnnotatedBindingBuilder.class); rbABB.toInstance(isA(RouteBuilder.class)); Binder binder = unit.get(Binder.class); expect(binder.bind(CamelContext.class)).andReturn(ccABB); expect(binder.bind(DefaultCamelContext.class)).andReturn(dccABB); expect(binder.bind(ProducerTemplate.class)).andReturn(ptABB); expect(binder.bind(ConsumerTemplate.class)).andReturn(ctABB); expect(binder.bind(CamelFinalizer.class)).andReturn(cfABB); expect(binder.bind(RouteBuilder.class)).andReturn(rbABB); FluentProducerTemplate fproducer = unit.mock(FluentProducerTemplate.class); expect(ctx.createFluentProducerTemplate()).andReturn(fproducer); AnnotatedBindingBuilder<FluentProducerTemplate> fptABB = unit .mock(AnnotatedBindingBuilder.class); fptABB.toInstance(fproducer); expect(binder.bind(FluentProducerTemplate.class)).andReturn(fptABB); Multibinder<Object> rbMB = unit.mock(Multibinder.class); unit.mockStatic(Multibinder.class); expect(Multibinder.newSetBinder(binder, Object.class, Names.named("camel.routes"))) .andReturn(rbMB); }) .expect(onStop) .run(unit -> { new Camel() .configure(unit.get(Env.class), unit.get(Config.class), unit.get(Binder.class)); }); } @SuppressWarnings("unchecked") @Test public void withStreamCaching() throws Exception { Config camel = defConfig .withValue("streamCaching.enabled", ConfigValueFactory.fromAnyRef(true)); new MockUnit(Env.class, Config.class, Binder.class) .expect(unit -> { Config config = unit.get(Config.class); expect(config.getConfig("camel")).andReturn(camel); ConfigOrigin origin = unit.mock(ConfigOrigin.class); expect(origin.description()).andReturn("application.conf"); ConfigObject root = unit.mock(ConfigObject.class); expect(root.origin()).andReturn(origin); expect(config.root()).andReturn(root); }) .expect( unit -> { ShutdownStrategy shutdownStrategy = unit.mock(ShutdownStrategy.class); shutdownStrategy.setTimeout(10L); shutdownStrategy.setTimeUnit(TimeUnit.SECONDS); shutdownStrategy.setShutdownRoutesInReverseOrder(true); PropertiesComponent properties = unit.mockConstructor(PropertiesComponent.class, new Class[]{String.class }, "application.conf"); properties.setIgnoreMissingLocation(true); properties.setPropertiesResolver(isA(PropertiesResolver.class)); properties.setPrefixToken("${"); properties.setSuffixToken("}"); ThreadPoolProfile threadProfile = unit.mockConstructor(ThreadPoolProfile.class); threadProfile.setId("default"); threadProfile.setDefaultProfile(true); threadProfile.setKeepAliveTime(60L); threadProfile.setMaxPoolSize(processors * 2); threadProfile.setPoolSize(processors + 1); threadProfile.setMaxQueueSize(1000); threadProfile.setRejectedPolicy(ThreadPoolRejectedPolicy.CallerRuns); threadProfile.setTimeUnit(TimeUnit.SECONDS); ExecutorServiceManager executor = unit.mock(ExecutorServiceManager.class); executor.setDefaultThreadPoolProfile(threadProfile); StreamCachingStrategy streamCachingStrategy = unit.mock(StreamCachingStrategy.class); String dir = System.getProperty("java.io.tmpdir") + File.separator + "camel" + File.separator + "#uuid#"; streamCachingStrategy.setSpoolDirectory(new File(dir)); expectLastCall().times(0, 1); streamCachingStrategy.setSpoolDirectory(dir); expectLastCall().times(0, 1); streamCachingStrategy.setEnabled(true); DefaultCamelContext ctx = unit.mockConstructor(DefaultCamelContext.class); expect(ctx.getExecutorServiceManager()).andReturn(executor); expect(ctx.getShutdownStrategy()).andReturn(shutdownStrategy); expect(ctx.getStreamCachingStrategy()).andReturn(streamCachingStrategy); ctx.setAutoStartup(true); ctx.setShutdownRunningTask(ShutdownRunningTask.CompleteCurrentTaskOnly); ctx.setHandleFault(false); ctx.setStreamCaching(true); ctx.setTracing(false); ctx.setAllowUseOriginalMessage(false); ctx.setShutdownRoute(ShutdownRoute.Default); ctx.disableJMX(); ctx.addComponent("properties", properties); ProducerTemplate producer = unit.mock(ProducerTemplate.class); expect(ctx.createProducerTemplate()).andReturn(producer); AnnotatedBindingBuilder<ProducerTemplate> ptABB = unit .mock(AnnotatedBindingBuilder.class); ptABB.toInstance(producer); ConsumerTemplate consumer = unit.mock(ConsumerTemplate.class); expect(ctx.createConsumerTemplate()).andReturn(consumer); AnnotatedBindingBuilder<ConsumerTemplate> ctABB = unit .mock(AnnotatedBindingBuilder.class); ctABB.toInstance(consumer); AnnotatedBindingBuilder<CamelContext> ccABB = unit .mock(AnnotatedBindingBuilder.class); ccABB.toInstance(ctx); AnnotatedBindingBuilder<DefaultCamelContext> dccABB = unit .mock(AnnotatedBindingBuilder.class); dccABB.toInstance(ctx); AnnotatedBindingBuilder<CamelFinalizer> cfABB = unit .mock(AnnotatedBindingBuilder.class); cfABB.asEagerSingleton(); AnnotatedBindingBuilder<RouteBuilder> rbABB = unit .mock(AnnotatedBindingBuilder.class); rbABB.toInstance(isA(RouteBuilder.class)); Binder binder = unit.get(Binder.class); expect(binder.bind(CamelContext.class)).andReturn(ccABB); expect(binder.bind(DefaultCamelContext.class)).andReturn(dccABB); expect(binder.bind(ProducerTemplate.class)).andReturn(ptABB); expect(binder.bind(ConsumerTemplate.class)).andReturn(ctABB); expect(binder.bind(CamelFinalizer.class)).andReturn(cfABB); expect(binder.bind(RouteBuilder.class)).andReturn(rbABB); FluentProducerTemplate fproducer = unit.mock(FluentProducerTemplate.class); expect(ctx.createFluentProducerTemplate()).andReturn(fproducer); AnnotatedBindingBuilder<FluentProducerTemplate> fptABB = unit .mock(AnnotatedBindingBuilder.class); fptABB.toInstance(fproducer); expect(binder.bind(FluentProducerTemplate.class)).andReturn(fptABB); Multibinder<Object> rbMB = unit.mock(Multibinder.class); unit.mockStatic(Multibinder.class); expect(Multibinder.newSetBinder(binder, Object.class, Names.named("camel.routes"))) .andReturn(rbMB); }) .expect(onStop) .run(unit -> { new Camel() .configure(unit.get(Env.class), unit.get(Config.class), unit.get(Binder.class)); }); } @SuppressWarnings("unchecked") @Test public void withJmx() throws Exception { Config camel = defConfig.withValue("jmx", ConfigValueFactory.fromAnyRef(true)); new MockUnit(Env.class, Config.class, Binder.class) .expect(unit -> { Config config = unit.get(Config.class); expect(config.getConfig("camel")).andReturn(camel); ConfigOrigin origin = unit.mock(ConfigOrigin.class); expect(origin.description()).andReturn("application.conf"); ConfigObject root = unit.mock(ConfigObject.class); expect(root.origin()).andReturn(origin); expect(config.root()).andReturn(root); }) .expect(unit -> { ShutdownStrategy shutdownStrategy = unit.mock(ShutdownStrategy.class); shutdownStrategy.setTimeout(10L); shutdownStrategy.setTimeUnit(TimeUnit.SECONDS); shutdownStrategy.setShutdownRoutesInReverseOrder(true); PropertiesComponent properties = unit.mockConstructor(PropertiesComponent.class, new Class[]{String.class }, "application.conf"); properties.setIgnoreMissingLocation(true); properties.setPropertiesResolver(isA(PropertiesResolver.class)); properties.setPrefixToken("${"); properties.setSuffixToken("}"); ThreadPoolProfile threadProfile = unit.mockConstructor(ThreadPoolProfile.class); threadProfile.setId("default"); threadProfile.setDefaultProfile(true); threadProfile.setKeepAliveTime(60L); threadProfile.setMaxPoolSize(processors * 2); threadProfile.setPoolSize(processors + 1); threadProfile.setMaxQueueSize(1000); threadProfile.setRejectedPolicy(ThreadPoolRejectedPolicy.CallerRuns); threadProfile.setTimeUnit(TimeUnit.SECONDS); ExecutorServiceManager executor = unit.mock(ExecutorServiceManager.class); executor.setDefaultThreadPoolProfile(threadProfile); DefaultCamelContext ctx = unit.mockConstructor(DefaultCamelContext.class); expect(ctx.getExecutorServiceManager()).andReturn(executor); expect(ctx.getShutdownStrategy()).andReturn(shutdownStrategy); ctx.setAutoStartup(true); ctx.setShutdownRunningTask(ShutdownRunningTask.CompleteCurrentTaskOnly); ctx.setHandleFault(false); ctx.setStreamCaching(false); ctx.setTracing(false); ctx.setAllowUseOriginalMessage(false); ctx.setShutdownRoute(ShutdownRoute.Default); ctx.addComponent("properties", properties); ProducerTemplate producer = unit.mock(ProducerTemplate.class); expect(ctx.createProducerTemplate()).andReturn(producer); AnnotatedBindingBuilder<ProducerTemplate> ptABB = unit .mock(AnnotatedBindingBuilder.class); ptABB.toInstance(producer); ConsumerTemplate consumer = unit.mock(ConsumerTemplate.class); expect(ctx.createConsumerTemplate()).andReturn(consumer); AnnotatedBindingBuilder<ConsumerTemplate> ctABB = unit .mock(AnnotatedBindingBuilder.class); ctABB.toInstance(consumer); AnnotatedBindingBuilder<CamelContext> ccABB = unit .mock(AnnotatedBindingBuilder.class); ccABB.toInstance(ctx); AnnotatedBindingBuilder<DefaultCamelContext> dccABB = unit .mock(AnnotatedBindingBuilder.class); dccABB.toInstance(ctx); AnnotatedBindingBuilder<CamelFinalizer> cfABB = unit .mock(AnnotatedBindingBuilder.class); cfABB.asEagerSingleton(); AnnotatedBindingBuilder<RouteBuilder> rbABB = unit .mock(AnnotatedBindingBuilder.class); rbABB.toInstance(isA(RouteBuilder.class)); Binder binder = unit.get(Binder.class); expect(binder.bind(CamelContext.class)).andReturn(ccABB); expect(binder.bind(DefaultCamelContext.class)).andReturn(dccABB); expect(binder.bind(ProducerTemplate.class)).andReturn(ptABB); expect(binder.bind(ConsumerTemplate.class)).andReturn(ctABB); expect(binder.bind(CamelFinalizer.class)).andReturn(cfABB); expect(binder.bind(RouteBuilder.class)).andReturn(rbABB); FluentProducerTemplate fproducer = unit.mock(FluentProducerTemplate.class); expect(ctx.createFluentProducerTemplate()).andReturn(fproducer); AnnotatedBindingBuilder<FluentProducerTemplate> fptABB = unit .mock(AnnotatedBindingBuilder.class); fptABB.toInstance(fproducer); expect(binder.bind(FluentProducerTemplate.class)).andReturn(fptABB); Multibinder<Object> rbMB = unit.mock(Multibinder.class); unit.mockStatic(Multibinder.class); expect(Multibinder.newSetBinder(binder, Object.class, Names.named("camel.routes"))) .andReturn(rbMB); }) .expect(onStop) .run(unit -> { new Camel() .configure(unit.get(Env.class), unit.get(Config.class), unit.get(Binder.class)); }); } @SuppressWarnings("unchecked") @Test public void withConfigurer() throws Exception { Config camel = defConfig; new MockUnit(Env.class, Config.class, Binder.class) .expect(unit -> { Config config = unit.get(Config.class); expect(config.getConfig("camel")).andReturn(camel); ConfigOrigin origin = unit.mock(ConfigOrigin.class); expect(origin.description()).andReturn("application.conf"); ConfigObject root = unit.mock(ConfigObject.class); expect(root.origin()).andReturn(origin); expect(config.root()).andReturn(root); }) .expect(unit -> { ShutdownStrategy shutdownStrategy = unit.mock(ShutdownStrategy.class); shutdownStrategy.setTimeout(10L); shutdownStrategy.setTimeUnit(TimeUnit.SECONDS); shutdownStrategy.setShutdownRoutesInReverseOrder(true); PropertiesComponent properties = unit.mockConstructor(PropertiesComponent.class, new Class[]{String.class }, "application.conf"); properties.setIgnoreMissingLocation(true); properties.setPropertiesResolver(isA(PropertiesResolver.class)); properties.setPrefixToken("${"); properties.setSuffixToken("}"); ThreadPoolProfile threadProfile = unit.mockConstructor(ThreadPoolProfile.class); threadProfile.setId("default"); threadProfile.setDefaultProfile(true); threadProfile.setKeepAliveTime(60L); threadProfile.setMaxPoolSize(processors * 2); threadProfile.setPoolSize(processors + 1); threadProfile.setMaxQueueSize(1000); threadProfile.setRejectedPolicy(ThreadPoolRejectedPolicy.CallerRuns); threadProfile.setTimeUnit(TimeUnit.SECONDS); ExecutorServiceManager executor = unit.mock(ExecutorServiceManager.class); executor.setDefaultThreadPoolProfile(threadProfile); DefaultCamelContext ctx = unit.mockConstructor(DefaultCamelContext.class); expect(ctx.getExecutorServiceManager()).andReturn(executor); expect(ctx.getShutdownStrategy()).andReturn(shutdownStrategy); ctx.setAutoStartup(true); ctx.setShutdownRunningTask(ShutdownRunningTask.CompleteCurrentTaskOnly); ctx.setHandleFault(false); ctx.setStreamCaching(false); ctx.setTracing(false); ctx.setAllowUseOriginalMessage(false); ctx.setShutdownRoute(ShutdownRoute.Default); ctx.addComponent("properties", properties); ctx.disableJMX(); ctx.setDelayer(100L); ProducerTemplate producer = unit.mock(ProducerTemplate.class); expect(ctx.createProducerTemplate()).andReturn(producer); AnnotatedBindingBuilder<ProducerTemplate> ptABB = unit .mock(AnnotatedBindingBuilder.class); ptABB.toInstance(producer); ConsumerTemplate consumer = unit.mock(ConsumerTemplate.class); expect(ctx.createConsumerTemplate()).andReturn(consumer); AnnotatedBindingBuilder<ConsumerTemplate> ctABB = unit .mock(AnnotatedBindingBuilder.class); ctABB.toInstance(consumer); AnnotatedBindingBuilder<CamelContext> ccABB = unit .mock(AnnotatedBindingBuilder.class); ccABB.toInstance(ctx); AnnotatedBindingBuilder<DefaultCamelContext> dccABB = unit .mock(AnnotatedBindingBuilder.class); dccABB.toInstance(ctx); AnnotatedBindingBuilder<CamelFinalizer> cfABB = unit .mock(AnnotatedBindingBuilder.class); cfABB.asEagerSingleton(); AnnotatedBindingBuilder<RouteBuilder> rbABB = unit .mock(AnnotatedBindingBuilder.class); rbABB.toInstance(isA(RouteBuilder.class)); Binder binder = unit.get(Binder.class); expect(binder.bind(CamelContext.class)).andReturn(ccABB); expect(binder.bind(DefaultCamelContext.class)).andReturn(dccABB); expect(binder.bind(ProducerTemplate.class)).andReturn(ptABB); expect(binder.bind(ConsumerTemplate.class)).andReturn(ctABB); expect(binder.bind(CamelFinalizer.class)).andReturn(cfABB); expect(binder.bind(RouteBuilder.class)).andReturn(rbABB); FluentProducerTemplate fproducer = unit.mock(FluentProducerTemplate.class); expect(ctx.createFluentProducerTemplate()).andReturn(fproducer); AnnotatedBindingBuilder<FluentProducerTemplate> fptABB = unit .mock(AnnotatedBindingBuilder.class); fptABB.toInstance(fproducer); expect(binder.bind(FluentProducerTemplate.class)).andReturn(fptABB); Multibinder<Object> rbMB = unit.mock(Multibinder.class); unit.mockStatic(Multibinder.class); expect(Multibinder.newSetBinder(binder, Object.class, Names.named("camel.routes"))) .andReturn(rbMB); }) .expect(onStop) .run(unit -> { new Camel() .doWith((ctx, config) -> { ctx.setDelayer(100L); }) .configure(unit.get(Env.class), unit.get(Config.class), unit.get(Binder.class)); }); } @SuppressWarnings("unchecked") @Test(expected = IllegalStateException.class) public void withConfigurerErr() throws Exception { Config camel = defConfig; new MockUnit(Env.class, Config.class, Binder.class) .expect(unit -> { Config config = unit.get(Config.class); expect(config.getConfig("camel")).andReturn(camel); ConfigOrigin origin = unit.mock(ConfigOrigin.class); expect(origin.description()).andReturn("application.conf"); ConfigObject root = unit.mock(ConfigObject.class); expect(root.origin()).andReturn(origin); expect(config.root()).andReturn(root); }) .expect(unit -> { DefaultShutdownStrategy shutdownStrategy = unit .mockConstructor(DefaultShutdownStrategy.class); shutdownStrategy.setTimeout(10L); shutdownStrategy.setTimeUnit(TimeUnit.SECONDS); shutdownStrategy.setShutdownRoutesInReverseOrder(true); PropertiesComponent properties = unit.mockConstructor(PropertiesComponent.class, new Class[]{String.class }, "application.conf"); properties.setIgnoreMissingLocation(true); properties.setPropertiesResolver(isA(PropertiesResolver.class)); properties.setPrefixToken("${"); properties.setSuffixToken("}"); ThreadPoolProfile threadProfile = unit.mockConstructor(ThreadPoolProfile.class); threadProfile.setId("default"); threadProfile.setDefaultProfile(true); threadProfile.setKeepAliveTime(60L); threadProfile.setMaxPoolSize(processors * 2); threadProfile.setPoolSize(processors + 1); threadProfile.setMaxQueueSize(1000); threadProfile.setRejectedPolicy(ThreadPoolRejectedPolicy.CallerRuns); threadProfile.setTimeUnit(TimeUnit.SECONDS); ExecutorServiceManager executor = unit.mock(ExecutorServiceManager.class); executor.setDefaultThreadPoolProfile(threadProfile); DefaultCamelContext ctx = unit.mockConstructor(DefaultCamelContext.class); expect(ctx.getExecutorServiceManager()).andReturn(executor); expect(ctx.getShutdownStrategy()).andReturn(shutdownStrategy); ctx.setAutoStartup(true); ctx.setShutdownRunningTask(ShutdownRunningTask.CompleteCurrentTaskOnly); ctx.setHandleFault(false); ctx.setStreamCaching(false); ctx.setTracing(false); ctx.setAllowUseOriginalMessage(false); ctx.setShutdownRoute(ShutdownRoute.Default); ctx.disableJMX(); ctx.setShutdownStrategy(shutdownStrategy); ctx.addComponent("properties", properties); ProducerTemplate producer = unit.mock(ProducerTemplate.class); expect(ctx.createProducerTemplate()).andReturn(producer); AnnotatedBindingBuilder<ProducerTemplate> ptABB = unit .mock(AnnotatedBindingBuilder.class); ptABB.toInstance(producer); ConsumerTemplate consumer = unit.mock(ConsumerTemplate.class); expect(ctx.createConsumerTemplate()).andReturn(consumer); AnnotatedBindingBuilder<ConsumerTemplate> ctABB = unit .mock(AnnotatedBindingBuilder.class); ctABB.toInstance(consumer); AnnotatedBindingBuilder<CamelContext> ccABB = unit .mock(AnnotatedBindingBuilder.class); ccABB.toInstance(ctx); AnnotatedBindingBuilder<DefaultCamelContext> dccABB = unit .mock(AnnotatedBindingBuilder.class); dccABB.toInstance(ctx); AnnotatedBindingBuilder<CamelFinalizer> cfABB = unit .mock(AnnotatedBindingBuilder.class); cfABB.asEagerSingleton(); AnnotatedBindingBuilder<RouteBuilder> rbABB = unit .mock(AnnotatedBindingBuilder.class); rbABB.toInstance(isA(RouteBuilder.class)); Binder binder = unit.get(Binder.class); expect(binder.bind(CamelContext.class)).andReturn(ccABB); expect(binder.bind(DefaultCamelContext.class)).andReturn(dccABB); expect(binder.bind(ProducerTemplate.class)).andReturn(ptABB); expect(binder.bind(ConsumerTemplate.class)).andReturn(ctABB); expect(binder.bind(CamelFinalizer.class)).andReturn(cfABB); expect(binder.bind(RouteBuilder.class)).andReturn(rbABB); Multibinder<Object> rbMB = unit.mock(Multibinder.class); unit.mockStatic(Multibinder.class); expect(Multibinder.newSetBinder(binder, Object.class, Names.named("camel.routes"))) .andReturn(rbMB); }) .run(unit -> { new Camel() .doWith((ctx, config) -> { throw new IllegalStateException("intentional err"); }) .configure(unit.get(Env.class), unit.get(Config.class), unit.get(Binder.class)); }); } @SuppressWarnings("unchecked") @Test(expected = IOException.class) public void withConfigurerCheckedErr() throws Exception { Config camel = defConfig; new MockUnit(Env.class, Config.class, Binder.class) .expect(unit -> { Config config = unit.get(Config.class); expect(config.getConfig("camel")).andReturn(camel); ConfigOrigin origin = unit.mock(ConfigOrigin.class); expect(origin.description()).andReturn("application.conf"); ConfigObject root = unit.mock(ConfigObject.class); expect(root.origin()).andReturn(origin); expect(config.root()).andReturn(root); }) .expect(unit -> { DefaultShutdownStrategy shutdownStrategy = unit .mockConstructor(DefaultShutdownStrategy.class); shutdownStrategy.setTimeout(10L); shutdownStrategy.setTimeUnit(TimeUnit.SECONDS); shutdownStrategy.setShutdownRoutesInReverseOrder(true); PropertiesComponent properties = unit.mockConstructor(PropertiesComponent.class, new Class[]{String.class }, "application.conf"); properties.setIgnoreMissingLocation(true); properties.setPropertiesResolver(isA(PropertiesResolver.class)); properties.setPrefixToken("${"); properties.setSuffixToken("}"); ThreadPoolProfile threadProfile = unit.mockConstructor(ThreadPoolProfile.class); threadProfile.setId("default"); threadProfile.setDefaultProfile(true); threadProfile.setKeepAliveTime(60L); threadProfile.setMaxPoolSize(processors * 2); threadProfile.setPoolSize(processors + 1); threadProfile.setMaxQueueSize(1000); threadProfile.setRejectedPolicy(ThreadPoolRejectedPolicy.CallerRuns); threadProfile.setTimeUnit(TimeUnit.SECONDS); ExecutorServiceManager executor = unit.mock(ExecutorServiceManager.class); executor.setDefaultThreadPoolProfile(threadProfile); DefaultCamelContext ctx = unit.mockConstructor(DefaultCamelContext.class); expect(ctx.getExecutorServiceManager()).andReturn(executor); expect(ctx.getShutdownStrategy()).andReturn(shutdownStrategy); ctx.setAutoStartup(true); ctx.setShutdownRunningTask(ShutdownRunningTask.CompleteCurrentTaskOnly); ctx.setHandleFault(false); ctx.setStreamCaching(false); ctx.setTracing(false); ctx.setAllowUseOriginalMessage(false); ctx.setShutdownRoute(ShutdownRoute.Default); ctx.disableJMX(); ctx.setShutdownStrategy(shutdownStrategy); ctx.addComponent("properties", properties); ProducerTemplate producer = unit.mock(ProducerTemplate.class); expect(ctx.createProducerTemplate()).andReturn(producer); AnnotatedBindingBuilder<ProducerTemplate> ptABB = unit .mock(AnnotatedBindingBuilder.class); ptABB.toInstance(producer); ConsumerTemplate consumer = unit.mock(ConsumerTemplate.class); expect(ctx.createConsumerTemplate()).andReturn(consumer); AnnotatedBindingBuilder<ConsumerTemplate> ctABB = unit .mock(AnnotatedBindingBuilder.class); ctABB.toInstance(consumer); AnnotatedBindingBuilder<CamelContext> ccABB = unit .mock(AnnotatedBindingBuilder.class); ccABB.toInstance(ctx); AnnotatedBindingBuilder<DefaultCamelContext> dccABB = unit .mock(AnnotatedBindingBuilder.class); dccABB.toInstance(ctx); AnnotatedBindingBuilder<CamelFinalizer> cfABB = unit .mock(AnnotatedBindingBuilder.class); cfABB.asEagerSingleton(); AnnotatedBindingBuilder<RouteBuilder> rbABB = unit .mock(AnnotatedBindingBuilder.class); rbABB.toInstance(isA(RouteBuilder.class)); Binder binder = unit.get(Binder.class); expect(binder.bind(CamelContext.class)).andReturn(ccABB); expect(binder.bind(DefaultCamelContext.class)).andReturn(dccABB); expect(binder.bind(ProducerTemplate.class)).andReturn(ptABB); expect(binder.bind(ConsumerTemplate.class)).andReturn(ctABB); expect(binder.bind(CamelFinalizer.class)).andReturn(cfABB); expect(binder.bind(RouteBuilder.class)).andReturn(rbABB); Multibinder<Object> rbMB = unit.mock(Multibinder.class); unit.mockStatic(Multibinder.class); expect(Multibinder.newSetBinder(binder, Object.class, Names.named("camel.routes"))) .andReturn(rbMB); }) .run(unit -> { new Camel() .doWith((ctx, config) -> { throw new IOException("intentional err"); }) .configure(unit.get(Env.class), unit.get(Config.class), unit.get(Binder.class)); }); } @SuppressWarnings("unchecked") @Test public void withRoutes() throws Exception { Config camel = defConfig; new MockUnit(Env.class, Config.class, Binder.class) .expect(unit -> { Config config = unit.get(Config.class); expect(config.getConfig("camel")).andReturn(camel); ConfigOrigin origin = unit.mock(ConfigOrigin.class); expect(origin.description()).andReturn("application.conf"); ConfigObject root = unit.mock(ConfigObject.class); expect(root.origin()).andReturn(origin); expect(config.root()).andReturn(root); }) .expect(unit -> { ShutdownStrategy shutdownStrategy = unit.mock(ShutdownStrategy.class); shutdownStrategy.setTimeout(10L); shutdownStrategy.setTimeUnit(TimeUnit.SECONDS); shutdownStrategy.setShutdownRoutesInReverseOrder(true); PropertiesComponent properties = unit.mockConstructor(PropertiesComponent.class, new Class[]{String.class }, "application.conf"); properties.setIgnoreMissingLocation(true); properties.setPropertiesResolver(isA(PropertiesResolver.class)); properties.setPrefixToken("${"); properties.setSuffixToken("}"); ThreadPoolProfile threadProfile = unit.mockConstructor(ThreadPoolProfile.class); threadProfile.setId("default"); threadProfile.setDefaultProfile(true); threadProfile.setKeepAliveTime(60L); threadProfile.setMaxPoolSize(processors * 2); threadProfile.setPoolSize(processors + 1); threadProfile.setMaxQueueSize(1000); threadProfile.setRejectedPolicy(ThreadPoolRejectedPolicy.CallerRuns); threadProfile.setTimeUnit(TimeUnit.SECONDS); ExecutorServiceManager executor = unit.mock(ExecutorServiceManager.class); executor.setDefaultThreadPoolProfile(threadProfile); DefaultCamelContext ctx = unit.mockConstructor(DefaultCamelContext.class); expect(ctx.getExecutorServiceManager()).andReturn(executor); expect(ctx.getShutdownStrategy()).andReturn(shutdownStrategy); ctx.setAutoStartup(true); ctx.setShutdownRunningTask(ShutdownRunningTask.CompleteCurrentTaskOnly); ctx.setHandleFault(false); ctx.setStreamCaching(false); ctx.setTracing(false); ctx.setAllowUseOriginalMessage(false); ctx.setShutdownRoute(ShutdownRoute.Default); ctx.disableJMX(); ctx.addComponent("properties", properties); ctx.addRoutes(isA(RouteBuilder.class)); ProducerTemplate producer = unit.mock(ProducerTemplate.class); expect(ctx.createProducerTemplate()).andReturn(producer); AnnotatedBindingBuilder<ProducerTemplate> ptABB = unit .mock(AnnotatedBindingBuilder.class); ptABB.toInstance(producer); ConsumerTemplate consumer = unit.mock(ConsumerTemplate.class); expect(ctx.createConsumerTemplate()).andReturn(consumer); AnnotatedBindingBuilder<ConsumerTemplate> ctABB = unit .mock(AnnotatedBindingBuilder.class); ctABB.toInstance(consumer); AnnotatedBindingBuilder<CamelContext> ccABB = unit .mock(AnnotatedBindingBuilder.class); ccABB.toInstance(ctx); AnnotatedBindingBuilder<DefaultCamelContext> dccABB = unit .mock(AnnotatedBindingBuilder.class); dccABB.toInstance(ctx); AnnotatedBindingBuilder<CamelFinalizer> cfABB = unit .mock(AnnotatedBindingBuilder.class); cfABB.asEagerSingleton(); AnnotatedBindingBuilder<RouteBuilder> rbABB = unit .mock(AnnotatedBindingBuilder.class); rbABB.toInstance(isA(RouteBuilder.class)); Binder binder = unit.get(Binder.class); expect(binder.bind(CamelContext.class)).andReturn(ccABB); expect(binder.bind(DefaultCamelContext.class)).andReturn(dccABB); expect(binder.bind(ProducerTemplate.class)).andReturn(ptABB); expect(binder.bind(ConsumerTemplate.class)).andReturn(ctABB); expect(binder.bind(CamelFinalizer.class)).andReturn(cfABB); expect(binder.bind(RouteBuilder.class)).andReturn(rbABB); FluentProducerTemplate fproducer = unit.mock(FluentProducerTemplate.class); expect(ctx.createFluentProducerTemplate()).andReturn(fproducer); AnnotatedBindingBuilder<FluentProducerTemplate> fptABB = unit .mock(AnnotatedBindingBuilder.class); fptABB.toInstance(fproducer); expect(binder.bind(FluentProducerTemplate.class)).andReturn(fptABB); Multibinder<Object> rbMB = unit.mock(Multibinder.class); unit.mockStatic(Multibinder.class); expect(Multibinder.newSetBinder(binder, Object.class, Names.named("camel.routes"))) .andReturn(rbMB); }) .expect(onStop) .run(unit -> { new Camel() .routes((router, config) -> { }) .configure(unit.get(Env.class), unit.get(Config.class), unit.get(Binder.class)); }); } @SuppressWarnings("unchecked") @Test(expected = Exception.class) public void withRoutesErr() throws Exception { Config camel = defConfig; new MockUnit(Env.class, Config.class, Binder.class) .expect(unit -> { Config config = unit.get(Config.class); expect(config.getConfig("camel")).andReturn(camel); ConfigOrigin origin = unit.mock(ConfigOrigin.class); expect(origin.description()).andReturn("application.conf"); ConfigObject root = unit.mock(ConfigObject.class); expect(root.origin()).andReturn(origin); expect(config.root()).andReturn(root); }) .expect(unit -> { ShutdownStrategy shutdownStrategy = unit.mock(ShutdownStrategy.class); shutdownStrategy.setTimeout(10L); shutdownStrategy.setTimeUnit(TimeUnit.SECONDS); shutdownStrategy.setShutdownRoutesInReverseOrder(true); PropertiesComponent properties = unit.mockConstructor(PropertiesComponent.class, new Class[]{String.class }, "application.conf"); properties.setIgnoreMissingLocation(true); properties.setPropertiesResolver(isA(PropertiesResolver.class)); properties.setPrefixToken("${"); properties.setSuffixToken("}"); ThreadPoolProfile threadProfile = unit.mockConstructor(ThreadPoolProfile.class); threadProfile.setId("default"); threadProfile.setDefaultProfile(true); threadProfile.setKeepAliveTime(60L); threadProfile.setMaxPoolSize(processors * 2); threadProfile.setPoolSize(processors + 1); threadProfile.setMaxQueueSize(1000); threadProfile.setRejectedPolicy(ThreadPoolRejectedPolicy.CallerRuns); threadProfile.setTimeUnit(TimeUnit.SECONDS); ExecutorServiceManager executor = unit.mock(ExecutorServiceManager.class); executor.setDefaultThreadPoolProfile(threadProfile); DefaultCamelContext ctx = unit.mockConstructor(DefaultCamelContext.class); expect(ctx.getExecutorServiceManager()).andReturn(executor); expect(ctx.getShutdownStrategy()).andReturn(shutdownStrategy); ctx.setAutoStartup(true); ctx.setShutdownRunningTask(ShutdownRunningTask.CompleteCurrentTaskOnly); ctx.setHandleFault(false); ctx.setStreamCaching(false); ctx.setTracing(false); ctx.setAllowUseOriginalMessage(false); ctx.setShutdownRoute(ShutdownRoute.Default); ctx.addComponent("properties", properties); ctx.disableJMX(); ctx.addRoutes(unit.capture(RouteBuilder.class)); expectLastCall().andThrow(new Exception("intentional error")); ProducerTemplate producer = unit.mock(ProducerTemplate.class); expect(ctx.createProducerTemplate()).andReturn(producer); AnnotatedBindingBuilder<ProducerTemplate> ptABB = unit .mock(AnnotatedBindingBuilder.class); ptABB.toInstance(producer); ConsumerTemplate consumer = unit.mock(ConsumerTemplate.class); expect(ctx.createConsumerTemplate()).andReturn(consumer); AnnotatedBindingBuilder<ConsumerTemplate> ctABB = unit .mock(AnnotatedBindingBuilder.class); ctABB.toInstance(consumer); AnnotatedBindingBuilder<CamelContext> ccABB = unit .mock(AnnotatedBindingBuilder.class); ccABB.toInstance(ctx); AnnotatedBindingBuilder<DefaultCamelContext> dccABB = unit .mock(AnnotatedBindingBuilder.class); dccABB.toInstance(ctx); AnnotatedBindingBuilder<CamelFinalizer> cfABB = unit .mock(AnnotatedBindingBuilder.class); cfABB.asEagerSingleton(); AnnotatedBindingBuilder<RouteBuilder> rbABB = unit .mock(AnnotatedBindingBuilder.class); rbABB.toInstance(isA(RouteBuilder.class)); Binder binder = unit.get(Binder.class); expect(binder.bind(CamelContext.class)).andReturn(ccABB); expect(binder.bind(DefaultCamelContext.class)).andReturn(dccABB); expect(binder.bind(ProducerTemplate.class)).andReturn(ptABB); expect(binder.bind(ConsumerTemplate.class)).andReturn(ctABB); expect(binder.bind(CamelFinalizer.class)).andReturn(cfABB); expect(binder.bind(RouteBuilder.class)).andReturn(rbABB); Multibinder<Object> rbMB = unit.mock(Multibinder.class); unit.mockStatic(Multibinder.class); expect(Multibinder.newSetBinder(binder, Object.class, Names.named("camel.routes"))) .andReturn(rbMB); }) .expect(onStop) .run(unit -> { new Camel() .routes((router, config) -> { }).configure(unit.get(Env.class), unit.get(Config.class), unit.get(Binder.class)); }); } @SuppressWarnings("unchecked") @Test public void propertyResolver() throws Exception { Config camel = defConfig; Config cprops = ConfigFactory.empty() .withValue("x", ConfigValueFactory.fromAnyRef("X")); new MockUnit(Env.class, Config.class, Binder.class) .expect(unit -> { Config config = unit.get(Config.class); expect(config.getConfig("camel")).andReturn(camel); expect(config.entrySet()).andReturn(cprops.entrySet()); ConfigOrigin origin = unit.mock(ConfigOrigin.class); expect(origin.description()).andReturn("application.conf"); ConfigObject root = unit.mock(ConfigObject.class); expect(root.origin()).andReturn(origin); expect(config.root()).andReturn(root); }) .expect(unit -> { ShutdownStrategy shutdownStrategy = unit.mock(ShutdownStrategy.class); shutdownStrategy.setTimeout(10L); shutdownStrategy.setTimeUnit(TimeUnit.SECONDS); shutdownStrategy.setShutdownRoutesInReverseOrder(true); PropertiesComponent properties = unit.mockConstructor(PropertiesComponent.class, new Class[]{String.class }, "application.conf"); properties.setIgnoreMissingLocation(true); properties.setPropertiesResolver(unit.capture(PropertiesResolver.class)); properties.setPrefixToken("${"); properties.setSuffixToken("}"); ThreadPoolProfile threadProfile = unit.mockConstructor(ThreadPoolProfile.class); threadProfile.setId("default"); threadProfile.setDefaultProfile(true); threadProfile.setKeepAliveTime(60L); threadProfile.setMaxPoolSize(processors * 2); threadProfile.setPoolSize(processors + 1); threadProfile.setMaxQueueSize(1000); threadProfile.setRejectedPolicy(ThreadPoolRejectedPolicy.CallerRuns); threadProfile.setTimeUnit(TimeUnit.SECONDS); ExecutorServiceManager executor = unit.mock(ExecutorServiceManager.class); executor.setDefaultThreadPoolProfile(threadProfile); DefaultCamelContext ctx = unit.mockConstructor(DefaultCamelContext.class); expect(ctx.getExecutorServiceManager()).andReturn(executor); expect(ctx.getShutdownStrategy()).andReturn(shutdownStrategy); ctx.setAutoStartup(true); ctx.setShutdownRunningTask(ShutdownRunningTask.CompleteCurrentTaskOnly); ctx.setHandleFault(false); ctx.setStreamCaching(false); ctx.setTracing(false); ctx.setAllowUseOriginalMessage(false); ctx.setShutdownRoute(ShutdownRoute.Default); ctx.disableJMX(); ctx.addComponent("properties", properties); ProducerTemplate producer = unit.mock(ProducerTemplate.class); expect(ctx.createProducerTemplate()).andReturn(producer); AnnotatedBindingBuilder<ProducerTemplate> ptABB = unit .mock(AnnotatedBindingBuilder.class); ptABB.toInstance(producer); ConsumerTemplate consumer = unit.mock(ConsumerTemplate.class); expect(ctx.createConsumerTemplate()).andReturn(consumer); AnnotatedBindingBuilder<ConsumerTemplate> ctABB = unit .mock(AnnotatedBindingBuilder.class); ctABB.toInstance(consumer); AnnotatedBindingBuilder<CamelContext> ccABB = unit .mock(AnnotatedBindingBuilder.class); ccABB.toInstance(ctx); AnnotatedBindingBuilder<DefaultCamelContext> dccABB = unit .mock(AnnotatedBindingBuilder.class); dccABB.toInstance(ctx); AnnotatedBindingBuilder<CamelFinalizer> cfABB = unit .mock(AnnotatedBindingBuilder.class); cfABB.asEagerSingleton(); AnnotatedBindingBuilder<RouteBuilder> rbABB = unit .mock(AnnotatedBindingBuilder.class); rbABB.toInstance(isA(RouteBuilder.class)); Binder binder = unit.get(Binder.class); expect(binder.bind(CamelContext.class)).andReturn(ccABB); expect(binder.bind(DefaultCamelContext.class)).andReturn(dccABB); expect(binder.bind(ProducerTemplate.class)).andReturn(ptABB); expect(binder.bind(ConsumerTemplate.class)).andReturn(ctABB); expect(binder.bind(CamelFinalizer.class)).andReturn(cfABB); expect(binder.bind(RouteBuilder.class)).andReturn(rbABB); FluentProducerTemplate fproducer = unit.mock(FluentProducerTemplate.class); expect(ctx.createFluentProducerTemplate()).andReturn(fproducer); AnnotatedBindingBuilder<FluentProducerTemplate> fptABB = unit .mock(AnnotatedBindingBuilder.class); fptABB.toInstance(fproducer); expect(binder.bind(FluentProducerTemplate.class)).andReturn(fptABB); Multibinder<Object> rbMB = unit.mock(Multibinder.class); unit.mockStatic(Multibinder.class); expect(Multibinder.newSetBinder(binder, Object.class, Names.named("camel.routes"))) .andReturn(rbMB); }) .expect(onStop) .run(unit -> { new Camel() .configure(unit.get(Env.class), unit.get(Config.class), unit.get(Binder.class)); }, unit -> { Properties expected = new Properties(); expected.setProperty("x", "X"); PropertiesResolver resolver = unit.captured(PropertiesResolver.class).iterator().next(); Properties props = resolver.resolveProperties(null, true, "application.conf"); assertEquals(expected, props); }); } @SuppressWarnings("unchecked") @Test public void routes() throws Exception { Config camel = defConfig; new MockUnit(Env.class, Config.class, Binder.class) .expect(unit -> { Config config = unit.get(Config.class); expect(config.getConfig("camel")).andReturn(camel); ConfigOrigin origin = unit.mock(ConfigOrigin.class); expect(origin.description()).andReturn("application.conf"); ConfigObject root = unit.mock(ConfigObject.class); expect(root.origin()).andReturn(origin); expect(config.root()).andReturn(root); }) .expect(unit -> { ShutdownStrategy shutdownStrategy = unit.mock(ShutdownStrategy.class); shutdownStrategy.setTimeout(10L); shutdownStrategy.setTimeUnit(TimeUnit.SECONDS); shutdownStrategy.setShutdownRoutesInReverseOrder(true); PropertiesComponent properties = unit.mockConstructor(PropertiesComponent.class, new Class[]{String.class }, "application.conf"); properties.setIgnoreMissingLocation(true); properties.setPropertiesResolver(isA(PropertiesResolver.class)); properties.setPrefixToken("${"); properties.setSuffixToken("}"); ThreadPoolProfile threadProfile = unit.mockConstructor(ThreadPoolProfile.class); threadProfile.setId("default"); threadProfile.setDefaultProfile(true); threadProfile.setKeepAliveTime(60L); threadProfile.setMaxPoolSize(processors * 2); threadProfile.setPoolSize(processors + 1); threadProfile.setMaxQueueSize(1000); threadProfile.setRejectedPolicy(ThreadPoolRejectedPolicy.CallerRuns); threadProfile.setTimeUnit(TimeUnit.SECONDS); ExecutorServiceManager executor = unit.mock(ExecutorServiceManager.class); executor.setDefaultThreadPoolProfile(threadProfile); DefaultCamelContext ctx = unit.mockConstructor(DefaultCamelContext.class); expect(ctx.getExecutorServiceManager()).andReturn(executor); expect(ctx.getShutdownStrategy()).andReturn(shutdownStrategy); ctx.setAutoStartup(true); ctx.setShutdownRunningTask(ShutdownRunningTask.CompleteCurrentTaskOnly); ctx.setHandleFault(false); ctx.setStreamCaching(false); ctx.setTracing(false); ctx.setAllowUseOriginalMessage(false); ctx.setShutdownRoute(ShutdownRoute.Default); ctx.disableJMX(); ctx.addComponent("properties", properties); ProducerTemplate producer = unit.mock(ProducerTemplate.class); expect(ctx.createProducerTemplate()).andReturn(producer); AnnotatedBindingBuilder<ProducerTemplate> ptABB = unit .mock(AnnotatedBindingBuilder.class); ptABB.toInstance(producer); ConsumerTemplate consumer = unit.mock(ConsumerTemplate.class); expect(ctx.createConsumerTemplate()).andReturn(consumer); AnnotatedBindingBuilder<ConsumerTemplate> ctABB = unit .mock(AnnotatedBindingBuilder.class); ctABB.toInstance(consumer); AnnotatedBindingBuilder<CamelContext> ccABB = unit .mock(AnnotatedBindingBuilder.class); ccABB.toInstance(ctx); AnnotatedBindingBuilder<DefaultCamelContext> dccABB = unit .mock(AnnotatedBindingBuilder.class); dccABB.toInstance(ctx); AnnotatedBindingBuilder<CamelFinalizer> cfABB = unit .mock(AnnotatedBindingBuilder.class); cfABB.asEagerSingleton(); AnnotatedBindingBuilder<RouteBuilder> rbABB = unit .mock(AnnotatedBindingBuilder.class); rbABB.toInstance(isA(RouteBuilder.class)); Binder binder = unit.get(Binder.class); expect(binder.bind(CamelContext.class)).andReturn(ccABB); expect(binder.bind(DefaultCamelContext.class)).andReturn(dccABB); expect(binder.bind(ProducerTemplate.class)).andReturn(ptABB); expect(binder.bind(ConsumerTemplate.class)).andReturn(ctABB); expect(binder.bind(CamelFinalizer.class)).andReturn(cfABB); expect(binder.bind(RouteBuilder.class)).andReturn(rbABB); FluentProducerTemplate fproducer = unit.mock(FluentProducerTemplate.class); expect(ctx.createFluentProducerTemplate()).andReturn(fproducer); AnnotatedBindingBuilder<FluentProducerTemplate> fptABB = unit .mock(AnnotatedBindingBuilder.class); fptABB.toInstance(fproducer); expect(binder.bind(FluentProducerTemplate.class)).andReturn(fptABB); LinkedBindingBuilder<Object> rbMBLBB = unit.mock(LinkedBindingBuilder.class); expect(rbMBLBB.to(CamelTest.class)).andReturn(null); Multibinder<Object> rbMB = unit.mock(Multibinder.class); expect(rbMB.addBinding()).andReturn(rbMBLBB); unit.mockStatic(Multibinder.class); expect(Multibinder.newSetBinder(binder, Object.class, Names.named("camel.routes"))) .andReturn(rbMB); }) .expect(onStop) .run(unit -> { new Camel() .routes(CamelTest.class) .configure(unit.get(Env.class), unit.get(Config.class), unit.get(Binder.class)); }); } @Test public void config() { assertEquals(ConfigFactory.parseResources(getClass(), "camel.conf"), new Camel().config()); } }