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 @@
-
-
+
+
+
+
@@ -54,7 +56,7 @@
-
+
@@ -67,6 +69,66 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -76,7 +138,7 @@
1665904334835
-
+
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 super Object, ? super Object> 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/nrdatad/AppTest.java
similarity index 82%
rename from src/test/java/org/leolo/AppTest.java
rename to src/test/java/org/leolo/nrdatad/AppTest.java
index 09b7d2c..9951fd6 100644
--- a/src/test/java/org/leolo/AppTest.java
+++ b/src/test/java/org/leolo/nrdatad/AppTest.java
@@ -1,4 +1,4 @@
-package org.leolo;
+package org.leolo.nrdatad;
import static org.junit.Assert.assertTrue;
@@ -7,8 +7,7 @@ import org.junit.Test;
/**
* Unit test for simple App.
*/
-public class AppTest
-{
+public class AppTest {
/**
* Rigorous Test :-)
*/
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();
+ }
+}