/*
* 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.runtime.core.routing.outbound;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.mockito.Mockito.mock;
import org.mule.runtime.core.api.Event;
import org.mule.runtime.api.exception.MuleException;
import org.mule.runtime.core.api.processor.Processor;
import org.mule.runtime.core.api.source.MessageSource;
import org.mule.tck.junit4.AbstractMuleContextTestCase;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
public class OutboundRouterTestCase extends AbstractMuleContextTestCase {
@Test
public void testAddGoodProcessor() throws Exception {
AbstractOutboundRouter router = new DummyOutboundRouter();
Processor processor = getTestMessageProcessor();
router.addRoute(processor);
assertNotNull(router.getRoutes());
assertTrue(router.getRoutes().contains(processor));
}
private Processor getTestMessageProcessor() {
return mock(Processor.class);
}
@Test
public void testSetGoodProcessors() throws Exception {
List<Processor> list = new ArrayList<Processor>();
list.add(getTestMessageProcessor());
list.add(getTestMessageProcessor());
AbstractOutboundRouter router = new DummyOutboundRouter();
assertNotNull(router.getRoutes());
assertEquals(0, router.getRoutes().size());
router.addRoute(getTestMessageProcessor());
assertEquals(1, router.getRoutes().size());
router.setRoutes(list);
assertNotNull(router.getRoutes());
assertEquals(2, router.getRoutes().size());
}
@Test
@SuppressWarnings({"rawtypes", "unchecked"})
public void testSetBadProcessors() throws Exception {
List list = new ArrayList();
list.add(mock(MessageSource.class));
list.add(getTestMessageProcessor());
AbstractOutboundRouter router = new DummyOutboundRouter();
try {
router.setRoutes(list);
fail("Invalid endpoint: Expecting an exception");
} catch (Exception e) {
assertEquals(ClassCastException.class, e.getClass());
}
}
@Test
@SuppressWarnings({"rawtypes", "unchecked"})
public void testSetBad2Processors() throws Exception {
List list = new ArrayList();
list.add(getTestMessageProcessor());
list.add(mock(MessageSource.class));
AbstractOutboundRouter router = new DummyOutboundRouter();
try {
router.setRoutes(list);
fail("Invalid endpoint: Expecting an exception");
} catch (Exception e) {
assertEquals(ClassCastException.class, e.getClass());
}
}
private static class DummyOutboundRouter extends AbstractOutboundRouter {
@Override
public boolean isMatch(Event event, Event.Builder builder) throws MuleException {
return false;
}
@Override
protected Event route(Event event) throws MuleException {
return null;
}
}
}