[Policy-20] getConfig & Policy resolved blockers

Change-Id: If08e4c90d419e8d6e1426d817a12dde5b7cafba3
Signed-off-by: rb7147 <rb7147@att.com>
diff --git a/LogParser/src/main/java/org/openecomp/xacml/parser/LogEntryObject.java b/LogParser/src/main/java/org/openecomp/xacml/parser/LogEntryObject.java
index 4b03d2a..3b1ccff 100644
--- a/LogParser/src/main/java/org/openecomp/xacml/parser/LogEntryObject.java
+++ b/LogParser/src/main/java/org/openecomp/xacml/parser/LogEntryObject.java
@@ -32,7 +32,7 @@
 	private LOGTYPE logType;
 	
 	public enum LOGTYPE {
-		INFO, ERROR, SEVERE, WARN;
+		INFO, DEBUG, ERROR, SEVERE, WARN;
 	}
 		
 	public String getSystem() {
@@ -71,4 +71,4 @@
 	public void setLogType(LOGTYPE logType) {
 		this.logType = logType;
 	}	
-}
+}
\ No newline at end of file
diff --git a/LogParser/src/main/java/org/openecomp/xacml/parser/ParseLog.java b/LogParser/src/main/java/org/openecomp/xacml/parser/ParseLog.java
index 8c6df28..4432673 100644
--- a/LogParser/src/main/java/org/openecomp/xacml/parser/ParseLog.java
+++ b/LogParser/src/main/java/org/openecomp/xacml/parser/ParseLog.java
@@ -48,6 +48,7 @@
 import org.openecomp.policy.common.im.AdministrativeStateException;
 import org.openecomp.policy.common.im.IntegrityMonitor;
 import org.openecomp.policy.common.im.StandbyStatusException;
