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
/nrdatad.conf
ri_log*
test-*.tmp

70
.idea/workspace.xml

@ -5,11 +5,13 @@
</component>
<component name="ChangeListManager">
<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/main/resources/log4j2.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/test/java/org/leolo/nrdatad/ConfigurationTest.java" 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$/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>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
@ -54,7 +56,7 @@
<recent name="org.leolo.nrdatad" />
</key>
</component>
<component name="RunManager">
<component name="RunManager" selected="JUnit.ConfigurationTest">
<configuration name="Main" type="Application" factoryName="Application">
<option name="MAIN_CLASS_NAME" value="org.leolo.nrdatad.App" />
<module name="nr-data-damon" />
@ -67,6 +69,66 @@
<option name="Make" enabled="true" />
</method>
</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 name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
<component name="TaskManager">
@ -76,7 +138,7 @@
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1665904334835</updated>
<workItem from="1665904336661" duration="6172000" />
<workItem from="1665904336661" duration="10525000" />
</task>
<servers />
</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.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));
}
}
}
}
}

16
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);
}
}

2
src/main/resources/log4j2.xml

@ -11,7 +11,7 @@
</File>
</Appenders>
<Loggers>
<Root level="info">
<Root level="debug">
<AppenderRef ref="Console" />
</Root>
<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;
@ -7,8 +7,7 @@ import org.junit.Test;
/**
* Unit test for simple App.
*/
public class AppTest
{
public class AppTest {
/**
* 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