From 6c41c1cabffcc509c5b736f73578930808f6616f Mon Sep 17 00:00:00 2001 From: Erik Brakkee Date: Mon, 8 Aug 2011 22:57:25 +0200 Subject: [PATCH] XMLRouterConfigService test added. --- .../xmlrouter/impl/SingleRouterConfig.java | 11 +- .../impl/XMLRouterConfigService.java | 47 +++++-- .../impl/XMLRouterConfigServiceTest.java | 120 ++++++++++++++++++ .../xmlrouter/impl/XMLRouterFunctionTest.java | 2 +- 4 files changed, 166 insertions(+), 14 deletions(-) create mode 100644 impl/src/test/java/org/wamblee/xmlrouter/impl/XMLRouterConfigServiceTest.java diff --git a/impl/src/main/java/org/wamblee/xmlrouter/impl/SingleRouterConfig.java b/impl/src/main/java/org/wamblee/xmlrouter/impl/SingleRouterConfig.java index 1e9dd86..f0bf090 100644 --- a/impl/src/main/java/org/wamblee/xmlrouter/impl/SingleRouterConfig.java +++ b/impl/src/main/java/org/wamblee/xmlrouter/impl/SingleRouterConfig.java @@ -40,27 +40,28 @@ public class SingleRouterConfig implements ExtendedRouterConfig { /** * Constructs a router configuration. * - * @param aSequenceNumberGenerator - * Sequence number generator to use. + * @param aId + * Unique id for this configuration. */ public SingleRouterConfig(Id aId) { id = aId; documentTypes = new ConfigImpl(new Id( - "documentTypes")) { + aId.getId() + ".documenttypes")) { @Override public DocumentType wrap(String aPrefix, DocumentType aT) { return new RobustDocumentType(aPrefix, aT); } }; transformations = new ConfigImpl(new Id( - "transformations")) { + aId.getId() + ".transformations")) { @Override public Transformation wrap(String aPrefix, Transformation aTransformation) { return new RobustTransformation(aPrefix, aTransformation); } }; - filters = new ConfigImpl(new Id("filters")) { + filters = new ConfigImpl(new Id(aId.getId() + + ".filters")) { @Override public Filter wrap(String aPrefix, Filter aFilter) { return new RobustFilter(aPrefix, aFilter); diff --git a/impl/src/main/java/org/wamblee/xmlrouter/impl/XMLRouterConfigService.java b/impl/src/main/java/org/wamblee/xmlrouter/impl/XMLRouterConfigService.java index 203e56f..cd19972 100644 --- a/impl/src/main/java/org/wamblee/xmlrouter/impl/XMLRouterConfigService.java +++ b/impl/src/main/java/org/wamblee/xmlrouter/impl/XMLRouterConfigService.java @@ -19,8 +19,12 @@ import java.util.concurrent.atomic.AtomicLong; import org.wamblee.xmlrouter.common.Id; import org.wamblee.xmlrouter.config.Config; +import org.wamblee.xmlrouter.config.ConfigException; +import org.wamblee.xmlrouter.config.DocumentType; +import org.wamblee.xmlrouter.config.Filter; import org.wamblee.xmlrouter.config.RouterConfig; import org.wamblee.xmlrouter.config.RouterConfigService; +import org.wamblee.xmlrouter.config.Transformation; // TODO pass unique id of config service in the constructor to allow multiple instances with // unique ids (ServiceFactory) @@ -33,30 +37,58 @@ import org.wamblee.xmlrouter.config.RouterConfigService; */ public class XMLRouterConfigService implements RouterConfigService { + private String application; private AtomicLong sequence; private XMLRouterConfiguration config; private Config routerConfigs; - public XMLRouterConfigService(XMLRouterConfiguration aConfig) { + public XMLRouterConfigService(String aApplication, + XMLRouterConfiguration aConfig) { + application = aApplication; sequence = new AtomicLong(1L); config = aConfig; - routerConfigs = new ConfigImpl(new Id("config")) { - public RouterConfig wrap(String aPrefix, RouterConfig aT) { - return aT; + routerConfigs = new ConfigImpl(new Id( + aApplication)) { + public RouterConfig wrap(final String aPrefix, final RouterConfig aT) { + return new RouterConfig() { + @Override + public Id getId() { + return new Id(aT.getId().toString()); + } + + @Override + public Config documentTypeConfig() { + return aT.documentTypeConfig(); + } + + @Override + public Config filterConfig() { + return aT.filterConfig(); + } + + @Override + public Config transformationConfig() { + return aT.transformationConfig(); + } + }; } }; } @Override public RouterConfig emptyConfig(String aId) { - // TODO check AP{ impacts. - return new SingleRouterConfig(new Id(aId)); + return new SingleRouterConfig(new Id(application + "." + + aId)); } @Override public void apply(RouterConfig aConfig, Id aOldConfig) { if (aOldConfig != null) { - routerConfigs.remove(aOldConfig); + if (!routerConfigs.remove(new Id(application + "." + + aOldConfig.getId()))) { + throw new ConfigException("Unknown routerconfig '" + + aOldConfig + "'"); + } } routerConfigs.add(aConfig); update(); @@ -73,5 +105,4 @@ public class XMLRouterConfigService implements RouterConfigService { new Id("routerconfig"), routerConfigs.values()); config.setRouterConfig(newconfig); } - } diff --git a/impl/src/test/java/org/wamblee/xmlrouter/impl/XMLRouterConfigServiceTest.java b/impl/src/test/java/org/wamblee/xmlrouter/impl/XMLRouterConfigServiceTest.java new file mode 100644 index 0000000..4086fa3 --- /dev/null +++ b/impl/src/test/java/org/wamblee/xmlrouter/impl/XMLRouterConfigServiceTest.java @@ -0,0 +1,120 @@ +/* + * 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 junit.framework.Assert.*; +import static org.mockito.Mockito.*; + +import java.util.List; + +import org.junit.Before; +import org.junit.Test; +import org.mockito.ArgumentCaptor; +import org.wamblee.xmlrouter.common.Id; +import org.wamblee.xmlrouter.config.ConfigException; +import org.wamblee.xmlrouter.config.DocumentType; +import org.wamblee.xmlrouter.config.Filter; +import org.wamblee.xmlrouter.config.RouterConfig; +import org.wamblee.xmlrouter.config.Transformation; + +public class XMLRouterConfigServiceTest { + + private XMLRouterConfiguration config; + private ArgumentCaptor captor; + private XMLRouterConfigService svc; + + @Before + public void setUp() { + config = mock(XMLRouterConfiguration.class); + captor = ArgumentCaptor.forClass(ExtendedRouterConfig.class); + svc = new XMLRouterConfigService("myapp", config); + } + + @Test + public void testPrefixingOfConfigItems() { + RouterConfig routerConfig = createRouterConfig("id", ""); + + svc.apply(routerConfig, null); + + verifyResults(""); + } + + private void verifyResults(String aSuffix) { + verify(config).setRouterConfig(captor.capture()); + RouterConfig received = captor.getValue(); + + List docTypes = received.documentTypeConfig().values(); + assertEquals(1, docTypes.size()); + assertEquals("myapp.id.documenttypes.doctype" + aSuffix, docTypes + .get(0).getId().toString()); + + List transformations = received.transformationConfig() + .values(); + assertEquals(1, transformations.size()); + assertEquals("myapp.id.transformations.t1" + aSuffix, transformations + .get(0).getId().toString()); + + List filters = received.filterConfig().values(); + assertEquals(1, filters.size()); + assertEquals("myapp.id.filters.f1" + aSuffix, filters.get(0).getId() + .toString()); + } + + private RouterConfig createRouterConfig(String routerConfigId, + String aSuffix) { + RouterConfig routerConfig = svc.emptyConfig(routerConfigId); + + DocumentType type = mock(DocumentType.class); + when(type.getName()).thenReturn("doctype" + aSuffix); + when(type.getId()) + .thenReturn(new Id("doctype" + aSuffix)); + + Transformation trans = mock(Transformation.class); + when(trans.getId()).thenReturn(new Id("t1" + aSuffix)); + + Filter filter = mock(Filter.class); + when(filter.getId()).thenReturn(new Id("f1" + aSuffix)); + + routerConfig.documentTypeConfig().add(type); + routerConfig.transformationConfig().add(trans); + routerConfig.filterConfig().add(filter); + return routerConfig; + } + + @Test(expected = ConfigException.class) + public void testReplaceWithoutIndicatingOldConfig() { + RouterConfig routerConfig1 = createRouterConfig("id", ""); + + svc.apply(routerConfig1, null); + RouterConfig routerConfig2 = createRouterConfig("id", ""); + + svc.apply(routerConfig2, null); + } + + @Test + public void testReplaceCorrectly() { + RouterConfig routerConfig1 = createRouterConfig("id", ""); + + svc.apply(routerConfig1, null); + RouterConfig routerConfig2 = createRouterConfig("id", "suffix"); + + reset(config); + svc.apply(routerConfig2, new Id("id")); + + verifyResults("suffix"); + } + +} diff --git a/impl/src/test/java/org/wamblee/xmlrouter/impl/XMLRouterFunctionTest.java b/impl/src/test/java/org/wamblee/xmlrouter/impl/XMLRouterFunctionTest.java index bfb2b41..d7c504e 100644 --- a/impl/src/test/java/org/wamblee/xmlrouter/impl/XMLRouterFunctionTest.java +++ b/impl/src/test/java/org/wamblee/xmlrouter/impl/XMLRouterFunctionTest.java @@ -53,7 +53,7 @@ public class XMLRouterFunctionTest { EventListener logListener = new LoggingEventListener(Level.INFO); listener = spy(logListener); routerService = new XMLRouter(new SystemClock(), config, listener); - configService = new XMLRouterConfigService(config); + configService = new XMLRouterConfigService("app", config); source1 = mock(DOMSource.class); source2 = mock(DOMSource.class); -- 2.31.1