/* * Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com * The software in this package is published under the terms of the CPAL v1.0 * license, a copy of which has been included with this distribution in the * LICENSE.txt file. */ package org.mule.test.module.extension.nb; import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; import static org.junit.rules.ExpectedException.none; import static org.mule.runtime.module.extension.internal.util.MuleExtensionUtils.getInitialiserEvent; import static org.mule.test.marvel.ironman.IronManOperations.FLIGHT_PLAN; import static org.mule.test.marvel.model.MissileProofVillain.MISSILE_PROOF; import static org.mule.test.marvel.model.Villain.KABOOM; import static org.mule.test.module.extension.internal.util.ExtensionsTestUtils.getConfigurationInstanceFromRegistry; import org.mule.runtime.core.api.construct.Pipeline; import org.mule.runtime.core.api.processor.Processor; import org.mule.runtime.core.exception.MessagingException; import org.mule.test.marvel.ironman.IronMan; import org.mule.test.marvel.model.MissileProofVillain; import org.mule.test.marvel.model.Villain; import org.mule.test.module.extension.AbstractExtensionFunctionalTestCase; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import org.mockito.ArgumentMatcher; public class NonBlockingOperationsTestCase extends AbstractExtensionFunctionalTestCase { @Rule public ExpectedException expectedException = none(); @Override protected String getConfigFile() { return "iron-man-config.xml"; } @Test public void nonBlockingConnectedOperation() throws Exception { fireMissileAndAssert("fireMissile"); } @Test public void failingNonBlockingConnectedOperation() throws Exception { Processor operation = ((Pipeline) getFlowConstruct("fireMissile")).getMessageProcessors().get(1); expectedException.expect(instanceOf(MessagingException.class)); expectedException.expect(new ArgumentMatcher<Object>() { @Override public boolean matches(Object o) { return ((MessagingException) o).getFailingMessageProcessor() == operation; } }); expectedException.expectMessage(MISSILE_PROOF); expectedException.expectCause(instanceOf(UnsupportedOperationException.class)); Villain villain = new MissileProofVillain(); flowRunner("fireMissile").withPayload(villain).run(); assertThat(villain.isAlive(), is(true)); } @Test public void nonBlockingOperationReconnection() throws Exception { fireMissileAndAssert("warMachineFireMissile"); IronMan warMachine = getIronMan("warMachine"); assertThat(warMachine.getMissilesFired(), is(2)); } @Test public void voidNonBlockingOperation() throws Exception { IronMan ironMan = getIronMan("ironMan"); flowRunner("computeFlightPlan").run(); assertThat(ironMan.getFlightPlan(), is(FLIGHT_PLAN)); } private IronMan getIronMan(String name) throws Exception { return (IronMan) getConfigurationInstanceFromRegistry(name, getInitialiserEvent(), muleContext).getValue(); } private void fireMissileAndAssert(String flowName) throws Exception { Villain villain = new Villain(); String result = (String) flowRunner(flowName) .withPayload(villain) .run().getMessage().getPayload().getValue(); assertThat(villain.isAlive(), is(false)); assertThat(result, is(KABOOM)); } }