Restructured the project creating a router directory for the router bundle implementa...
[xmlrouter] / impl / src / test / java / org / wamblee / xmlrouter / impl / XMLRouterTest.java
diff --git a/impl/src/test/java/org/wamblee/xmlrouter/impl/XMLRouterTest.java b/impl/src/test/java/org/wamblee/xmlrouter/impl/XMLRouterTest.java
deleted file mode 100644 (file)
index c6b1aa0..0000000
+++ /dev/null
@@ -1,548 +0,0 @@
-/*
- * Copyright 2005-2011 the original author or authors.
- * 
- * 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.wamblee.xmlrouter.impl;
-
-import static org.mockito.Matchers.*;
-import static org.mockito.Mockito.*;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.UUID;
-import java.util.logging.Handler;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import javax.xml.transform.dom.DOMSource;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.wamblee.general.SystemClock;
-import org.wamblee.xmlrouter.common.Id;
-import org.wamblee.xmlrouter.config.DocumentType;
-import org.wamblee.xmlrouter.config.Filter;
-import org.wamblee.xmlrouter.config.Transformation;
-import org.wamblee.xmlrouter.listener.EventInfo;
-import org.wamblee.xmlrouter.listener.EventListener;
-import org.wamblee.xmlrouter.listener.LoggingEventListener;
-import org.wamblee.xmlrouter.subscribe.Destination;
-
-public class XMLRouterTest {
-
-    public static class MyDestination implements Destination {
-
-        private boolean receiveResult;
-        private Collection<String> types;
-
-        public MyDestination(boolean aReceiveResult, Collection<String> aTypes) {
-            receiveResult = aReceiveResult;
-            types = aTypes;
-        }
-
-        @Override
-        public Collection<String> chooseFromTargetTypes(
-            Collection<String> aPossibleTargetTypes) {
-            return types;
-        }
-
-        @Override
-        public String getName() {
-            return "xxx";
-        }
-
-        @Override
-        public boolean receive(DOMSource aEvent) {
-            return receiveResult;
-        }
-    }
-
-    private ExtendedRouterConfig routerConfig;
-    private XMLRouterConfiguration config;
-    private XMLRouter router;
-    private DOMSource source1;
-    private DOMSource source2;
-    private DOMSource source3;
-
-    private Destination destinationSpy;
-    private Id<Destination> destinationId;
-    private EventListener listener;
-
-    @Before
-    public void setUp() {
-
-        Logger logger = Logger.getLogger(XMLRouter.class.getName());
-        setLogLevel(logger, Level.FINEST);
-
-        routerConfig = new SingleRouterConfig("routerconfig");
-        config = new XMLRouterConfigurationImpl(routerConfig);
-        EventListener logListener = new LoggingEventListener(Level.INFO);
-        listener = spy(logListener);
-        router = new XMLRouter(new SystemClock(), config, listener);
-        source1 = mock(DOMSource.class);
-        source2 = mock(DOMSource.class);
-        source3 = mock(DOMSource.class);
-    }
-
-    private void setLogLevel(Logger aLogger, Level aLevel) {
-        aLogger.setLevel(aLevel);
-        for (Handler handler : aLogger.getHandlers()) {
-            handler.setLevel(Level.FINEST);
-        }
-        Logger parent = aLogger.getParent();
-        if (parent != null) {
-            setLogLevel(parent, aLevel);
-        }
-    }
-
-    @Test
-    public void testNoInputDocumentsRegistered() {
-        Destination destination = new MyDestination(true, Arrays.asList("any"));
-        destinationSpy = spy(destination);
-
-        destinationId = router.registerDestination(destinationSpy);
-        router.publish("any", source1);
-        verify(listener).notDelivered(any(EventInfo.class));
-    }
-
-    @Test
-    public void testMisBehavingDocumentType() {
-        DocumentType type = mockDocument("docid");
-        doThrow(new RuntimeException("x")).when(type).isInstance(
-            any(DOMSource.class));
-        routerConfig.documentTypeConfig().add(type);
-        router.publish("xx", mock(DOMSource.class));
-        verify(listener).notDelivered(any(EventInfo.class));
-        // no exception should occur.
-    }
-
-    private DocumentType mockDocument(String docid) {
-        DocumentType type = mock(DocumentType.class);
-        when(type.getId()).thenReturn(new Id<DocumentType>(docid));
-        return type;
-    }
-
-    @Test
-    public void testMisBehavingFilter() {
-        registerDocumentType("any");
-        Filter filter = mockFilter("filterid");
-        doThrow(new RuntimeException("x")).when(filter).isAllowed(anyString(),
-            any(DOMSource.class));
-        routerConfig.filterConfig().add(filter);
-        router.publish("xx", mock(DOMSource.class));
-        verify(listener).notDelivered(any(EventInfo.class));
-        // no exception should occur.
-    }
-
-    private Filter mockFilter(String filterId) {
-        Filter filter = mock(Filter.class);
-        when(filter.getId()).thenReturn(new Id<Filter>(filterId));
-        return filter;
-    }
-
-    @Test
-    public void testOneDestinationNoTransformationSuccess() {
-        destinationSpy = registerDestination(true, "any");
-        registerDocumentType("any");
-
-        router.publish("any", source1);
-        verify(listener).delivered(any(EventInfo.class),
-            anyListOf(Transformation.class), anyString(), eq(true));
-        verify(destinationSpy).receive(same(source1));
-
-        // Unregister the destination.
-        router.unregisterDestination(destinationId);
-        resetMocks();
-        router.publish("any", source2);
-        verify(listener).notDelivered(any(EventInfo.class));
-        verifyNoMoreInteractions(destinationSpy);
-    }
-
-    private void resetMocks() {
-        reset(destinationSpy);
-        reset(listener);
-    }
-
-    private void registerDocumentType(String aType) {
-        DocumentType type = mockDocument(UUID.randomUUID().toString());
-        when(type.isInstance(any(DOMSource.class))).thenReturn(true);
-        when(type.getName()).thenReturn(aType);
-        routerConfig.documentTypeConfig().add(type);
-    }
-
-    private void registerDocumentType(String aType, DOMSource aSource) {
-        DocumentType type = mock(DocumentType.class);
-        when(type.isInstance(same(aSource))).thenReturn(true);
-        when(type.getName()).thenReturn(aType);
-        when(type.getId()).thenReturn(new Id<DocumentType>(aType));
-        routerConfig.documentTypeConfig().add(type);
-    }
-
-    private Destination registerDestination(boolean aResult, String... types) {
-        Destination destination = new MyDestination(aResult,
-            Arrays.asList(types));
-        Destination myspy = spy(destination);
-        destinationId = router.registerDestination(myspy);
-        return myspy;
-    }
-
-    @Test
-    public void testOneDestinationNotMatches() {
-        destinationSpy = registerDestination(true);
-        registerDocumentType("any");
-
-        router.publish("any", source1);
-        verify(listener).notDelivered(any(EventInfo.class));
-        verify(destinationSpy, never()).receive(any(DOMSource.class));
-    }
-
-    @Test
-    public void testOneDestinationThrowsException() {
-        destinationSpy = registerDestination(true, "any");
-        registerDocumentType("any");
-
-        doThrow(new RuntimeException()).when(destinationSpy).receive(
-            any(DOMSource.class));
-
-        router.publish("any", source1);
-        verify(listener).notDelivered(any(EventInfo.class));
-        verify(destinationSpy).receive(same(source1));
-    }
-
-    @Test
-    public void testOneDestinationThrowsExceptionSecondDestinationStillHandled() {
-        testOneDestinationThrowsException();
-        Destination destination2 = new MyDestination(true, Arrays.asList("any"));
-        Destination destinationSpy2 = spy(destination2);
-        Id<Destination> destinationId2 = router
-            .registerDestination(destinationSpy2);
-
-        router.publish("any", source1);
-        verify(listener).delivered(any(EventInfo.class),
-            anyListOf(Transformation.class), anyString(), eq(true));
-
-        verify(destinationSpy2).receive(same(source1));
-
-    }
-
-    @Test
-    public void testDestinationChooseFromTargetTypesThrowsException() {
-        destinationSpy = registerDestination(true, "any");
-        registerDocumentType("any");
-
-        doThrow(new RuntimeException()).when(destinationSpy)
-            .chooseFromTargetTypes((Collection<String>) anyObject());
-
-        router.publish("any", source1);
-        verify(listener).notDelivered(any(EventInfo.class));
-        verify(destinationSpy, never()).receive(same(source1));
-    }
-
-    @Test
-    public void testDestinationChooseFromTargetTypesThrowsExceptionSecondDestinationStillOk() {
-        testDestinationChooseFromTargetTypesThrowsException();
-
-        Destination destination2 = new MyDestination(true, Arrays.asList("any"));
-        Destination destinationSpy2 = spy(destination2);
-        Id<Destination> destinationId2 = router
-            .registerDestination(destinationSpy2);
-        router.publish("any", source1);
-        verify(listener).delivered(any(EventInfo.class),
-            anyListOf(Transformation.class), anyString(), eq(true));
-
-        verify(destinationSpy, never()).receive(same(source1));
-        verify(destinationSpy2).receive(same(source1));
-    }
-
-    @Test
-    public void testDestinationChooseFromTargetTypesReturnsNull() {
-        destinationSpy = registerDestination(true, "any");
-        registerDocumentType("any");
-
-        when(
-            destinationSpy
-                .chooseFromTargetTypes((Collection<String>) anyObject()))
-            .thenReturn(null);
-
-        router.publish("any", source1);
-        verify(listener).notDelivered(any(EventInfo.class));
-        verify(destinationSpy, never()).receive(same(source1));
-    }
-
-    @Test
-    public void testDestinationChooseFromTargetTypesReturnsNullSecondDestinationStillOk() {
-        testDestinationChooseFromTargetTypesReturnsNull();
-
-        Destination destination2 = new MyDestination(true, Arrays.asList("any"));
-        Destination destinationSpy2 = spy(destination2);
-        Id<Destination> destinationId2 = router
-            .registerDestination(destinationSpy2);
-        router.publish("any", source1);
-        verify(listener).delivered(any(EventInfo.class),
-            anyListOf(Transformation.class), anyString(), eq(true));
-
-        verify(destinationSpy, never()).receive(same(source1));
-        verify(destinationSpy2).receive(same(source1));
-    }
-
-    @Test
-    public void testOneTransformationOneDestination() {
-        registerDocumentType("any");
-        Transformation transformation = mock(Transformation.class);
-        when(transformation.getId())
-            .thenReturn(new Id<Transformation>("trans"));
-        when(transformation.getFromType()).thenReturn("any");
-        when(transformation.getToType()).thenReturn("bla");
-        when(transformation.transform(same(source1))).thenReturn(source2);
-        routerConfig.transformationConfig().add(transformation);
-        config.setRouterConfig(routerConfig);
-
-        Destination destination = mock(Destination.class);
-        when(
-            destination.chooseFromTargetTypes((Collection<String>) anyObject()))
-            .thenReturn(Arrays.asList("bla"));
-
-        router.registerDestination(destination);
-
-        when(destination.receive(any(DOMSource.class))).thenReturn(true);
-        router.publish("bla", source1);
-        verify(listener).delivered(any(EventInfo.class),
-            anyListOf(Transformation.class), anyString(), eq(true));
-
-        verify(transformation).transform(source1);
-        verify(destination).receive(same(source2));
-
-        // now the same when the destination rejects the event.
-        when(destination.receive(any(DOMSource.class))).thenReturn(false);
-        router.publish("bla", source1);
-        verify(listener).notDelivered(any(EventInfo.class));
-    }
-
-    @Test
-    public void testOneTransformationOneDestinationFilterRejectsDestinationDocType() {
-        registerDocumentType("any");
-
-        Transformation transformation = mock(Transformation.class);
-        when(transformation.getId())
-            .thenReturn(new Id<Transformation>("trans"));
-        when(transformation.getFromType()).thenReturn("any");
-        when(transformation.getToType()).thenReturn("bla");
-        when(transformation.transform(same(source1))).thenReturn(source2);
-        routerConfig.transformationConfig().add(transformation);
-
-        Filter filter = mock(Filter.class);
-        when(filter.getId()).thenReturn(new Id<Filter>("f"));
-        when(filter.isAllowed(anyString(), same(source2))).thenReturn(false);
-        when(filter.isAllowed(anyString(), same(source1))).thenReturn(true);
-        routerConfig.filterConfig().add(filter);
-
-        config.setRouterConfig(routerConfig);
-
-        Destination destination = mock(Destination.class);
-        when(
-            destination.chooseFromTargetTypes((Collection<String>) anyObject()))
-            .thenReturn(Arrays.asList("bla"));
-
-        router.registerDestination(destination);
-
-        when(destination.receive(any(DOMSource.class))).thenReturn(true);
-        router.publish("bla", source1);
-        verify(listener).notDelivered(any(EventInfo.class));
-
-        verify(transformation).transform(source1);
-        verify(destination, never()).receive(any(DOMSource.class));
-    }
-
-    @Test
-    public void testMisbehavingTransformationOneDestination() {
-        registerDocumentType("any");
-        Transformation transformation = mock(Transformation.class);
-        when(transformation.getId())
-            .thenReturn(new Id<Transformation>("trans"));
-        when(transformation.getFromType()).thenReturn("any");
-        when(transformation.getToType()).thenReturn("bla");
-        doThrow(new RuntimeException("x")).when(transformation).transform(
-            same(source1));
-        routerConfig.transformationConfig().add(transformation);
-
-        Destination destination = mock(Destination.class);
-        when(
-            destination.chooseFromTargetTypes((Collection<String>) anyObject()))
-            .thenReturn(Arrays.asList("bla"));
-
-        router.registerDestination(destination);
-
-        when(destination.receive(any(DOMSource.class))).thenReturn(true);
-        router.publish("bla", source1);
-        verify(listener).notDelivered(any(EventInfo.class));
-    }
-
-    private Transformation createTransformation(String aFrom, String aTo,
-        DOMSource aSource, DOMSource aTarget) {
-        Transformation transformation = mock(Transformation.class);
-        when(transformation.getId()).thenReturn(
-            new Id<Transformation>(UUID.randomUUID().toString()));
-        when(transformation.getFromType()).thenReturn(aFrom);
-        when(transformation.getToType()).thenReturn(aTo);
-        when(transformation.transform(same(aSource))).thenReturn(aTarget);
-        return transformation;
-    }
-
-    @Test
-    public void testOneTransformationReturnsNull() {
-        registerDocumentType("any");
-        Transformation transformation = createTransformation("any", "bla",
-            source1, null);
-
-        routerConfig.transformationConfig().add(transformation);
-        config.setRouterConfig(routerConfig);
-        Destination destination = mock(Destination.class);
-        when(
-            destination.chooseFromTargetTypes((Collection<String>) anyObject()))
-            .thenReturn(Arrays.asList("bla"));
-        router.registerDestination(destination);
-
-        router.publish("bla", source1);
-        verify(listener).notDelivered(any(EventInfo.class));
-
-        verify(transformation).transform(source1);
-        verify(destination, never()).receive(any(DOMSource.class));
-
-        // add second transformation that behaves normally
-        Transformation transformation2 = createTransformation("any", "bla2",
-            source1, source2);
-
-        routerConfig.transformationConfig().add(transformation2);
-        config.setRouterConfig(routerConfig);
-        when(
-            destination.chooseFromTargetTypes((Collection<String>) anyObject()))
-            .thenReturn(Arrays.asList("bla", "bla2"));
-
-        reset(transformation);
-        when(transformation.getId())
-            .thenReturn(new Id<Transformation>("trans"));
-        when(transformation.getFromType()).thenReturn("any");
-        when(transformation.getToType()).thenReturn("bla");
-        when(transformation.transform(same(source1))).thenReturn(null);
-
-        when(destination.receive(any(DOMSource.class))).thenReturn(true);
-        router.publish("bla", source1);
-        verify(listener).delivered(any(EventInfo.class),
-            anyListOf(Transformation.class), anyString(), eq(true));
-
-        verify(transformation).transform(source1);
-        verify(transformation2).transform(source1);
-
-        verify(destination).receive(same(source2));
-
-    }
-
-    @Test
-    public void testChooseMultipleDestinationsOneType() {
-        Destination dest1 = registerDestination(true, "any");
-        Destination dest2 = registerDestination(true, "any");
-        registerDocumentType("any");
-
-        router.publish("source", source1);
-        verify(listener, times(2)).delivered(any(EventInfo.class),
-            anyListOf(Transformation.class), anyString(), eq(true));
-
-        verify(dest1).receive(same(source1));
-        verify(dest2).receive(same(source1));
-    }
-
-    @Test
-    public void testMultipleDeliveryToOneDestination() {
-        Destination dest = registerDestination(true, "any", "other");
-        registerDocumentType("any", source1);
-        registerDocumentType("other", source2);
-        Transformation transformation = createTransformation("any", "other",
-            source1, source2);
-        routerConfig.transformationConfig().add(transformation);
-        config.setRouterConfig(routerConfig);
-
-        router.publish("source", source1);
-        verify(listener, times(2)).delivered(any(EventInfo.class),
-            anyListOf(Transformation.class), anyString(), eq(true));
-
-        verify(dest).receive(same(source1));
-        verify(dest).receive(same(source2));
-    }
-
-    @Test
-    public void testMultipleTransformations() {
-        Destination dest = registerDestination(true, "other");
-        registerDocumentType("any", source1);
-        registerDocumentType("other", source3);
-
-        Transformation t1 = createTransformation("any", "intermediate",
-            source1, source2);
-        routerConfig.transformationConfig().add(t1);
-        Transformation t2 = createTransformation("intermediate", "other",
-            source2, source3);
-        routerConfig.transformationConfig().add(t2);
-        config.setRouterConfig(routerConfig);
-
-        router.publish("source", source1);
-        verify(listener).delivered(any(EventInfo.class),
-            anyListOf(Transformation.class), anyString(), eq(true));
-
-        verify(dest).receive(same(source3));
-    }
-
-    @Test
-    public void testMultipleTransformationsFilterRejectsIntermediateDocument() {
-        Destination dest = registerDestination(true, "other");
-        registerDocumentType("any", source1);
-        registerDocumentType("other", source3);
-
-        Transformation t1 = createTransformation("any", "intermediate",
-            source1, source2);
-        routerConfig.transformationConfig().add(t1);
-        Transformation t2 = createTransformation("intermediate", "other",
-            source2, source3);
-        routerConfig.transformationConfig().add(t2);
-        config.setRouterConfig(routerConfig);
-
-        Filter filter = mock(Filter.class);
-        when(filter.getId()).thenReturn(new Id<Filter>("f"));
-        when(filter.isAllowed(anyString(), same(source1))).thenReturn(true);
-        when(filter.isAllowed(anyString(), same(source2))).thenReturn(false);
-        when(filter.isAllowed(anyString(), same(source3))).thenReturn(true);
-        routerConfig.filterConfig().add(filter);
-
-        router.publish("source", source1);
-        verify(listener).notDelivered(any(EventInfo.class));
-        verify(dest, never()).receive(any(DOMSource.class));
-    }
-
-    @Test
-    public void testDestinationGivesError() {
-        Destination destination = mock(Destination.class);
-        when(destination.getName()).thenReturn("name");
-        when(destination.chooseFromTargetTypes(anyCollectionOf(String.class)))
-            .thenReturn(Arrays.asList("any"));
-        doThrow(new RuntimeException("x")).when(destination).receive(
-            any(DOMSource.class));
-        router.registerDestination(destination);
-
-        registerDocumentType("any");
-
-        router.publish("source", source1);
-
-        verify(listener).delivered(any(EventInfo.class),
-            anyListOf(Transformation.class), anyString(), eq(false));
-
-    }
-}