Browse Source

Basic unit test

feature-basic-conf
LO Kam Tao Leo 3 years ago
parent
commit
f866ca44f9
  1. 1
      .gitignore
  2. 70
      .idea/workspace.xml
  3. 25
      src/main/java/org/leolo/nrdatad/App.java
  4. 16
      src/main/java/org/leolo/nrdatad/ConfigurationManager.java
  5. 2
      src/main/resources/log4j2.xml
  6. 5
      src/test/java/org/leolo/nrdatad/AppTest.java
  7. 87
      src/test/java/org/leolo/nrdatad/ConfigurationTest.java

1
.gitignore vendored

@ -40,3 +40,4 @@ build/
### Configuration file ### Configuration file
/nrdatad.conf /nrdatad.conf
ri_log* ri_log*
test-*.tmp

70
.idea/workspace.xml

@ -5,11 +5,13 @@
</component> </component>
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="b9554e7b-3332-419c-960c-8bfbee0d5311" name="Changes" comment=""> <list default="true" id="b9554e7b-3332-419c-960c-8bfbee0d5311" name="Changes" comment="">
<change afterPath="$PROJECT_DIR$/src/main/java/org/leolo/nrdatad/ConfigurationManager.java" afterDir="false" /> <change afterPath="$PROJECT_DIR$/src/test/java/org/leolo/nrdatad/ConfigurationTest.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/log4j2.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/pom.xml" afterDir="false" /> <change beforePath="$PROJECT_DIR$/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/pom.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/org/leolo/nrdatad/App.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/org/leolo/nrdatad/App.java" afterDir="false" /> <change beforePath="$PROJECT_DIR$/src/main/java/org/leolo/nrdatad/App.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/org/leolo/nrdatad/App.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/org/leolo/nrdatad/ConfigurationManager.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/org/leolo/nrdatad/ConfigurationManager.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/resources/log4j2.xml" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/resources/log4j2.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/test/java/org/leolo/AppTest.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/test/java/org/leolo/nrdatad/AppTest.java" afterDir="false" />
</list> </list>
<option name="SHOW_DIALOG" value="false" /> <option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" /> <option name="HIGHLIGHT_CONFLICTS" value="true" />
@ -54,7 +56,7 @@
<recent name="org.leolo.nrdatad" /> <recent name="org.leolo.nrdatad" />
</key> </key>
</component> </component>
<component name="RunManager"> <component name="RunManager" selected="JUnit.ConfigurationTest">
<configuration name="Main" type="Application" factoryName="Application"> <configuration name="Main" type="Application" factoryName="Application">
<option name="MAIN_CLASS_NAME" value="org.leolo.nrdatad.App" /> <option name="MAIN_CLASS_NAME" value="org.leolo.nrdatad.App" />
<module name="nr-data-damon" /> <module name="nr-data-damon" />
@ -67,6 +69,66 @@
<option name="Make" enabled="true" /> <option name="Make" enabled="true" />
</method> </method>
</configuration> </configuration>
<configuration name="ConfigurationTest" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
<module name="nr-data-damon" />
<extension name="coverage">
<pattern>
<option name="PATTERN" value="org.leolo.nrdatad.*" />
<option name="ENABLED" value="true" />
</pattern>
</extension>
<option name="PACKAGE_NAME" value="org.leolo.nrdatad" />
<option name="MAIN_CLASS_NAME" value="org.leolo.nrdatad.ConfigurationTest" />
<option name="TEST_OBJECT" value="class" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
<configuration name="ConfigurationTest.basicLoad" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
<module name="nr-data-damon" />
<extension name="coverage">
<pattern>
<option name="PATTERN" value="org.leolo.nrdatad.*" />
<option name="ENABLED" value="true" />
</pattern>
</extension>
<option name="PACKAGE_NAME" value="org.leolo.nrdatad" />
<option name="MAIN_CLASS_NAME" value="org.leolo.nrdatad.ConfigurationTest" />
<option name="METHOD_NAME" value="basicLoad" />
<option name="TEST_OBJECT" value="method" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
<configuration name="ConfigurationTest.notExistFile" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
<module name="nr-data-damon" />
<extension name="coverage">
<pattern>
<option name="PATTERN" value="org.leolo.nrdatad.*" />
<option name="ENABLED" value="true" />
</pattern>
</extension>
<option name="PACKAGE_NAME" value="org.leolo.nrdatad" />
<option name="MAIN_CLASS_NAME" value="org.leolo.nrdatad.ConfigurationTest" />
<option name="METHOD_NAME" value="notExistFile" />
<option name="TEST_OBJECT" value="method" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
<list>
<item itemvalue="Application.Main" />
<item itemvalue="JUnit.ConfigurationTest" />
<item itemvalue="JUnit.ConfigurationTest.basicLoad" />
<item itemvalue="JUnit.ConfigurationTest.notExistFile" />
</list>
<recent_temporary>
<list>
<item itemvalue="JUnit.ConfigurationTest" />
<item itemvalue="JUnit.ConfigurationTest.notExistFile" />
<item itemvalue="JUnit.ConfigurationTest.basicLoad" />
</list>
</recent_temporary>
</component> </component>
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" /> <component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
<component name="TaskManager"> <component name="TaskManager">
@ -76,7 +138,7 @@
<option name="number" value="Default" /> <option name="number" value="Default" />
<option name="presentableId" value="Default" /> <option name="presentableId" value="Default" />
<updated>1665904334835</updated> <updated>1665904334835</updated>
<workItem from="1665904336661" duration="6172000" /> <workItem from="1665904336661" duration="10525000" />
</task> </task>
<servers /> <servers />
</component> </component>

