From 2a296e20b069d6454c153f63ecd577f4959c662f Mon Sep 17 00:00:00 2001 From: Nelson Tavares de Sousa <stu103017@mail.uni-kiel.de> Date: Tue, 28 Oct 2014 17:00:27 +0100 Subject: [PATCH] First version of multipleConfigs()-test --- .../java/teetime/framework/FileSearcher.java | 8 +++- .../framework/pipe/PipeFactoryLoader.java | 13 ++++-- .../framework/pipe/PipeFactoryRegistry.java | 8 ++-- .../teetime/framework/FileSearcherTest.java | 46 ++++++++++++++++--- 4 files changed, 60 insertions(+), 15 deletions(-) diff --git a/src/main/java/teetime/framework/FileSearcher.java b/src/main/java/teetime/framework/FileSearcher.java index adce07e3..016cdf2f 100644 --- a/src/main/java/teetime/framework/FileSearcher.java +++ b/src/main/java/teetime/framework/FileSearcher.java @@ -6,8 +6,14 @@ import java.util.ArrayList; import java.util.Enumeration; import java.util.List; -public class FileSearcher { +public final class FileSearcher { + private FileSearcher() { + + }; + + @SuppressWarnings("PMD.LawOfDemeter") + // LawOfDemeter not solvable in this case public static List<URL> loadResources(final String name) throws IOException { final List<URL> list = new ArrayList<URL>(); diff --git a/src/main/java/teetime/framework/pipe/PipeFactoryLoader.java b/src/main/java/teetime/framework/pipe/PipeFactoryLoader.java index 54cf5e29..cd39828f 100644 --- a/src/main/java/teetime/framework/pipe/PipeFactoryLoader.java +++ b/src/main/java/teetime/framework/pipe/PipeFactoryLoader.java @@ -5,6 +5,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; +import java.util.ArrayList; import java.util.LinkedList; import java.util.List; @@ -51,9 +52,8 @@ public class PipeFactoryLoader { return pipeFactories; } - public static List<IPipeFactory> mergeConfigFiles(final String configFileName) { + public static List<IPipeFactory> loadPipefactoriesFromClasspath(final String configFileName) { - List<IPipeFactory> pipeFactories = new LinkedList<IPipeFactory>(); List<URL> files = null; try { @@ -61,16 +61,21 @@ public class PipeFactoryLoader { } catch (IOException e) { throw new IllegalStateException(e); } + return mergeFiles(files); + } + + public static List<IPipeFactory> mergeFiles(final List<URL> files) { + ArrayList<IPipeFactory> list = new ArrayList<IPipeFactory>(); for (URL url : files) { try { InputStream is = url.openStream(); - pipeFactories.addAll(loadFromStream(is)); + list.addAll(loadFromStream(is)); is.close(); } catch (IOException e) { throw new IllegalStateException(e); } } - return pipeFactories; + return list; } } diff --git a/src/main/java/teetime/framework/pipe/PipeFactoryRegistry.java b/src/main/java/teetime/framework/pipe/PipeFactoryRegistry.java index b829645b..973462b0 100644 --- a/src/main/java/teetime/framework/pipe/PipeFactoryRegistry.java +++ b/src/main/java/teetime/framework/pipe/PipeFactoryRegistry.java @@ -14,7 +14,7 @@ import org.slf4j.LoggerFactory; * To get a PipeFactory instance, call {@link #getPipeFactory(ThreadCommunication, PipeOrdering, boolean)}. * */ -public class PipeFactoryRegistry { +public final class PipeFactoryRegistry { private static final Logger LOGGER = LoggerFactory.getLogger(PipeFactoryRegistry.class); @@ -45,10 +45,10 @@ public class PipeFactoryRegistry { /** * The singleton instance of PipeFactoryRegistry */ - public static PipeFactoryRegistry INSTANCE = new PipeFactoryRegistry(); + public static PipeFactoryRegistry INSTANCE = new PipeFactoryRegistry("pipe-factories.conf"); - private PipeFactoryRegistry() { - List<IPipeFactory> pipeFactories = PipeFactoryLoader.mergeConfigFiles("pipe-factories.conf"); + private PipeFactoryRegistry(final String configFileName) { + List<IPipeFactory> pipeFactories = PipeFactoryLoader.loadPipefactoriesFromClasspath(configFileName); for (IPipeFactory pipeFactory : pipeFactories) { this.register(pipeFactory); } diff --git a/src/test/java/teetime/framework/FileSearcherTest.java b/src/test/java/teetime/framework/FileSearcherTest.java index 44729d09..5caf5d57 100644 --- a/src/test/java/teetime/framework/FileSearcherTest.java +++ b/src/test/java/teetime/framework/FileSearcherTest.java @@ -5,6 +5,7 @@ import java.io.File; import java.io.FileReader; import java.io.IOException; import java.net.URL; +import java.util.ArrayList; import java.util.List; import org.junit.Assert; @@ -12,6 +13,7 @@ import org.junit.Test; import teetime.framework.pipe.IPipeFactory; import teetime.framework.pipe.PipeFactoryLoader; +import teetime.framework.pipe.PipeFactoryRegistry; public class FileSearcherTest { @@ -35,24 +37,56 @@ public class FileSearcherTest { @Test public void emptyConfig() throws IOException { - List<IPipeFactory> list = PipeFactoryLoader.mergeConfigFiles("data/empty-test.conf"); + List<IPipeFactory> list = PipeFactoryLoader.loadPipefactoriesFromClasspath("data/empty-test.conf"); Assert.assertEquals(true, list.isEmpty()); } @Test public void singleConfig() throws IOException { - List<IPipeFactory> list = PipeFactoryLoader.mergeConfigFiles("pipe-factories.conf"); + List<IPipeFactory> list = PipeFactoryLoader.loadPipefactoriesFromClasspath("pipe-factories.conf"); int lines = this.countLines(new File("conf/pipe-factories.conf")); Assert.assertEquals(lines, list.size()); } + @Test + public void multipleConfigs() throws IOException { + List<URL> files = new ArrayList<URL>(); + File pipeConfig = new File("conf/pipe-factories.conf"); + File testConfig = new File("src/test/resources/data/normal-test.conf"); + files.add(testConfig.toURI().toURL()); + files.add(pipeConfig.toURI().toURL()); + List<IPipeFactory> pipeFactories = PipeFactoryLoader.mergeFiles(files); + + ArrayList<String> contents = readConf(pipeConfig); + contents.addAll(readConf(testConfig)); + + // Check if all read factories are contained in one of the files + for (IPipeFactory iPipeFactory : pipeFactories) { + Assert.assertTrue(contents.indexOf(iPipeFactory.getClass().getCanonicalName()) != -1); + } + + PipeFactoryRegistry pipeRegistry = PipeFactoryRegistry.INSTANCE; + } + + @SuppressWarnings("PMD.DataflowAnomalyAnalysis") private int countLines(final File fileName) throws IOException { - BufferedReader r = new BufferedReader(new FileReader(fileName)); + BufferedReader fileReader = new BufferedReader(new FileReader(fileName)); int lines = 0; - while (r.readLine() != null) { - lines++; + while (fileReader.readLine() != null) { // TODO: Finally + lines = lines + 1; } - r.close(); + fileReader.close(); return lines; } + + private ArrayList<String> readConf(final File fileName) throws IOException { + BufferedReader fileReader = new BufferedReader(new FileReader(fileName)); + ArrayList<String> list = new ArrayList<String>(); + String line; + while ((line = fileReader.readLine()) != null) { + list.add(line); + } + fileReader.close(); + return list; + } } -- GitLab