+import org.openecomp.policy.common.logging.flexlogger.FlexLogger;
 import org.openecomp.xacml.parser.LogEntryObject.LOGTYPE;
 
 /**
@@ -57,15 +58,24 @@
  */
 public class ParseLog {
 	
-	private static final Logger logger = Logger.getLogger(ParseLog.class.getName());
+	// only logging last line of each log file processed to the log4j log file defined by property - PARSERLOGPATH
+	private static final Logger log4jlogger = Logger.getLogger(ParseLog.class.getName());
+
+	// processing logging 
+	private static org.openecomp.policy.common.logging.flexlogger.Logger logger = FlexLogger.getLogger(ParseLog.class.getName());
 
 	private static String system;
 	private static int lastNumberRead = 0;
+	private static int debuglastNumberRead = 0;
+	private static int errorlastNumberRead = 0;
 	private static String type;
 	private static long startFileSize;
+	private static long debugStartFileSize;
+	private static long errorStartFileSize;
 	private static String systemLogFile;
 	private static String logFile;
-	
+	private static String debuglogFile;
+	private static String errorlogFile;
 	private static String JDBC_URL;
 	private static String JDBC_USER;
 	private static String JDBC_PASSWORD = "";
@@ -73,84 +83,240 @@
 	private static int maxLength = 255;   //Max length that is allowed in the DB table
 	private static String resourceName;
 	private static long sleepTimer = 50000;
-	static IntegrityMonitor im;
+	static  IntegrityMonitor im;
+	private static boolean isMissingLogFile;
 
 	private static RandomAccessFile randomAccessFile;
 	
 	public static void main(String[] args) throws Exception {
 
 		Properties logProperties = getPropertiesValue("parserlog.properties");
-		Path filePath = Paths.get(logFile);
-		File file = new File(logFile);
+		
+		if(logProperties == null || isMissingLogFile){
+			// missing the path of log file in the properties file, so stop the process
+			logger.error("logProperties is null or LOGPATH is missing in parserlog.properties, so stop the process.");
+			return;
+		}
+     
 		File fileLog = new File(systemLogFile);
-		startFileSize = file.length();
-			
+
 		im = IntegrityMonitor.getInstance(resourceName,logProperties );
 		
-		logger.info("System: " + system );  
-		logger.info("System type: " + type );  
-		logger.info("Logging File: " + systemLogFile );
-		logger.info("log file: " + logFile);
-		logger.info("JDBC_URL: " + JDBC_URL);
-		logger.info("JDBC_DRIVER: " + JDBC_DRIVER);
-		
-		String filesRead = PullLastLineRead(fileLog);
-		if (filesRead!= null){			
-			filesRead = filesRead.replaceAll("(\\r\\n|\\n)", "<br />");
-			lastNumberRead= Integer.parseInt(filesRead.trim());
-		}else{
-			lastNumberRead = 0;
-		}
-		startFileSize =  countLines(logFile);
-		logger.info("File Line Count: " + startFileSize + " value read in: " + lastNumberRead);
-		if (startFileSize < lastNumberRead ){
-			logger.error("Filed Rolled: set Last number read to 0");
-			lastNumberRead = 0;
-		}
-		Runnable  runnable = new Runnable (){
-		public void run(){
-			while (true){		
-	             
-				if (file.isFile()){
-					try (Stream<String> lines = Files.lines(filePath, Charset.defaultCharset()).onClose(() -> logger.info("Last line Read: " + lastNumberRead)).skip(lastNumberRead)) {
+		startDebugLogParser(fileLog);
+		startErrorLogParser(fileLog);
+		startAPIRestLogParser(fileLog);	
+	
+	}	
+	
+	private static void startDebugLogParser(File fileLog) throws Exception{
+		if(debuglogFile != null && !debuglogFile.isEmpty()){
+			
+			// pull the last line number 
+			String dataFileName = "debug.log";
+			String filesRead = PullLastLineRead(fileLog, dataFileName);  
+			if (filesRead!= null){			
+				filesRead = filesRead.replaceAll("(\\r\\n|\\n)", "<br />");
+				debuglastNumberRead= Integer.parseInt(filesRead.trim());
+			}else{
+				debuglastNumberRead = 0;
+			}	
+			
+			debugStartFileSize =  countLines(debuglogFile);
+			if (debugStartFileSize < debuglastNumberRead ){ 
+				logger.error("Filed Rolled: set Last debug number read to 0");
+				debuglastNumberRead = 0;
+			}
+			
+			isMissingLogFile = false; 
+			Path debugfilePath = Paths.get(debuglogFile);
+			File debugfile = new File(debuglogFile);
+			debugStartFileSize = debugfile.length();
+			// start process debug.log file
+
+			Runnable  runnable = new Runnable (){
+				boolean isStop = false;
+				
+				public void run(){
+					while (!isStop){	
+			             
+						if (debugfile.isFile()){
+							// log4jlogger must use .info
+							try (Stream<String> lines = Files.lines(debugfilePath, Charset.defaultCharset()).onClose(() -> log4jlogger.info("Last-"+dataFileName+"-line-Read:" + debuglastNumberRead)).skip(debuglastNumberRead)) {
+								
+								lines.forEachOrdered(line -> process(line, type, LOGTYPE.DEBUG));
+
+							} catch (IOException e) {
+								logger.error("Error processing line in " + dataFileName + ":" + e);
+								logger.error("break the loop.");
+								isStop = true;
+							}	
+						}
+						try {
+							Thread.sleep(sleepTimer);
+							debugStartFileSize =  countLines(debuglogFile);
+						} catch (InterruptedException | IOException e) {
+							logger.error("Error processing line in " + dataFileName + ":" + e);
+							logger.error("break the loop.");
+							isStop = true;
+						}
 						
-						lines.forEachOrdered(line -> process(line, type));
-		
-					} catch (IOException e) {
-						logger.error("Error processing line in log file: " + e);
+						logger.debug("File Line Count of debug.log: " + debugStartFileSize + " value read in: " + debuglastNumberRead);
+						if (debugStartFileSize < debuglastNumberRead ){
+							logger.debug("Failed Rolled: set Last number read to 0");
+							debuglastNumberRead = 0;
+						}
 					}	
 				}
-				try {
-					Thread.sleep(sleepTimer);
-					startFileSize =  countLines(logFile);
-				} catch (InterruptedException | IOException e) {
-					logger.error("Error: " + e);
-				}
-				
-				logger.info("File Line Count: " + startFileSize + " value read in: " + lastNumberRead);
-				if (startFileSize < lastNumberRead ){
-					logger.info("Failed Rolled: set Last number read to 0");
-					lastNumberRead = 0;
-				}
-			}	
-		}
-		};
+			};
+			
+			Thread thread = new Thread(runnable);
+			thread.start();
+			
+		} 	
+	}
+
+	private static void startErrorLogParser(File fileLog) throws Exception{
 		
-		Thread thread = new Thread(runnable);
-		thread.start();
-
-	}			
-
+		if(errorlogFile != null && !errorlogFile.isEmpty()){
+			
+			// pull the last line number 
+			String dataFileName = "error.log";
+			String filesRead = PullLastLineRead(fileLog, dataFileName);  
+			if (filesRead!= null){			
+				filesRead = filesRead.replaceAll("(\\r\\n|\\n)", "<br />");
+				errorlastNumberRead= Integer.parseInt(filesRead.trim());
+			}else{
+				errorlastNumberRead = 0;
+			}	
+			
+			errorStartFileSize =  countLines(errorlogFile);
+			if (errorStartFileSize < errorlastNumberRead ){
+				logger.error("Filed Rolled: set Last error number read to 0");
+				errorlastNumberRead = 0;
+			}
+			
+			isMissingLogFile = false;			
+			Path errorfilePath = Paths.get(errorlogFile);
+			File errorfile = new File(errorlogFile);
+			errorStartFileSize = errorfile.length();
+			// start process error.log file
+			Runnable  runnable = new Runnable (){
+				boolean isStop = false;
+				public void run(){
+                    
+					while (!isStop){
+						if (errorfile.isFile()){
+							// log4jlogger must use .info
+							try (Stream<String> lines = Files.lines(errorfilePath, Charset.defaultCharset()).onClose(() -> log4jlogger.info("Last-"+dataFileName+"-line-Read:" + errorlastNumberRead)).skip(errorlastNumberRead)) {
+								
+								lines.forEachOrdered(line -> process(line, type, LOGTYPE.ERROR));
+				
+							} catch (IOException e) {
+								logger.error("Error processing line in " + dataFileName + ":" + e);
+								logger.error("break the loop.");
+								isStop = true;
+							}	
+						}
+						try {
+							Thread.sleep(sleepTimer);
+							errorStartFileSize =  countLines(errorlogFile);
+						} catch (InterruptedException | IOException e) {
+							logger.error("Error processing line in " + dataFileName + ":" + e);
+							logger.error("break the loop.");
+							isStop = true;
+						}
+						
+						logger.debug("File Line Count of error.log: " + errorStartFileSize + " value read in: " + errorlastNumberRead);
+						if (errorStartFileSize < errorlastNumberRead ){
+							logger.debug("Failed Rolled: set Last error number read to 0");
+							errorlastNumberRead = 0;
+						}
+					}	
+				}
+			};
+			
+			Thread thread = new Thread(runnable);
+			thread.start();
+		}		
+	}
+	
+	private static void startAPIRestLogParser(File fileLog) throws Exception{
+		
+		if(logFile != null && !logFile.isEmpty()){
+			
+			// pull the last line number 
+			String dataFileName = type.toLowerCase()+"-rest.log";
+			String filesRead = PullLastLineRead(fileLog, dataFileName);  
+			if (filesRead!= null){			
+				filesRead = filesRead.replaceAll("(\\r\\n|\\n)", "<br />");
+				lastNumberRead= Integer.parseInt(filesRead.trim());
+			}else{
+				lastNumberRead = 0;
+			}			
+			startFileSize =  countLines(logFile);
+			if (startFileSize < lastNumberRead ){
+				logger.error("Filed Rolled: set Last number read to 0");
+				lastNumberRead = 0;
+			}
+			
+			isMissingLogFile = false;
+	        Path filePath = Paths.get(logFile);
+	        File file = new File(logFile);		
+			startFileSize = file.length();
+			// start process pap/pdp-rest.log file
+			Runnable  runnable = new Runnable () {
+				boolean isStop = false;
+				public void run(){
+					while (!isStop){		
+						
+						if (file.isFile()){
+							// log4jlogger must use .info
+							try (Stream<String> lines = Files.lines(filePath, Charset.defaultCharset()).onClose(() -> log4jlogger.info("Last-"+dataFileName+"-line-Read:" + lastNumberRead)).skip(lastNumberRead)) {
+								
+								lines.forEachOrdered(line -> process(line, type, LOGTYPE.INFO));
+				
+							} catch (IOException e) {
+								logger.error("Error processing line in " + dataFileName + ":" + e);
+								logger.error("break the loop.");
+								isStop = true;
+							}	
+						}
+						try {
+							Thread.sleep(sleepTimer);
+							startFileSize =  countLines(logFile);
+						} catch (InterruptedException | IOException e) {
+							logger.error("Error processing line in " + dataFileName + ":" + e);
+							logger.error("break the loop.");
+							isStop = true;
+						}
+						
+						logger.debug("File Line Count of " + dataFileName+": " + startFileSize + " value read in: " + lastNumberRead);
+						if (startFileSize < lastNumberRead ){
+							logger.debug("Failed Rolled: set Last number read to 0");
+							lastNumberRead = 0;
+						}
+					}	
+				}
+			};
+				
+			Thread thread = new Thread(runnable);
+			thread.start();
+		}		
+	}
+	
 	public static int countLines(String filename) throws IOException {
 	    LineNumberReader reader  = new LineNumberReader(new FileReader(filename));
 	    int cnt = 0;
-	    while ((reader.readLine()) != null);
+	    String line= null;
+	    while ((line = reader.readLine()) != null) {
+	    	logger.info("Reading the Logs"+line);
+	    }
 	    cnt = reader.getLineNumber(); 
 	    reader.close();
 	    return cnt;
 	}	
 	
-	public static String PullLastLineRead(File file) throws IOException {
+	public static String PullLastLineRead(File file, String dataFileName) throws IOException {
 		if(!file.exists()){
 			file.createNewFile();
 			return null;
@@ -158,38 +324,48 @@
 		randomAccessFile = new RandomAccessFile(file, "r");
         StringBuilder builder = new StringBuilder();
         long length = file.length();
-        length--;
-        randomAccessFile.seek(length);
-        for(long seek = length; seek >= 0; --seek){
-            randomAccessFile.seek(seek);
-            char c = (char)randomAccessFile.read();
-            builder.append(c);
-            if(c == '\n'){
-                builder = builder.reverse();
-                if (builder.toString().contains("Last line Read:")){
-            		String[] parseString = builder.toString().split("Last line Read:");
-            		String returnValue = parseString[1].replace("\r", "");
-            		return returnValue.trim();
-            	}
-                builder = null;
-                builder = new StringBuilder();
-             }
-
+        logger.debug("dataFileName: " +dataFileName);
+        if(length > 0){
+	        length--;	        
+	        randomAccessFile.seek(length);
+	        for(long seek = length; seek >= 0; --seek){
+	            randomAccessFile.seek(seek);
+	            char c = (char)randomAccessFile.read();
+	            builder.append(c);
+	            if(c == '\n'){
+	                builder = builder.reverse();
+	                logger.debug("builder.toString(): " +builder.toString());
+	                if (builder.toString().contains("Last-"+dataFileName+"-line-Read:")){
+	            		String[] parseString = builder.toString().split("Last-"+dataFileName+"-line-Read:");
+	            		String returnValue = parseString[1].replace("\r", "");
+	            		return returnValue.trim();
+	            	}
+	                builder = null;
+	                builder = new StringBuilder();
+	             }	
+	        }
         }
+        
 		return null;
 	}
 
 	public static LogEntryObject pullOutLogValues(String line, String type){
 		Date date;
 		LogEntryObject logEntry = new LogEntryObject();
+		String description = "";
 		logEntry.setSystemType(type);
-		String description = null;
-		
 		logEntry.setSystem(system);
-		
-		//Values for PDP/PAP log file
-		if(line.contains("||INFO||") || line.contains("||ERROR||")){
-			String[] splitString = line.split("[||]");
+		logger.debug("In pullOutLogValues ...");
+		//Values for PDP/PAP debug.log file contains "INFO:", error.log file contains ""ERROR:", others are in PDP/PAP rest log file
+		if(line.contains("||INFO||") || line.contains("||ERROR||") || line.contains("INFO:") || line.contains("ERROR:")){
+			String[] splitString = null;
+			if(line.contains("||INFO||") || line.contains("||ERROR||")){
+				splitString = line.split("[||]");
+			}else if(line.contains("INFO:")){
+				splitString = line.split("INFO:");
+			}else{
+				splitString = line.split("ERROR:");
+			}
 			String dateString = splitString[0].substring(0, 19);
 			logEntry.setDescription(splitString[splitString.length-1]);	
 
@@ -198,12 +374,13 @@
 			logEntry.setDate(date);
 			
 			logEntry.setRemote(parseRemoteSystem(line));
-			if (line.contains("||INFO||")){
+			if (line.contains("INFO:") || line.contains("||INFO||")){
 				logEntry.setLogType(LOGTYPE.INFO);
 			}else{
 				logEntry.setLogType(LOGTYPE.ERROR);
-			}		
-		}else if (line.contains("INFO") && line.contains(")-")){
+			}
+           // from PDP/PAP rest log file below
+		}else if (line.contains("INFO") && line.contains(")-")){ 
 			//parse out description
 			logEntry.setDescription(line.substring(line.indexOf(")-")+3));
 
@@ -272,8 +449,7 @@
 			logEntry.setLogType(LOGTYPE.ERROR);
 		}else {
 			return null;
-		}
-		
+		}		
 
 		return logEntry;
 	}
@@ -287,20 +463,28 @@
 		}
 	}
 
-	public static void process(String line, String type)  {
+	public static void process(String line, String type, LOGTYPE logFile)  {
+		
+		logger.debug("In process: processing line : " + line);
 		LogEntryObject returnLogValue = null;
 		if (im!=null){
 			try {
 				im.startTransaction();
 			} catch (AdministrativeStateException e) {
-				logger.error("Error received" + e);
-				
+				logger.error("Error received" + e);				
 			} catch (StandbyStatusException e) {
 				logger.error("Error received" + e);
 			}
 		}
 		returnLogValue = pullOutLogValues(line, type);
-		lastNumberRead++;
+		
+		if(logFile.equals(LOGTYPE.DEBUG)){
+		   debuglastNumberRead++;
+		}else if(logFile.equals(LOGTYPE.ERROR)){
+		   errorlastNumberRead++;
+		}else if(logFile.equals(LOGTYPE.INFO)){
+		   lastNumberRead++;
+		}
 		if (returnLogValue!=null){
 			writeDB(returnLogValue);
 		}
@@ -310,6 +494,7 @@
 	}
 	
 	private static void writeDB(LogEntryObject returnLogValue) {
+
 		Connection conn = DBConnection(JDBC_DRIVER, JDBC_URL, JDBC_USER,JDBC_PASSWORD);
 		DBAccesss(conn, returnLogValue.getSystem(), returnLogValue.getDescription(),  
 						returnLogValue.getDate(), returnLogValue.getRemote(), 
@@ -334,7 +519,10 @@
 		
 		if (date!=null){
 			Format formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-			sdate = formatter.format(date);		
+			sdate = formatter.format(date);	
+			logger.debug("DBAccesss : sdate : " + sdate);
+		}else{
+			logger.debug("DBAccesss : sdate is null");
 		}
 		
 		//ensure the length of description is less than the maximumm db char length
@@ -399,11 +587,26 @@
 		return null;
 	}
 	
+	public static String[] getPaths(String logPath){	
+		
+		if(logPath != null && !logPath.isEmpty()){
+			if(logPath.contains(";")){
+		       return logPath.split(";");
+			}else{
+				 String[] oneFile = new String[1];
+				 oneFile[0] = logPath;
+				 return oneFile;
+			}
+		}
+		
+	    return null;	
+	}
+	
 	public static Properties getPropertiesValue(String fileName) {
 		Properties config = new Properties();
 		Path file = Paths.get(fileName);
 		if (Files.notExists(file)) {
-			logger.info("File doesn't exist in the specified Path "	+ file.toString());
+			logger.debug("File doesn't exist in the specified Path "	+ file.toString());
 		}else{ 
 			if (file.toString().endsWith(".properties")) {
 				InputStream in;
@@ -415,7 +618,44 @@
 					system = config.getProperty("SERVER");
 					type = config.getProperty("LOGTYPE");
 					systemLogFile = config.getProperty("PARSERLOGPATH");
-					logFile = config.getProperty("LOGPATH");
+					String logFiles = config.getProperty("LOGPATH");
+					if(logFiles == null || logFiles.isEmpty()){
+						isMissingLogFile = true;
+						return null;
+					}
+					
+					String[] splitString = getPaths(logFiles);
+					
+					if(splitString != null){
+                        for(int i=0;  i < splitString.length; i++){
+                        	
+                        	if(splitString[i].contains("debug")){
+        						// get path of debug.log file
+        						debuglogFile = splitString[i];
+        						if(debuglogFile != null && !debuglogFile.isEmpty()){
+        							debuglogFile = debuglogFile.trim();
+        						}
+                        	}else if(splitString[i].contains("error")){
+        						// get path of error.log file
+        						errorlogFile = splitString[i];
+        						if(errorlogFile != null && !errorlogFile.isEmpty()){
+        							errorlogFile = errorlogFile.trim();
+        						}
+                        	}else {
+        						// get path of default file
+                        		logFile = splitString[i];
+        						if(logFile != null && !logFile.isEmpty()){
+        							logFile = logFile.trim();
+        						}
+                        	}
+                        }
+					}else{	
+						
+						debuglogFile = null;
+						errorlogFile = null;
+						logFile = null;
+					}
+					
 					JDBC_URL = config.getProperty("JDBC_URL").replace("'", "");
 					JDBC_USER = config.getProperty("JDBC_USER");
 					JDBC_DRIVER =  config.getProperty("JDBC_DRIVER");
@@ -423,11 +663,11 @@
 					return config;
 
 				} catch (IOException e) {					
-					logger.info("Error porcessing Cofnig file will be unable to create Health Check");
+					logger.debug("Error porcessing Config file will be unable to create Health Check" + e);
 				}
 				
 			}
 		}
 		return null;
 	}	
-}
+}
\ No newline at end of file
diff --git a/LogParser/src/test/java/org/openecomp/xacml/parser/ParseLogTest.java b/LogParser/src/test/java/org/openecomp/xacml/parser/ParseLogTest.java
index 621f397..2bd70f2 100644
--- a/LogParser/src/test/java/org/openecomp/xacml/parser/ParseLogTest.java
+++ b/LogParser/src/test/java/org/openecomp/xacml/parser/ParseLogTest.java
@@ -21,6 +21,7 @@
 package org.openecomp.xacml.parser;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
 import java.io.BufferedReader;
@@ -38,15 +39,19 @@
 import org.openecomp.policy.common.im.AdministrativeStateException;
 import org.openecomp.policy.common.im.IntegrityMonitor;
 import org.openecomp.policy.common.im.StandbyStatusException;
+import org.openecomp.policy.common.logging.flexlogger.FlexLogger;
+import org.openecomp.policy.common.logging.flexlogger.Logger;
 import org.openecomp.xacml.parser.LogEntryObject.LOGTYPE;
 
 
 public class ParseLogTest {
-
+	
+	private static Logger logger = FlexLogger.getLogger(ParseLogTest.class);
 	private Properties config = new Properties();
-	private String configFile = "test_config.properties";
+	private String configFile;
+	private String testFile1;
+	private String testFile2;
 	private IntegrityMonitor im;
-
 	
 	@Before
 	public void setUp() throws Exception {
@@ -59,41 +64,56 @@
 			fail();
 		}
 		Mockito.doNothing().when(im).endTransaction();
-
+		ClassLoader classLoader = getClass().getClassLoader();
+		configFile = classLoader.getResource("test_config.properties").getFile();
+		if(configFile.startsWith("/C:/")){
+			configFile = configFile.substring(1);
+		}
+		testFile1 = classLoader.getResource("LineTest.txt").getFile();
+		testFile2 = classLoader.getResource("LineTest2.txt").getFile();
+		
 	}
 
 	@After
 	public void tearDown() {
+		
+		logger.debug("tearDown: enter");
+		
 		File file = new File("nonExistFile.txt");
 		file.delete();
-	}
-
-	//@Test
-	public void testMain() {
-		try {	
-			ParseLog.main(null);
-		} catch (Exception e) {
-			fail();
-		}
+		logger.debug("tearDown: exit");
 	}
 
 	@Test
 	public void testCountLines() throws IOException {
-		String fileName = "LineTest.txt";
-		int returnValue = ParseLog.countLines(fileName);
 		
-		assertEquals(9, returnValue);
+		logger.debug("testCountLines: enter");
+		
+		int returnValue = ParseLog.countLines(testFile1);
+		logger.debug("testCountLines: returnValue: " + returnValue);
+		assertEquals(12, returnValue);
+		
+		logger.debug("testCountLines: exit");
 	}
-	
+
 	@Test
 	public void testParseRemoteSystem() {
+		
+		logger.debug("testParseRemoteSystem: enter");
+		
 		String line = "||org.openecomp.policy.pap.xacml.rest.XACMLPapServlet$Heartbeat.run(XACMLPapServlet.java:2801)||Heartbeat 'https://localhost:8081/pdp/' status='UP_TO_DATE'";
 		String returnValue = ParseLog.parseRemoteSystem(line);
+		logger.debug("testParseRemoteSystem: returnValue: " + returnValue);
 		assertEquals("localhost:8081", returnValue);
+		
+		logger.debug("testParseRemoteSystem: exit");
 	}
 
 	@Test
 	public void testGetPropertiesValue() {
+		
+		logger.debug("testGetPropertiesValue: enter");
+		
 		config = new Properties();
 		config.put("RESOURCE_NAME", "logparser_pap01");
 		config.put("JDBC_DRIVER" ,"com.mysql.jdbc.Driver");
@@ -108,76 +128,123 @@
 		config.put("PARSERLOGPATH", "IntegrityMonitor.log");
 		
 		Properties returnConfig = ParseLog.getPropertiesValue(configFile);
-
-		
+		logger.debug("testGetPropertiesValue: returnConfig: " + returnConfig);
 		assertEquals(config.get("RESOURCE_NAME"), returnConfig.get("RESOURCE_NAME"));	
+		
+		logger.debug("testGetPropertiesValue: exit");
 	}
-	
+
 	@Test
 	public void testGetPropertiesFail() {	
-		Properties returnValue = ParseLog.getPropertiesValue("nonExistFile");
 		
+		logger.debug("testGetPropertiesFail: enter");
+		
+		Properties returnValue = ParseLog.getPropertiesValue("nonExistFile");
+		logger.debug("testGetPropertiesFail: returnValue: " + returnValue);
 		assertEquals(null, returnValue);	
+		
+		logger.debug("testGetPropertiesFail: exit");
 	}
 
 	@Test
 	public  void  testParseDate(){
+		
+		logger.debug("testParseDate: enter");
+		
 		String line = "2016-02-23 08:07:30";
 		Date returnValue = ParseLog.parseDate(line, "yyyy-MM-dd HH:mm:ss", false);
+		logger.debug("testParseDate: returnValue: " + returnValue);
 		line = returnValue.toString().substring(0, returnValue.toString().lastIndexOf(":30")+3);
 		assertEquals("Tue Feb 23 08:07:30", line);
+		
+		logger.debug("testParseDate: exit");
 	}
-	
+
 	@Test
 	public  void  testParseDateFail(){
+		
+		logger.debug("testParseDateFail: enter");
+		
 		String line = "2016-02-23 08:07:30";
 		Date returnValue = ParseLog.parseDate(line, "yyyy-MM-dd HH:mm:ss", true);
-		
+		logger.debug("testParseDateFail: returnValue: " + returnValue);
 		assertEquals(null, returnValue);
+		
+		logger.debug("testParseDateFail: exit");
 	}
-	
+
 	@Test
 	public void testPullLastLineRead(){
 		
-		File file = new File("LineTest.txt");
+		logger.debug("testPullLastLineRead: enter");
+		File file = new File(testFile1);
 		String returnValue = null;
 		try {
-			returnValue = ParseLog.PullLastLineRead(file).trim();
+			returnValue = ParseLog.PullLastLineRead(file, "pap-rest.log");
+			logger.debug("testPullLastLineRead: returnValue for pap-rest.log: " + returnValue);
 		} catch (IOException e) {
 			fail();
 		}		
-		assertEquals("12", returnValue);
+		assertEquals("52", returnValue);
+		
+		try {
+			returnValue = ParseLog.PullLastLineRead(file, "debug.log");
+			logger.debug("testPullLastLineRead: returnValue for debug.log: " + returnValue);
+		} catch (IOException e) {
+			fail();
+		}		
+		assertEquals("17", returnValue);
+		
+		try {
+			returnValue = ParseLog.PullLastLineRead(file, "error.log");
+			logger.debug("testPullLastLineRead: returnValue for error.log: " + returnValue);
+		} catch (IOException e) {
+			fail();
+		}		
+		assertEquals("22", returnValue);
 
+		logger.debug("testPullLastLineRead: exit");
 	}
-	
+
 	@Test
 	public void testPullLastLineReadNoFile(){
 		
+		logger.debug("testPullLastLineReadNoFile: enter");
+		
 		File file = new File("nonExistFile.txt");
 		try {
-			assertEquals(null, ParseLog.PullLastLineRead(file));
+			assertEquals(null, ParseLog.PullLastLineRead(file, "pap-rest"));
 		} catch (IOException e) {
 			fail();
 		}
+		
+		logger.debug("testPullLastLineReadNoFile: exit");
 	}
+
 	@Test
 	public void testPullLastLineReadFail(){
 		
-		File file = new File("LineTest2.txt");
+		logger.debug("testPullLastLineReadFail: enter");
+		
+		File file = new File(testFile2);
 		try {
-			assertEquals(null, ParseLog.PullLastLineRead(file));
+			assertEquals(null, ParseLog.PullLastLineRead(file, "pap-rest"));
 		} catch (IOException e) {
 			fail();
 		}
+		
+		logger.debug("testPullLastLineReadFail: exit");
 	}
 
 	@Test
 	public void testPullOutLogValues(){
+		
+		logger.debug("testPullOutLogValues: enter");
 		//ERROR_VALUE
 		// Open the file
 		FileInputStream fstream;
 		try {
-			fstream = new FileInputStream("LineTest.txt");
+			fstream = new FileInputStream(testFile1);
 			BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
 			String strLine = br.readLine();
 			LogEntryObject retrunObject = ParseLog.pullOutLogValues(strLine, "ERROR");
@@ -186,15 +253,47 @@
 		} catch (IOException e) {
 			fail();
 		}	
-//		assert(true);
+
+		logger.debug("testPullOutLogValues: exit");
 	}
+	
+	@Test
+	public void testGetPaths(){
+		
+		logger.debug("testGetPaths: enter");
+		
+		try {
+			// valid test
+			String logPaths = "C:\\pap-log\\pap-rest.log;C:\\pap-log\\debug.log;C:\\pap-log\\error.log";
+			String [] retrunObject = ParseLog.getPaths(logPaths);
+			assertEquals(3, retrunObject.length);
+			
+			// valid test
+			logPaths = "C:\\pap-log\\pap-rest.log";
+			retrunObject = ParseLog.getPaths(logPaths);
+			assertEquals(1, retrunObject.length);
+			
+			// invalid test
+			logPaths = "";
+			retrunObject = ParseLog.getPaths(logPaths);
+			assertTrue(retrunObject == null);
+
+		} catch (Exception e) {
+			fail();
+		}	
+
+		logger.debug("testGetPaths: exit");
+	}	
+
 	@Test
 	public void testPullOutLogValuesSecond(){
+		
+		logger.debug("testPullOutLogValuesSecond: enter");
 		//ERROR_VALUE
 		// Open the file
 		FileInputStream fstream;
 		try {
-			fstream = new FileInputStream("LineTest.txt");
+			fstream = new FileInputStream(testFile1);
 			BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
 			String strLine = br.readLine();
 			strLine = br.readLine();
@@ -204,16 +303,20 @@
 		} catch (IOException e) {
 			fail();
 		}	
+		
+		logger.debug("testPullOutLogValuesSecond: exit");
 	}
-	
+
 	@Test
 	public void testPullOutLogValuesThird(){
+		
+		logger.debug("testPullOutLogValuesThird: enter");
 		//ERROR_VALUE
 		// Open the file
 		FileInputStream fstream;
 		try {
 			int number = 3;
-			fstream = new FileInputStream("LineTest.txt");
+			fstream = new FileInputStream(testFile1);
 			BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
 			String strLine = br.readLine();
 			for (int i =0; i < number; i++){
@@ -225,15 +328,19 @@
 		} catch (IOException e) {
 			fail();
 		}	
+		
+		logger.debug("testPullOutLogValuesThird: exit");
 	}
 
 	@Test
 	public void testPullOutLogValuesFourth(){
+		
+		logger.debug("testPullOutLogValuesFourth: enter");
 		// Open the file
 		FileInputStream fstream;
 		try {
 			int number = 4;
-			fstream = new FileInputStream("LineTest.txt");
+			fstream = new FileInputStream(testFile1);
 			BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
 			String strLine = br.readLine();
 			for (int i =0; i < number; i++){
@@ -245,15 +352,19 @@
 		} catch (IOException e) {
 			fail();
 		}	
+		
+		logger.debug("testPullOutLogValuesFourth: exit");
 	}
-	
+
 	@Test
 	public void testPullOutLogValuesFith(){
+		
+		logger.debug("testPullOutLogValuesFith: enter");
 		// Open the file
 		FileInputStream fstream;
 		try {
 			int number = 5;
-			fstream = new FileInputStream("LineTest.txt");
+			fstream = new FileInputStream(testFile1);
 			BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
 			String strLine = br.readLine();
 			for (int i =0; i < number; i++){
@@ -265,15 +376,19 @@
 		} catch (IOException e) {
 			fail();
 		}	
+		
+		logger.debug("testPullOutLogValuesFith: exit");
 	}
-	
+
 	@Test
 	public void testPullOutLogValuesSixth(){
+		
+		logger.debug("testPullOutLogValuesSixth: enter");
 		// Open the file
 		FileInputStream fstream;
 		try {
 			int number = 6;
-			fstream = new FileInputStream("LineTest.txt");
+			fstream = new FileInputStream(testFile1);
 			BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
 			String strLine = br.readLine();
 			for (int i =0; i < number; i++){
@@ -285,15 +400,19 @@
 		} catch (IOException e) {
 			fail();
 		}	
+		
+		logger.debug("testPullOutLogValuesSixth: exit");
 	}
 
 	@Test
 	public void testPullOutLogValuesSeven(){
+		
+		logger.debug("testPullOutLogValuesSeven: enter");
 		// Open the file
 		FileInputStream fstream;
 		try {
 			int number = 7;
-			fstream = new FileInputStream("LineTest.txt");
+			fstream = new FileInputStream(testFile1);
 			BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
 			String strLine = br.readLine();
 			for (int i =0; i < number; i++){
@@ -305,15 +424,19 @@
 		} catch (IOException e) {
 			fail();
 		}	
+		
+		logger.debug("testPullOutLogValuesSeven: exit");
 	}
-	
+
 	@Test
 	public void testPullOutLogValuesEight(){
+		
+		logger.debug("testPullOutLogValuesEight: enter");
 		// Open the file
 		FileInputStream fstream;
 		try {
 			int number = 8;
-			fstream = new FileInputStream("LineTest.txt");
+			fstream = new FileInputStream(testFile1);
 			BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
 			String strLine = br.readLine();
 			for (int i =0; i < number; i++){
@@ -325,17 +448,26 @@
 		} catch (IOException e) {
 			fail();
 		}	
+		
+		logger.debug("testPullOutLogValuesEight: exit");
 	}
-	
+
 	@Test
 	public void testPullOutLogValuesNull(){
+		
+		logger.debug("testPullOutLogValuesNull: enter");
 		// Open the file
 		LogEntryObject retrunObject = ParseLog.pullOutLogValues("", "Console");
 		assertEquals(null, retrunObject);
+		
+		logger.debug("testPullOutLogValuesNull: exit");
 	}
-	
+
 	@Test
 	public void testLogEntryObject(){
+		
+		logger.debug("testLogEntryObject: enter");
+		
 		Date date = new Date();
 	 
 		// Open the file
@@ -349,10 +481,15 @@
 		assertEquals("pap", logObject.getSystemType());
 		assertEquals(date, logObject.getDate());
 		assertEquals("remote", logObject.getRemote());
+		
+		logger.debug("testLogEntryObject: exit");
 	}
 
 	@Test
 	public void testProcess(){
+		
+		logger.debug("testProcess: enter");
+		
 		String line = "2015-04-01 09:13:44.947  DEBUG 17482 --- [nio-8480-exec-7] c.a.l.ecomp.policy.std.StdPolicyConfig   : config Retrieved ";
 	
 		im = Mockito.mock(IntegrityMonitor.class);
@@ -362,6 +499,8 @@
 			fail();
 		}
 		Mockito.doNothing().when(im).endTransaction();
-		ParseLog.process(line, "pap");
+		ParseLog.process(line, "pap", LOGTYPE.INFO);
+		
+		logger.debug("testProcess: exit");
 	}
 }
\ No newline at end of file
diff --git a/LogParser/src/test/resources/LineTest.txt b/LogParser/src/test/resources/LineTest.txt
new file mode 100644
index 0000000..32ec6cb
--- /dev/null
+++ b/LogParser/src/test/resources/LineTest.txt
@@ -0,0 +1,12 @@
+2016-04-26T00:00:00{GMT+0}+00:00|||Thread-5||||ERROR|||localhost.com||org.openecomp.policy.im.IntegrityMonitor.writeFpc(IntegrityMonitor.java:377)||ERROR_VALUE
+2016-04-27T11:22:08{GMT+0}+00:00|||main||||INFO|||||org.openecomp.xacml.parser.ParseLog.main(ParseLog.java:86)||File Line Count: 18409 value read in: 0
+2016-04-27T11:22:48{GMT+0}+00:00|||Thread-0||||INFO|||||org.openecomp.xacml.parser.ParseLog$1.lambda$0(ParseLog.java:96)||Last line Read: 12
+2015_10_02_15_11_19_006 [http-nio-8081-exec-10] INFO  corg.openecomp.research.xacml.rest.XACMLPdpServlet.doPutConfig(XACMLPdpServlet.java:409)- Success
+2015-04-01 09:13:44.947  INFO 17482 --- [nio-8480-exec-7] c.a.l.ecomp.policy.std.StdPolicyConfig   : config Retrieved 
+08-Apr-2015 10:31:26.503 WARNING [localhost-startStop-2] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads The web application [PyPDPServer] appears to have started a thread named [Grizzly(1) SelectorRunner] but has failed to stop it. This is very likely to create a memory leak. service Catalina08-Apr-2015 10:31:26.503 WARNING [localhost-startStop-2] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads The web application [PyPDPServer] appears to have started a thread named [Grizzly(1) SelectorRunner] but has failed to stop it. This is very likely to create a memory leak. 
+06-Mar-2015 11:50:06.243 SEVERE [main] org.apache.coyote.AbstractProtocol.init Failed to initialize end point associated with ProtocolHandler ["ajp-nio-8009"] java.net.BindException: Address already in use
+2015_09_30_10_39_31_675 [http-nio-8081-exec-1] ERROR org.openecomp.research.xacml.rest.XACMLPdpServlet.doPost(XACMLPdpServlet.java:644)- PE100 - Permissions Error: PEP not Authorized for making this Request!! 
+2015_03_17_15_01_08_348 [qtp1688376486-32] WARN  org.openecomp.research.xacml.admin.components.PolicyManagement$1.accept(PolicyManagement.java:184)- Filtering out: C:\git\D2PE-take2\policy-engine-prototype\XACML-PAP-ADMIN\workspace\admin\repository\com\.svnignore
+2017-05-31T22:18:42{GMT+0}+00:00|||Thread-4||||INFO|||||org.openecomp.xacml.parser.ParseLog$1.lambda$0(ParseLog.java:136)||Last-debug.log-line-Read:17
+2017-05-31T22:18:42{GMT+0}+00:00|||Thread-5||||INFO|||||org.openecomp.xacml.parser.ParseLog$2.lambda$0(ParseLog.java:194)||Last-error.log-line-Read:22
+2017-05-31T22:18:42{GMT+0}+00:00|||Thread-6||||INFO|||||org.openecomp.xacml.parser.ParseLog$3.lambda$0(ParseLog.java:250)||Last-pap-rest.log-line-Read:52
\ No newline at end of file
diff --git a/LogParser/src/test/resources/LineTest2.txt b/LogParser/src/test/resources/LineTest2.txt
new file mode 100644
index 0000000..2243960
--- /dev/null
+++ b/LogParser/src/test/resources/LineTest2.txt
@@ -0,0 +1,7 @@
+2016-04-26T00:00:00{GMT+0}+00:00|||Thread-5||||ERROR|||localhost.com||org.openecomp.ecomp.policy.im.IntegrityMonitor.writeFpc(IntegrityMonitor.java:377)||ERROR_VALUE
+2015_10_02_15_11_19_006 [http-nio-8081-exec-10] INFO  org.openecomp.research.xacml.rest.XACMLPdpServlet.doPutConfig(XACMLPdpServlet.java:409)- Success
+2015-04-01 09:13:44.947  INFO 17482 --- [nio-8480-exec-7] c.a.l.ecomp.policy.std.StdPolicyConfig   : config Retrieved 
+08-Apr-2015 10:31:26.503 WARNING [localhost-startStop-2] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads The web application [PyPDPServer] appears to have started a thread named [Grizzly(1) SelectorRunner] but has failed to stop it. This is very likely to create a memory leak. service Catalina08-Apr-2015 10:31:26.503 WARNING [localhost-startStop-2] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads The web application [PyPDPServer] appears to have started a thread named [Grizzly(1) SelectorRunner] but has failed to stop it. This is very likely to create a memory leak. 
+06-Mar-2015 11:50:06.243 SEVERE [main] org.apache.coyote.AbstractProtocol.init Failed to initialize end point associated with ProtocolHandler ["ajp-nio-8009"] java.net.BindException: Address already in use
+2015_09_30_10_39_31_675 [http-nio-8081-exec-1] ERROR org.openecomp.research.xacml.rest.XACMLPdpServlet.doPost(XACMLPdpServlet.java:644)- PE100 - Permissions Error: PEP not Authorized for making this Request!! 
+2015_03_17_15_01_08_348 [qtp1688376486-32] WARN  org.openecomp.research.xacml.admin.components.PolicyManagement$1.accept(PolicyManagement.java:184)- Filtering out: C:\git\D2PE-take2\policy-engine-prototype\XACML-PAP-ADMIN\workspace\admin\repository\com\.svnignore
\ No newline at end of file
diff --git a/LogParser/src/test/resources/test_config.properties b/LogParser/src/test/resources/test_config.properties
new file mode 100644
index 0000000..6512184
--- /dev/null
+++ b/LogParser/src/test/resources/test_config.properties
@@ -0,0 +1,31 @@
+###
+# ============LICENSE_START=======================================================
+# LogParser
+# ================================================================================
+# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+# ================================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# 
+#      http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=========================================================
+###
+
+
+RESOURCE_NAME=logparser_pap01
+JDBC_DRIVER=com.mysql.jdbc.Driver
+JDBC_URL=jdbc:mysql://localhost:3306/
+JDBC_USER=root
+JDBC_PASSWORD=password
+jmx_url=service:jmx:rmi:///jndi/rmi://localhost:9996/jmxrmi
+SERVER=https://localhost:9091/pap/
+LOGTYPE=PAP
+LOGPATH=/Workspaces/HealthCheck/pap-rest.log
+PARSERLOGPATH=IntegrityMonitor.log