25
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.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import java.io.IOException;
/** /**
* Hello world! * Hello world!
* *
*/ */
public class App { public class App {
Logger logger = LogManager.getLogger(); Logger log = LogManager.getLogger();
public static void main( String[] args ) { public static void main( String[] args ) {
Option confFile = Option.builder() Option confFile = Option.builder()
.required(false) .required(false)
@ -35,7 +37,24 @@ public class App {
} }
private void run(String configPath){ private void run(String configPath){
logger.always().log("System Started."); log.always().log("System Started.");
ConfigurationManager.getInstance().loadConfiguration(configPath); 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));
}
}
}
} }
} }

16
src/main/java/org/leolo/nrdatad/ConfigurationManager.java

@ -8,7 +8,6 @@ import java.io.IOException;
import java.io.PrintStream; import java.io.PrintStream;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.util.*; import java.util.*;
import java.util.function.BiConsumer;
public final class ConfigurationManager { public final class ConfigurationManager {
private static ConfigurationManager instance; 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); logger.atInfo().log("Loading configuration file {}.", configPath);
try { prop.load(new FileReader(configPath));
prop.load(new FileReader(configPath));
} catch (IOException e) {
logger.atError().withThrowable(e).log("Unable to load configuration file");
}
logger.atInfo().log("Loaded {} setting(s)", prop.size()); logger.atInfo().log("Loaded {} setting(s)", prop.size());
} }
@ -104,11 +99,8 @@ public final class ConfigurationManager {
return prop.entrySet(); return prop.entrySet();
} }
public Object getOrDefault(Object key, Object defaultValue) { protected void clear(){
return prop.getOrDefault(key, defaultValue); prop.clear();
} }
public void forEach(BiConsumer<? super Object, ? super Object> action) {
prop.forEach(action);
}
} }

2
src/main/resources/log4j2.xml

@ -11,7 +11,7 @@
</File> </File>
</Appenders> </Appenders>
<Loggers> <Loggers>
<Root level="info"> <Root level="debug">
<AppenderRef ref="Console" /> <AppenderRef ref="Console" />
</Root> </Root>
<Logger name="org.leolo.nrdd"> <Logger name="org.leolo.nrdd">

5
src/test/java/org/leolo/AppTest.java → 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; import static org.junit.Assert.assertTrue;
@ -7,8 +7,7 @@ import org.junit.Test;
/** /**
* Unit test for simple App. * Unit test for simple App.
*/ */
public class AppTest public class AppTest {
{
/** /**
* Rigorous Test :-) * Rigorous Test :-)
*/ */

87
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();
}
}
Loading…
Cancel
Save