From f866ca44f9f88dce6d26114399cd54237c063f3f Mon Sep 17 00:00:00 2001 From: LO Kam Tao Leo Date: Sun, 16 Oct 2022 18:28:55 +0100 Subject: [PATCH] Basic unit test --- .gitignore | 1 + .idea/workspace.xml | 70 ++++++++++++++++- src/main/java/org/leolo/nrdatad/App.java | 25 ++++++- .../org/leolo/nrdatad/ConfigurationManager.java | 16 +--- src/main/resources/log4j2.xml | 2 +- src/test/java/org/leolo/AppTest.java | 20 ----- src/test/java/org/leolo/nrdatad/AppTest.java | 19 +++++ .../java/org/leolo/nrdatad/ConfigurationTest.java | 87 ++++++++++++++++++++++ 8 files changed, 200 insertions(+), 40 deletions(-) delete mode 100644 src/test/java/org/leolo/AppTest.java create mode 100644 src/test/java/org/leolo/nrdatad/AppTest.java create mode 100644 src/test/java/org/leolo/nrdatad/ConfigurationTest.java diff --git a/.gitignore b/.gitignore index 735d8bd..f712fe6 100644 --- a/.gitignore +++ b/.gitignore @@ -40,3 +40,4 @@ build/ ### Configuration file /nrdatad.conf ri_log* +test-*.tmp diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 69aafa7..952647c 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -5,11 +5,13 @@ - - + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -76,7 +138,7 @@ diff --git a/src/main/java/org/leolo/nrdatad/App.java b/src/main/java/org/leolo/nrdatad/App.java index 7c2fe65..e9131d7 100644 --- a/src/main/java/org/leolo/nrdatad/App.java +++ b/src/main/java/org/leolo/nrdatad/App.java @@ -5,13 +5,15 @@ import org.apache.commons.cli.*; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import java.io.IOException; + /** * Hello world! * */ public class App { - Logger logger = LogManager.getLogger(); + Logger log = LogManager.getLogger(); public static void main( String[] args ) { Option confFile = Option.builder() .required(false) @@ -35,7 +37,24 @@ public class App { } private void run(String configPath){ - logger.always().log("System Started."); - ConfigurationManager.getInstance().loadConfiguration(configPath); + log.always().log("System Started."); + try { + ConfigurationManager.getInstance().loadConfiguration(configPath); + } catch (IOException e) { + log.atError().withThrowable(e).log("Unable to load confog file"); + return; + } +// log.atDebug() + if(ConfigurationManager.getInstance().getProperty("general.debug","false").equals("true")){ + for(String key:ConfigurationManager.getInstance().stringPropertyNames()){ + if(key.endsWith("pwd")){ + log.atDebug().log("Config: {} : ****({} chars)", key, ConfigurationManager.getInstance().getProperty(key).length()); + + }else{ + log.atDebug().log("Config: {} : {}", key, ConfigurationManager.getInstance().getProperty(key)); + + } + } + } } } diff --git a/src/main/java/org/leolo/nrdatad/ConfigurationManager.java b/src/main/java/org/leolo/nrdatad/ConfigurationManager.java index 6232091..c4a9ea8 100644 --- a/src/main/java/org/leolo/nrdatad/ConfigurationManager.java +++ b/src/main/java/org/leolo/nrdatad/ConfigurationManager.java @@ -8,7 +8,6 @@ import java.io.IOException; import java.io.PrintStream; import java.io.PrintWriter; import java.util.*; -import java.util.function.BiConsumer; public final class ConfigurationManager { private static ConfigurationManager instance; @@ -26,13 +25,9 @@ public final class ConfigurationManager { } - public void loadConfiguration(String configPath) { + public void loadConfiguration(String configPath) throws IOException{ logger.atInfo().log("Loading configuration file {}.", configPath); - try { - prop.load(new FileReader(configPath)); - } catch (IOException e) { - logger.atError().withThrowable(e).log("Unable to load configuration file"); - } + prop.load(new FileReader(configPath)); logger.atInfo().log("Loaded {} setting(s)", prop.size()); } @@ -104,11 +99,8 @@ public final class ConfigurationManager { return prop.entrySet(); } - public Object getOrDefault(Object key, Object defaultValue) { - return prop.getOrDefault(key, defaultValue); + protected void clear(){ + prop.clear(); } - public void forEach(BiConsumer action) { - prop.forEach(action); - } } diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml index 091bae8..d7a87ed 100644 --- a/src/main/resources/log4j2.xml +++ b/src/main/resources/log4j2.xml @@ -11,7 +11,7 @@ - + diff --git a/src/test/java/org/leolo/AppTest.java b/src/test/java/org/leolo/AppTest.java deleted file mode 100644 index 09b7d2c..0000000 --- a/src/test/java/org/leolo/AppTest.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.leolo; - -import static org.junit.Assert.assertTrue; - -import org.junit.Test; - -/** - * Unit test for simple App. - */ -public class AppTest -{ - /** - * Rigorous Test :-) - */ - @Test - public void shouldAnswerWithTrue() - { - assertTrue( true ); - } -} diff --git a/src/test/java/org/leolo/nrdatad/AppTest.java b/src/test/java/org/leolo/nrdatad/AppTest.java new file mode 100644 index 0000000..9951fd6 --- /dev/null +++ b/src/test/java/org/leolo/nrdatad/AppTest.java @@ -0,0 +1,19 @@ +package org.leolo.nrdatad; + +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +/** + * Unit test for simple App. + */ +public class AppTest { + /** + * Rigorous Test :-) + */ + @Test + public void shouldAnswerWithTrue() + { + assertTrue( true ); + } +} diff --git a/src/test/java/org/leolo/nrdatad/ConfigurationTest.java b/src/test/java/org/leolo/nrdatad/ConfigurationTest.java new file mode 100644 index 0000000..63a5e38 --- /dev/null +++ b/src/test/java/org/leolo/nrdatad/ConfigurationTest.java @@ -0,0 +1,87 @@ +package org.leolo.nrdatad; + +import org.apache.logging.log4j.LogBuilder; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.junit.*; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.Random; +import static org.junit.Assert.*; + +public class ConfigurationTest { + + public static final char[] randomChars = "1234567890qwertyuiopasdfghjklzxcvbnm".toCharArray(); + private static Logger log = LogManager.getLogger(); + + private static String fileName; + + @Before public void setUpClass(){ + int round = 0; + while(true) { + fileName = "test-"+getRandomFileName()+".tmp"; + log.always().log("File name is {}", fileName); + if(!new File(fileName).exists()){ + break; + } + if(++round>48){ + assertTrue("Cannot get a file name", false); + } + } + } + + private static String getRandomFileName(){ + StringBuilder sb = new StringBuilder(); + Random r = new Random(); + for(int i=0;i<16;i++){ + sb.append(randomChars[r.nextInt(randomChars.length)]); + } + return sb.toString(); + } + + @Test public void basicLoad() throws Exception{ + assertEquals("Dirty configs", 0, ConfigurationManager.getInstance().size()); + //Step 1: Create a simple one + try(PrintWriter out = new PrintWriter(new File(fileName))){ + out.println("key1=value1"); + out.println("key2=value2"); + out.println("key3=value3"); + out.println("key4=value4"); + out.println("#key5=value5"); + }catch(IOException e){ + log.always().withThrowable(e).log("Unable to test"); + assert false; + } + ConfigurationManager.getInstance().loadConfiguration(fileName); + assertEquals("Config key count mismatch", 4, ConfigurationManager.getInstance().size()); + assertEquals("Config key count mismatch", "value1", ConfigurationManager.getInstance().getProperty("key1")); + assertEquals("Config key count mismatch", "value3", ConfigurationManager.getInstance().getProperty("key3")); + assertEquals("Config key count mismatch", "value4", ConfigurationManager.getInstance().getProperty("key4")); + assertEquals("Config key count mismatch", "value2", ConfigurationManager.getInstance().getProperty("key2")); + + assertEquals("Config key count mismatch", null, ConfigurationManager.getInstance().getProperty("key5")); + } + + @Test public void notExistFile(){ + assertEquals("Dirty configs", 0, ConfigurationManager.getInstance().size()); + try { + ConfigurationManager.getInstance().loadConfiguration(fileName); + }catch(IOException e){ + return; + } + assertFalse("Exception not thrown", true); + } + + @After public void cleanUpEach(){ + if(new File(fileName).delete()) + log.always().log("Removed file {}", fileName); + ConfigurationManager.getInstance().clear(); + } + + @AfterClass public static void cleanup(){ + new File(fileName).deleteOnExit(); + } +}