You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by ch...@apache.org on 2015/04/15 21:11:46 UTC

airavata git commit: save detailed error when saving error details, convert testframework.properties to json - AIRAVATA-1672, AIRAVATA-1656

Repository: airavata
Updated Branches:
  refs/heads/master 2710f99ab -> 4e3fde8f7


save detailed error when saving error details, convert testframework.properties to json - AIRAVATA-1672, AIRAVATA-1656


Project: http://git-wip-us.apache.org/repos/asf/airavata/repo
Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/4e3fde8f
Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/4e3fde8f
Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/4e3fde8f

Branch: refs/heads/master
Commit: 4e3fde8f7f30f10a93c19a7fcdd7ae394bdd2888
Parents: 2710f99
Author: Chathuri Wimalasena <ka...@gmail.com>
Authored: Wed Apr 15 15:11:40 2015 -0400
Committer: Chathuri Wimalasena <ka...@gmail.com>
Committed: Wed Apr 15 15:11:40 2015 -0400

----------------------------------------------------------------------
 .../gfac/bes/handlers/AbstractSMSHandler.java   |   2 +-
 .../airavata/gfac/core/cpi/BetterGfacImpl.java  |  14 +-
 .../gfac/core/utils/OutHandlerWorker.java       |   2 +-
 .../handler/GSISSHDirectorySetupHandler.java    |   6 +-
 .../gfac/gsissh/handler/GSISSHInputHandler.java |   4 +-
 .../gsissh/handler/GSISSHOutputHandler.java     |   4 +-
 .../gsissh/handler/NewGSISSHOutputHandler.java  |   4 +-
 .../gsissh/provider/impl/GSISSHProvider.java    |   6 +-
 .../ssh/handler/AdvancedSCPInputHandler.java    |   2 +-
 .../ssh/handler/AdvancedSCPOutputHandler.java   |   6 +-
 .../gfac/ssh/handler/NewSSHOutputHandler.java   |   2 +-
 .../ssh/handler/SSHDirectorySetupHandler.java   |   5 +-
 .../gfac/ssh/handler/SSHInputHandler.java       |   4 +-
 .../gfac/ssh/handler/SSHOutputHandler.java      |   4 +-
 .../gfac/ssh/provider/impl/SSHProvider.java     |   8 +-
 .../airavata/gfac/ssh/util/GFACSSHUtils.java    |   2 +-
 .../gfac.cpi.service.thrift                     |   3 +-
 .../registry/jpa/impl/ExperimentRegistry.java   |   4 +
 .../jpa/resources/ErrorDetailResource.java      |   5 +-
 .../registry/jpa/resources/Utils.java           |   4 +-
 .../test-suite/multi-tenanted-airavata/pom.xml  |   5 +
 .../ApplicationRegister.java                    |  10 +-
 .../ComputeResourceRegister.java                |  31 +--
 .../ExperimentExecution.java                    |  58 +++--
 .../FrameworkBootstrapping.java                 |  10 +-
 .../multitenantedairavata/FrameworkSetup.java   |  39 +++-
 .../multitenantedairavata/GatewayRegister.java  |  24 +-
 .../TestFrameworkProps.java                     | 222 +++++++++++++++++++
 .../utils/FrameworkUtils.java                   |  16 +-
 .../utils/PropertyFileType.java                 |   4 +-
 .../utils/PropertyReader.java                   |   8 -
 .../utils/TestFrameworkConstants.java           |   1 +
 .../src/main/resources/test-framework.json      |  63 ++++++
 .../src/main/resources/test-framework.yaml      |  49 ++++
 34 files changed, 496 insertions(+), 135 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/airavata/blob/4e3fde8f/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/handlers/AbstractSMSHandler.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/handlers/AbstractSMSHandler.java b/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/handlers/AbstractSMSHandler.java
index c1c13be..a21706e 100644
--- a/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/handlers/AbstractSMSHandler.java
+++ b/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/handlers/AbstractSMSHandler.java
@@ -116,7 +116,7 @@ public abstract class AbstractSMSHandler implements BESConstants, GFacHandler{
 	    }catch (Exception e) {
         	log.error(e.getMessage());
             try {
-				GFacUtils.saveErrorDetails(jobExecutionContext, e.getLocalizedMessage(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR);
+				GFacUtils.saveErrorDetails(jobExecutionContext, e.getCause().toString(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR);
             } catch (GFacException e1) {
 				 log.error(e1.getLocalizedMessage());
             }  

http://git-wip-us.apache.org/repos/asf/airavata/blob/4e3fde8f/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/cpi/BetterGfacImpl.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/cpi/BetterGfacImpl.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/cpi/BetterGfacImpl.java
index 19c77ac..30b76ff 100644
--- a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/cpi/BetterGfacImpl.java
+++ b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/cpi/BetterGfacImpl.java
@@ -209,7 +209,7 @@ public class BetterGfacImpl implements GFac,Watcher {
             return submitJob(jobExecutionContext);
         } catch (Exception e) {
             log.error("Error inovoking the job with experiment ID: " + experimentID);
-            GFacUtils.saveErrorDetails(jobExecutionContext, e.getLocalizedMessage(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR );
+            GFacUtils.saveErrorDetails(jobExecutionContext, e.getCause().toString(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR );
             throw new GFacException(e);
         }
     }
@@ -504,13 +504,13 @@ public class BetterGfacImpl implements GFac,Watcher {
             }
             return true;
         } catch (ApplicationSettingsException e) {
-            GFacUtils.saveErrorDetails(jobExecutionContext, e.getLocalizedMessage(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR );
+            GFacUtils.saveErrorDetails(jobExecutionContext,  e.getCause().toString(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR );
             throw new GFacException("Error launching the Job",e);
         } catch (KeeperException e) {
-            GFacUtils.saveErrorDetails(jobExecutionContext, e.getLocalizedMessage(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR );
+            GFacUtils.saveErrorDetails(jobExecutionContext,  e.getCause().toString(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR );
             throw new GFacException("Error launching the Job",e);
         } catch (InterruptedException e) {
-            GFacUtils.saveErrorDetails(jobExecutionContext, e.getLocalizedMessage(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR );
+            GFacUtils.saveErrorDetails(jobExecutionContext,  e.getCause().toString(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR );
             throw new GFacException("Error launching the Job",e);
         }
     }
@@ -521,7 +521,7 @@ public class BetterGfacImpl implements GFac,Watcher {
             jobExecutionContext = createJEC(experimentID, taskID, gatewayID);
             return cancel(jobExecutionContext);
         } catch (Exception e) {
-            GFacUtils.saveErrorDetails(jobExecutionContext, e.getLocalizedMessage(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR );
+            GFacUtils.saveErrorDetails(jobExecutionContext,  e.getCause().toString(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR );
             log.error("Error inovoking the job with experiment ID: " + experimentID);
             throw new GFacException(e);
         }
@@ -678,7 +678,7 @@ public class BetterGfacImpl implements GFac,Watcher {
                         jobExecutionContext.getExperimentID(),
                         jobExecutionContext.getGatewayID());
 				monitorPublisher.publish(new JobStatusChangeEvent(JobState.FAILED, jobIdentity));
-                GFacUtils.saveErrorDetails(jobExecutionContext, e.getLocalizedMessage(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR );
+                GFacUtils.saveErrorDetails(jobExecutionContext,  e.getCause().toString(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR );
 			} catch (NullPointerException e1) {
 				log.error("Error occured during updating the statuses of Experiments,tasks or Job statuses to failed, "
 						+ "NullPointerException occurred because at this point there might not have Job Created", e1, e);
@@ -690,7 +690,7 @@ public class BetterGfacImpl implements GFac,Watcher {
                         jobExecutionContext.getExperimentID(),
                         jobExecutionContext.getGatewayID());
 				monitorPublisher.publish(new TaskStatusChangeEvent(TaskState.FAILED, taskIdentity));
-                GFacUtils.saveErrorDetails(jobExecutionContext, e.getLocalizedMessage(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR );
+                GFacUtils.saveErrorDetails(jobExecutionContext,  e.getCause().toString(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR );
 
 			}
 			jobExecutionContext.setProperty(ERROR_SENT, "true");

http://git-wip-us.apache.org/repos/asf/airavata/blob/4e3fde8f/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/utils/OutHandlerWorker.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/utils/OutHandlerWorker.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/utils/OutHandlerWorker.java
index 62d8689..143bb8c 100644
--- a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/utils/OutHandlerWorker.java
+++ b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/utils/OutHandlerWorker.java
@@ -66,7 +66,7 @@ public class OutHandlerWorker implements Runnable {
             //FIXME this is a case where the output retrieving fails even if the job execution was a success. Thus updating the task status
             monitorPublisher.publish(new TaskStatusChangeRequestEvent(TaskState.FAILED, taskIdentifier));
             try {
-                GFacUtils.saveErrorDetails(monitorID.getJobExecutionContext(), e.getLocalizedMessage(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR);
+                GFacUtils.saveErrorDetails(monitorID.getJobExecutionContext(),  e.getCause().toString(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR);
             } catch (GFacException e1) {
                 logger.error("Error while persisting error details", e);
             }

http://git-wip-us.apache.org/repos/asf/airavata/blob/4e3fde8f/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/handler/GSISSHDirectorySetupHandler.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/handler/GSISSHDirectorySetupHandler.java b/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/handler/GSISSHDirectorySetupHandler.java
index 968f159..3d60d6d 100644
--- a/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/handler/GSISSHDirectorySetupHandler.java
+++ b/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/handler/GSISSHDirectorySetupHandler.java
@@ -46,7 +46,7 @@ public class GSISSHDirectorySetupHandler extends AbstractRecoverableHandler {
             }
         } catch (Exception e) {
         	 try {
-  				GFacUtils.saveErrorDetails(jobExecutionContext, e.getLocalizedMessage(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR);
+  				GFacUtils.saveErrorDetails(jobExecutionContext,  e.getCause().toString(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR);
   			} catch (GFacException e1) {
   				 log.error(e1.getLocalizedMessage());
   			}
@@ -91,12 +91,12 @@ public class GSISSHDirectorySetupHandler extends AbstractRecoverableHandler {
 		} catch (Exception e) {
 			DataTransferDetails detail = new DataTransferDetails();
 			TransferStatus status = new TransferStatus();
-			detail.setTransferDescription(e.getLocalizedMessage());
+			detail.setTransferDescription("Working directory = " + jobExecutionContext.getWorkingDir());
 			status.setTransferState(TransferState.FAILED);
 			detail.setTransferStatus(status);
 			try {
 				registry.add(ChildDataType.DATA_TRANSFER_DETAIL, detail, jobExecutionContext.getTaskData().getTaskID());
-				GFacUtils.saveErrorDetails(jobExecutionContext, e.getLocalizedMessage(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.FILE_SYSTEM_FAILURE);
+				GFacUtils.saveErrorDetails(jobExecutionContext,  e.getCause().toString(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.FILE_SYSTEM_FAILURE);
 			} catch (Exception e1) {
 				throw new GFacHandlerException("Error persisting status", e1, e1.getLocalizedMessage());
 			}

http://git-wip-us.apache.org/repos/asf/airavata/blob/4e3fde8f/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/handler/GSISSHInputHandler.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/handler/GSISSHInputHandler.java b/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/handler/GSISSHInputHandler.java
index 5ba3bf4..70706ae 100644
--- a/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/handler/GSISSHInputHandler.java
+++ b/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/handler/GSISSHInputHandler.java
@@ -102,7 +102,7 @@ public class GSISSHInputHandler extends AbstractRecoverableHandler {
                 } catch (ApplicationSettingsException e) {
                     log.error(e.getMessage());
                     try {
-                        GFacUtils.saveErrorDetails(jobExecutionContext, e.getLocalizedMessage(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR);
+                        GFacUtils.saveErrorDetails(jobExecutionContext,  e.getCause().toString(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR);
                     } catch (GFacException e1) {
                         log.error(e1.getLocalizedMessage());
                     }
@@ -164,7 +164,7 @@ public class GSISSHInputHandler extends AbstractRecoverableHandler {
             detail.setTransferDescription(e.getLocalizedMessage());
             detail.setTransferStatus(status);
             try {
-                GFacUtils.saveErrorDetails(jobExecutionContext, e.getLocalizedMessage(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.FILE_SYSTEM_FAILURE);
+                GFacUtils.saveErrorDetails(jobExecutionContext,  e.getCause().toString(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.FILE_SYSTEM_FAILURE);
                 registry.add(ChildDataType.DATA_TRANSFER_DETAIL, detail, jobExecutionContext.getTaskData().getTaskID());
             } catch (Exception e1) {
                 throw new GFacHandlerException("Error persisting status", e1, e1.getLocalizedMessage());

http://git-wip-us.apache.org/repos/asf/airavata/blob/4e3fde8f/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/handler/GSISSHOutputHandler.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/handler/GSISSHOutputHandler.java b/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/handler/GSISSHOutputHandler.java
index e28d0af..1064e1c 100644
--- a/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/handler/GSISSHOutputHandler.java
+++ b/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/handler/GSISSHOutputHandler.java
@@ -68,7 +68,7 @@ public class GSISSHOutputHandler extends AbstractRecoverableHandler {
             }
         }  catch (Exception e) {
         	 try {
-  				GFacUtils.saveErrorDetails(jobExecutionContext, e.getLocalizedMessage(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR);
+  				GFacUtils.saveErrorDetails(jobExecutionContext,  e.getCause().toString(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR);
   			} catch (GFacException e1) {
   				 log.error(e1.getLocalizedMessage());
   			}  
@@ -305,7 +305,7 @@ public class GSISSHOutputHandler extends AbstractRecoverableHandler {
                 detail.setTransferStatus(status);
                 detail.setTransferDescription(e.getLocalizedMessage());
                 registry.add(ChildDataType.DATA_TRANSFER_DETAIL, detail, jobExecutionContext.getTaskData().getTaskID());
-                GFacUtils.saveErrorDetails(jobExecutionContext, e.getLocalizedMessage(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.FILE_SYSTEM_FAILURE);
+                GFacUtils.saveErrorDetails(jobExecutionContext,  e.getCause().toString(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.FILE_SYSTEM_FAILURE);
             } catch (Exception e1) {
                 throw new GFacHandlerException("Error persisting status", e1, e1.getLocalizedMessage());
             }

http://git-wip-us.apache.org/repos/asf/airavata/blob/4e3fde8f/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/handler/NewGSISSHOutputHandler.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/handler/NewGSISSHOutputHandler.java b/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/handler/NewGSISSHOutputHandler.java
index 77c6a8e..f4aaf72 100644
--- a/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/handler/NewGSISSHOutputHandler.java
+++ b/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/handler/NewGSISSHOutputHandler.java
@@ -32,7 +32,7 @@ public class NewGSISSHOutputHandler extends AbstractHandler{
 	            }
 	        }  catch (Exception e) {
 	        	 try {
-	  				GFacUtils.saveErrorDetails(jobExecutionContext, e.getLocalizedMessage(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR);
+	  				GFacUtils.saveErrorDetails(jobExecutionContext,  e.getCause().toString(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR);
 	  			} catch (GFacException e1) {
 	  				 log.error(e1.getLocalizedMessage());
 	  			}  
@@ -53,7 +53,7 @@ public class NewGSISSHOutputHandler extends AbstractHandler{
 	        } catch (Exception e) {
 	            log.error(e.getMessage());
 	            try {
-	                GFacUtils.saveErrorDetails(jobExecutionContext, e.getLocalizedMessage(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR);
+	                GFacUtils.saveErrorDetails(jobExecutionContext,  e.getCause().toString(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR);
 	            } catch (GFacException e1) {
 	                log.error(e1.getLocalizedMessage());
 	            }

http://git-wip-us.apache.org/repos/asf/airavata/blob/4e3fde8f/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/provider/impl/GSISSHProvider.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/provider/impl/GSISSHProvider.java b/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/provider/impl/GSISSHProvider.java
index 8cbafc1..99a9e77 100644
--- a/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/provider/impl/GSISSHProvider.java
+++ b/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/provider/impl/GSISSHProvider.java
@@ -132,7 +132,7 @@ public class GSISSHProvider extends AbstractRecoverableProvider {
             log.error(error);
             jobDetails.setJobID("none");
             GFacUtils.saveJobStatus(jobExecutionContext, jobDetails, JobState.FAILED);
-            GFacUtils.saveErrorDetails(jobExecutionContext, error, CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR);
+            GFacUtils.saveErrorDetails(jobExecutionContext,  e.getCause().toString(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR);
             throw new GFacProviderException(error, e);
         } finally {
             log.info("Saving data for future recovery: ");
@@ -266,14 +266,14 @@ public class GSISSHProvider extends AbstractRecoverableProvider {
             log.error(error);
             jobDetails.setJobID("none");
             GFacUtils.saveJobStatus(jobExecutionContext, jobDetails, JobState.FAILED);
-            GFacUtils.saveErrorDetails(jobExecutionContext, error, CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR);
+            GFacUtils.saveErrorDetails(jobExecutionContext,  e.getCause().toString(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR);
             throw new GFacProviderException(error, e);
         } catch (Exception e) {
             String error = "Error submitting the job to host " + jobExecutionContext.getHostName() + " message: " + e.getMessage();
             log.error(error);
             jobDetails.setJobID("none");
             GFacUtils.saveJobStatus(jobExecutionContext, jobDetails, JobState.FAILED);
-            GFacUtils.saveErrorDetails(jobExecutionContext, error, CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR);
+            GFacUtils.saveErrorDetails(jobExecutionContext,  e.getCause().toString(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR);
             throw new GFacProviderException(error, e);
         }
     }

http://git-wip-us.apache.org/repos/asf/airavata/blob/4e3fde8f/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/AdvancedSCPInputHandler.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/AdvancedSCPInputHandler.java b/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/AdvancedSCPInputHandler.java
index f3dd193..a300063 100644
--- a/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/AdvancedSCPInputHandler.java
+++ b/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/AdvancedSCPInputHandler.java
@@ -200,7 +200,7 @@ public class AdvancedSCPInputHandler extends AbstractRecoverableHandler {
         } catch (Exception e) {
             log.error(e.getMessage());
             try {
-                GFacUtils.saveErrorDetails(jobExecutionContext, e.getLocalizedMessage(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR);
+                GFacUtils.saveErrorDetails(jobExecutionContext,  e.getCause().toString(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR);
             } catch (GFacException e1) {
                 log.error(e1.getLocalizedMessage());
             }

http://git-wip-us.apache.org/repos/asf/airavata/blob/4e3fde8f/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/AdvancedSCPOutputHandler.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/AdvancedSCPOutputHandler.java b/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/AdvancedSCPOutputHandler.java
index e81979d..d1739c5 100644
--- a/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/AdvancedSCPOutputHandler.java
+++ b/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/AdvancedSCPOutputHandler.java
@@ -108,7 +108,7 @@ public class AdvancedSCPOutputHandler extends AbstractHandler {
                 } catch (ApplicationSettingsException e) {
                     log.error(e.getMessage());
                     try {
-         				GFacUtils.saveErrorDetails(jobExecutionContext, e.getLocalizedMessage(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR);
+         				GFacUtils.saveErrorDetails(jobExecutionContext,  e.getCause().toString(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR);
          			} catch (GFacException e1) {
          				 log.error(e1.getLocalizedMessage());
          			}
@@ -189,7 +189,7 @@ public class AdvancedSCPOutputHandler extends AbstractHandler {
            registry.add(ChildDataType.EXPERIMENT_OUTPUT, outputArray, jobExecutionContext.getExperimentID());
         } catch (SSHApiException e) {
             try {
-				GFacUtils.saveErrorDetails(jobExecutionContext, e.getLocalizedMessage(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR);
+				GFacUtils.saveErrorDetails(jobExecutionContext,  e.getCause().toString(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR);
 			} catch (GFacException e1) {
 				 log.error(e1.getLocalizedMessage());
 			}
@@ -198,7 +198,7 @@ public class AdvancedSCPOutputHandler extends AbstractHandler {
             throw new GFacHandlerException(e);
         } catch (Exception e) {
         	 try {
- 				GFacUtils.saveErrorDetails(jobExecutionContext, e.getLocalizedMessage(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR);
+ 				GFacUtils.saveErrorDetails(jobExecutionContext,  e.getCause().toString(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR);
  			} catch (GFacException e1) {
  				 log.error(e1.getLocalizedMessage());
  			}

http://git-wip-us.apache.org/repos/asf/airavata/blob/4e3fde8f/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/NewSSHOutputHandler.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/NewSSHOutputHandler.java b/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/NewSSHOutputHandler.java
index 5b754f9..5a64521 100644
--- a/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/NewSSHOutputHandler.java
+++ b/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/NewSSHOutputHandler.java
@@ -42,7 +42,7 @@ public class NewSSHOutputHandler extends AbstractHandler{
 	        } catch (Exception e) {
 	            log.error(e.getMessage());
 	            try {
-	                GFacUtils.saveErrorDetails(jobExecutionContext, e.getLocalizedMessage(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR);
+	                GFacUtils.saveErrorDetails(jobExecutionContext,  e.getCause().toString(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR);
 	            } catch (GFacException e1) {
 	                log.error(e1.getLocalizedMessage());
 	            }

http://git-wip-us.apache.org/repos/asf/airavata/blob/4e3fde8f/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/SSHDirectorySetupHandler.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/SSHDirectorySetupHandler.java b/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/SSHDirectorySetupHandler.java
index 90dc70b..6ba4f75 100644
--- a/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/SSHDirectorySetupHandler.java
+++ b/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/SSHDirectorySetupHandler.java
@@ -47,7 +47,7 @@ public class SSHDirectorySetupHandler extends AbstractHandler {
         } catch (Exception e) {
             log.error(e.getMessage());
             try {
- 				GFacUtils.saveErrorDetails(jobExecutionContext, e.getLocalizedMessage(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR);
+ 				GFacUtils.saveErrorDetails(jobExecutionContext,  e.getCause().toString(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR);
  			} catch (GFacException e1) {
  				 log.error(e1.getLocalizedMessage());
  			}
@@ -89,9 +89,10 @@ public class SSHDirectorySetupHandler extends AbstractHandler {
             TransferStatus status = new TransferStatus();
             status.setTransferState(TransferState.FAILED);
             detail.setTransferStatus(status);
+            detail.setTransferDescription("Working directory = " + jobExecutionContext.getWorkingDir());
             try {
                 registry.add(ChildDataType.DATA_TRANSFER_DETAIL, detail, jobExecutionContext.getTaskData().getTaskID());
-                GFacUtils.saveErrorDetails(jobExecutionContext, e.getLocalizedMessage(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.FILE_SYSTEM_FAILURE);
+                GFacUtils.saveErrorDetails(jobExecutionContext,  e.getCause().toString(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.FILE_SYSTEM_FAILURE);
             } catch (Exception e1) {
                 throw new GFacHandlerException("Error persisting status", e1, e1.getLocalizedMessage());
             }

http://git-wip-us.apache.org/repos/asf/airavata/blob/4e3fde8f/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/SSHInputHandler.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/SSHInputHandler.java b/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/SSHInputHandler.java
index 4d47128..13090eb 100644
--- a/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/SSHInputHandler.java
+++ b/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/SSHInputHandler.java
@@ -67,7 +67,7 @@ public class SSHInputHandler extends AbstractHandler {
                 } catch (ApplicationSettingsException e) {
                     log.error(e.getMessage());
                     try {
-         				GFacUtils.saveErrorDetails(jobExecutionContext, e.getLocalizedMessage(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR);
+         				GFacUtils.saveErrorDetails(jobExecutionContext,  e.getCause().toString(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR);
          			} catch (GFacException e1) {
          				 log.error(e1.getLocalizedMessage());
          			}
@@ -136,7 +136,7 @@ public class SSHInputHandler extends AbstractHandler {
             status.setTransferState(TransferState.FAILED);
             detail.setTransferStatus(status);
             try {
-                GFacUtils.saveErrorDetails(jobExecutionContext, e.getLocalizedMessage(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.FILE_SYSTEM_FAILURE);
+                GFacUtils.saveErrorDetails(jobExecutionContext,  e.getCause().toString(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.FILE_SYSTEM_FAILURE);
                 registry.add(ChildDataType.DATA_TRANSFER_DETAIL, detail, jobExecutionContext.getTaskData().getTaskID());
             } catch (Exception e1) {
                 throw new GFacHandlerException("Error persisting status", e1, e1.getLocalizedMessage());

http://git-wip-us.apache.org/repos/asf/airavata/blob/4e3fde8f/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/SSHOutputHandler.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/SSHOutputHandler.java b/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/SSHOutputHandler.java
index b574540..1210c83 100644
--- a/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/SSHOutputHandler.java
+++ b/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/SSHOutputHandler.java
@@ -61,7 +61,7 @@ public class SSHOutputHandler extends AbstractHandler {
         } catch (Exception e) {
             log.error(e.getMessage());
             try {
-                GFacUtils.saveErrorDetails(jobExecutionContext, e.getLocalizedMessage(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR);
+                GFacUtils.saveErrorDetails(jobExecutionContext,  e.getCause().toString(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR);
             } catch (GFacException e1) {
                 log.error(e1.getLocalizedMessage());
             }
@@ -227,7 +227,7 @@ public class SSHOutputHandler extends AbstractHandler {
                 status.setTransferState(TransferState.FAILED);
                 detail.setTransferStatus(status);
                 registry.add(ChildDataType.DATA_TRANSFER_DETAIL, detail, jobExecutionContext.getTaskData().getTaskID());
-                GFacUtils.saveErrorDetails(jobExecutionContext, e.getLocalizedMessage(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.FILE_SYSTEM_FAILURE);
+                GFacUtils.saveErrorDetails(jobExecutionContext,  e.getCause().toString(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.FILE_SYSTEM_FAILURE);
             } catch (Exception e1) {
                 throw new GFacHandlerException("Error persisting status", e1, e1.getLocalizedMessage());
             }

http://git-wip-us.apache.org/repos/asf/airavata/blob/4e3fde8f/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/provider/impl/SSHProvider.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/provider/impl/SSHProvider.java b/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/provider/impl/SSHProvider.java
index b2fbcd2..70fec1f 100644
--- a/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/provider/impl/SSHProvider.java
+++ b/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/provider/impl/SSHProvider.java
@@ -182,14 +182,14 @@ public class SSHProvider extends AbstractProvider {
                     log.error(error);
                     jobDetails.setJobID("none");
                     GFacUtils.saveJobStatus(jobExecutionContext, jobDetails, JobState.FAILED);
-                    GFacUtils.saveErrorDetails(jobExecutionContext, error, CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR);
+                    GFacUtils.saveErrorDetails(jobExecutionContext,  e.getCause().toString(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR);
                     throw new GFacProviderException(error, e);
                 } catch (Exception e) {
                     String error = "Error submitting the job to host " + jobExecutionContext.getHostName() + " message: " + e.getMessage();
                     log.error(error);
                     jobDetails.setJobID("none");
                     GFacUtils.saveJobStatus(jobExecutionContext, jobDetails, JobState.FAILED);
-                    GFacUtils.saveErrorDetails(jobExecutionContext, error, CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR);
+                    GFacUtils.saveErrorDetails(jobExecutionContext,  e.getCause().toString(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR);
                     throw new GFacProviderException(error, e);
                 }
             } catch (GFacException e) {
@@ -234,14 +234,14 @@ public class SSHProvider extends AbstractProvider {
                 log.error(error);
                 jobDetails.setJobID("none");
                 GFacUtils.saveJobStatus(jobExecutionContext, jobDetails, JobState.FAILED);
-                GFacUtils.saveErrorDetails(jobExecutionContext, error, CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR);
+                GFacUtils.saveErrorDetails(jobExecutionContext,  e.getCause().toString(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR);
                 throw new GFacProviderException(error, e);
             } catch (Exception e) {
                 String error = "Error submitting the job to host " + jobExecutionContext.getHostName() + " message: " + e.getMessage();
                 log.error(error);
                 jobDetails.setJobID("none");
                 GFacUtils.saveJobStatus(jobExecutionContext, jobDetails, JobState.FAILED);
-                GFacUtils.saveErrorDetails(jobExecutionContext, error, CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR);
+                GFacUtils.saveErrorDetails(jobExecutionContext,  e.getCause().toString(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR);
                 throw new GFacProviderException(error, e);
             }
             // we know this host is type GsiSSHHostType

http://git-wip-us.apache.org/repos/asf/airavata/blob/4e3fde8f/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/util/GFACSSHUtils.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/util/GFACSSHUtils.java b/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/util/GFACSSHUtils.java
index 9628585..f4b3387 100644
--- a/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/util/GFACSSHUtils.java
+++ b/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/util/GFACSSHUtils.java
@@ -504,7 +504,7 @@ public class GFACSSHUtils {
             } catch (ApplicationSettingsException e) {
                 logger.error(e.getMessage());
                 try {
-                    GFacUtils.saveErrorDetails(jobExecutionContext, e.getLocalizedMessage(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR);
+                    GFacUtils.saveErrorDetails(jobExecutionContext,  e.getCause().toString(), CorrectiveAction.CONTACT_SUPPORT, ErrorCategory.AIRAVATA_INTERNAL_ERROR);
                 } catch (GFacException e1) {
                     logger.error(e1.getLocalizedMessage());
                 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/4e3fde8f/modules/gfac/gfac-thrift-descriptions/gfac.cpi.service.thrift
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-thrift-descriptions/gfac.cpi.service.thrift b/modules/gfac/gfac-thrift-descriptions/gfac.cpi.service.thrift
index 3c3fa51..30f19a6 100644
--- a/modules/gfac/gfac-thrift-descriptions/gfac.cpi.service.thrift
+++ b/modules/gfac/gfac-thrift-descriptions/gfac.cpi.service.thrift
@@ -61,5 +61,6 @@ service GfacService {
      *
     **/
   bool cancelJob (1: required string experimentId,
-                  2: required string taskId)
+                  2: required string taskId,
+                  3: required string gatewayId)
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/4e3fde8f/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/ExperimentRegistry.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/ExperimentRegistry.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/ExperimentRegistry.java
index 113a966..ec2c081 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/ExperimentRegistry.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/ExperimentRegistry.java
@@ -1268,12 +1268,16 @@ public class ExperimentRegistry {
 
     public String addDataTransferDetails(DataTransferDetails transferDetails, String taskId) throws RegistryException {
         try {
+            if (transferDetails.getTransferDescription() == null){
+                throw new RegistryException("Data transfer description cannot be empty");
+            }
             ExperimentResource experiment = (ExperimentResource) gatewayResource.create(ResourceType.EXPERIMENT);
             WorkflowNodeDetailResource workflowNode = (WorkflowNodeDetailResource) experiment.create(ResourceType.WORKFLOW_NODE_DETAIL);
             TaskDetailResource taskDetail = workflowNode.getTaskDetail(taskId);
             DataTransferDetailResource resource = (DataTransferDetailResource) taskDetail.create(ResourceType.DATA_TRANSFER_DETAIL);
             resource.setTaskDetailResource(taskDetail);
             resource.setTransferId(getDataTransferID(taskId));
+
             resource.setTransferDescription(transferDetails.getTransferDescription());
             resource.setCreationTime(AiravataUtils.getTime(transferDetails.getCreationTime()));
             resource.save();

http://git-wip-us.apache.org/repos/asf/airavata/blob/4e3fde8f/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ErrorDetailResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ErrorDetailResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ErrorDetailResource.java
index 95804bd..9299bad 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ErrorDetailResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ErrorDetailResource.java
@@ -200,7 +200,10 @@ public class ErrorDetailResource extends AbstractResource {
                 errorDetail.setNodeId(workflowNodeDetail.getNodeId());
             }
             errorDetail.setCreationTime(creationTime);
-            errorDetail.setActualErrorMsg(actualErrorMsg.toCharArray());
+            if (actualErrorMsg != null){
+                errorDetail.setActualErrorMsg(actualErrorMsg.toCharArray());
+            }
+
             errorDetail.setUserFriendlyErrorMsg(userFriendlyErrorMsg);
             errorDetail.setTransientPersistent(transientPersistent);
             errorDetail.setErrorCategory(errorCategory);

http://git-wip-us.apache.org/repos/asf/airavata/blob/4e3fde8f/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/Utils.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/Utils.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/Utils.java
index 7bf6cfd..a9e4a62 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/Utils.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/Utils.java
@@ -564,7 +564,9 @@ public class Utils {
             errorDetailResource.setErrorId(o.getErrorID());
             errorDetailResource.setJobId(o.getJobId());
             errorDetailResource.setCreationTime(o.getCreationTime());
-            errorDetailResource.setActualErrorMsg(new String(o.getActualErrorMsg()));
+            if (o.getActualErrorMsg() != null){
+                errorDetailResource.setActualErrorMsg(new String(o.getActualErrorMsg()));
+            }
             errorDetailResource.setUserFriendlyErrorMsg(o.getUserFriendlyErrorMsg());
             errorDetailResource.setTransientPersistent(o.isTransientPersistent());
             errorDetailResource.setErrorCategory(o.getErrorCategory());

http://git-wip-us.apache.org/repos/asf/airavata/blob/4e3fde8f/modules/test-suite/multi-tenanted-airavata/pom.xml
----------------------------------------------------------------------
diff --git a/modules/test-suite/multi-tenanted-airavata/pom.xml b/modules/test-suite/multi-tenanted-airavata/pom.xml
index a853d35..7af2864 100644
--- a/modules/test-suite/multi-tenanted-airavata/pom.xml
+++ b/modules/test-suite/multi-tenanted-airavata/pom.xml
@@ -74,6 +74,11 @@
             <artifactId>airavata-credential-store</artifactId>
             <version>${project.version}</version>
         </dependency>
+        <dependency>
+            <groupId>com.google.code.gson</groupId>
+            <artifactId>gson</artifactId>
+            <version>2.3.1</version>
+        </dependency>
         <!--<dependency>-->
             <!--<groupId>mysql</groupId>-->
             <!--<artifactId>mysql-connector-java</artifactId>-->

http://git-wip-us.apache.org/repos/asf/airavata/blob/4e3fde8f/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/ApplicationRegister.java
----------------------------------------------------------------------
diff --git a/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/ApplicationRegister.java b/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/ApplicationRegister.java
index 0a92f2e..7f0a3d3 100644
--- a/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/ApplicationRegister.java
+++ b/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/ApplicationRegister.java
@@ -52,13 +52,13 @@ public class ApplicationRegister {
     private List<String> gatewaysToAvoid;
 
 
-    public ApplicationRegister(Airavata.Client airavata) throws Exception {
+    public ApplicationRegister(Airavata.Client airavata, TestFrameworkProps props) throws Exception {
         this.airavata = airavata;
         allGateways = getAllGateways(airavata);
         applicationInterfaceListPerGateway = new HashMap<String, String>();
         applicationDeployementListPerGateway = new HashMap<String, String>();
         FrameworkUtils frameworkUtils = FrameworkUtils.getInstance();
-        gatewaysToAvoid = frameworkUtils.getGatewayListToAvoid();
+        gatewaysToAvoid = frameworkUtils.getGatewayListToAvoid(props.getSkippedGateways());
     }
 
     public List<Gateway> getAllGateways(Airavata.Client client) throws Exception{
@@ -140,13 +140,13 @@ public class ApplicationRegister {
         List<String> appModules = new ArrayList<String>();
         appModules.add(amberModuleId);
 
-        InputDataObjectType input1 = createAppInput("Heat_Restart_File", null,
+        InputDataObjectType input1 = createAppInput("heatRst", null,
                 DataType.URI, "-c", 1, true, true,false, "Heating up the system equilibration stage - 02_Heat.rst", null);
 
-        InputDataObjectType input2 = createAppInput("Production_Control_File", null,
+        InputDataObjectType input2 = createAppInput("prodIn", null,
                 DataType.URI, "-i ", 2, true, true, false, "Constant pressure and temperature for production stage - 03_Prod.in", null);
 
-        InputDataObjectType input3 = createAppInput("Parameter_Topology_File", null,
+        InputDataObjectType input3 = createAppInput("prmtop", null,
                 DataType.URI, "-p", 3, true, true, false, "Parameter and Topology coordinates - prmtop", null);
 
         List<InputDataObjectType> applicationInputs = new ArrayList<InputDataObjectType>();

http://git-wip-us.apache.org/repos/asf/airavata/blob/4e3fde8f/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/ComputeResourceRegister.java
----------------------------------------------------------------------
diff --git a/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/ComputeResourceRegister.java b/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/ComputeResourceRegister.java
index c6e2513..1127212 100644
--- a/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/ComputeResourceRegister.java
+++ b/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/ComputeResourceRegister.java
@@ -38,43 +38,26 @@ import java.util.*;
 public class ComputeResourceRegister {
     private Airavata.Client airavata;
     private List<String> computeResourceIds;
-    private PropertyReader propertyReader;
     private Map<String, String> loginNamesWithResourceMap;
     private Map<String, String> loginNamesWithResourceIds;
     private final static Logger logger = LoggerFactory.getLogger(ComputeResourceRegister.class);
+    private TestFrameworkProps properties;
 
-    public ComputeResourceRegister(Airavata.Client airavata) throws Exception {
+    public ComputeResourceRegister(Airavata.Client airavata, TestFrameworkProps props) throws Exception {
         this.airavata = airavata;
+        this.properties = props;
         computeResourceIds = new ArrayList<String>();
-        propertyReader = new PropertyReader();
         loginNamesWithResourceMap = getLoginNamesMap();
 
     }
 
     public Map<String, String> getLoginNamesMap() throws Exception {
         loginNamesWithResourceMap = new HashMap<String, String>();
-        List<String> loginNameList = new ArrayList<String>();
-        List<String> computerResources = new ArrayList<String>();
-        String loginNames = propertyReader.readProperty(TestFrameworkConstants.FrameworkPropertiesConstants.LOGIN_USERNAME_LIST, PropertyFileType.TEST_FRAMEWORK);
-        if (loginNames != null && !loginNames.isEmpty()){
-            String[] names = loginNames.split(",");
-            loginNameList = Arrays.asList(names);
-        }
-        String clist = propertyReader.readProperty(TestFrameworkConstants.FrameworkPropertiesConstants.COMPUTE_RESOURCE_LIST, PropertyFileType.TEST_FRAMEWORK);
-        if (clist != null && !clist.isEmpty()) {
-            String[] resources = clist.split(",");
-            computerResources = Arrays.asList(resources);
-        }
-
-        if (computerResources.size() == loginNameList.size()){
-            for (int i=0; i < computerResources.size(); i++){
-                loginNamesWithResourceMap.put(computerResources.get(i), loginNameList.get(i));
+        TestFrameworkProps.Resource[] resourcesWithloginName = properties.getResources();
+        if (resourcesWithloginName != null){
+            for (TestFrameworkProps.Resource resource : resourcesWithloginName){
+                loginNamesWithResourceMap.put(resource.getName(), resource.getLoginUser());
             }
-        }else {
-           logger.error("Each compute resource should have a login user name. Please check whether you specified them correctly " +
-                   "in test-framework.properties files..");
-            throw new Exception("Each compute resource should have a login user name. Please check whether you specified them correctly " +
-                    "in test-framework.properties files..");
         }
         return loginNamesWithResourceMap;
     }

http://git-wip-us.apache.org/repos/asf/airavata/blob/4e3fde8f/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/ExperimentExecution.java
----------------------------------------------------------------------
diff --git a/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/ExperimentExecution.java b/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/ExperimentExecution.java
index cc6bca6..17afc0b 100644
--- a/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/ExperimentExecution.java
+++ b/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/ExperimentExecution.java
@@ -65,22 +65,30 @@ public class ExperimentExecution {
     private PrintWriter resultWriter;
     private String testUser;
     private List<String> gatewaysToAvoid;
+    private TestFrameworkProps properties;
 
     public ExperimentExecution(Airavata.Client airavata,
-                               Map<String, String> tokenMap ) throws Exception {
+                               Map<String, String> tokenMap,
+                               TestFrameworkProps props) throws Exception {
         this.airavata = airavata;
         this.csTokens = tokenMap;
         this.appInterfaceMap = getApplicationMap(tokenMap);
         this.propertyReader = new PropertyReader();
+        this.properties = props;
         FrameworkUtils frameworkUtils = FrameworkUtils.getInstance();
-        testUser = frameworkUtils.getTestUserName();
-        gatewaysToAvoid = frameworkUtils.getGatewayListToAvoid();
+        testUser = props.getTestUserName();
+        gatewaysToAvoid = frameworkUtils.getGatewayListToAvoid(properties.getSkippedGateways());
         this.projectsMap = getProjects(tokenMap);
         this.experimentsWithTokens = new HashMap<String, String>();
         this.experimentsWithGateway = new HashMap<String, String>();
-        String resultFileLocation = propertyReader.readProperty(TestFrameworkConstants.FrameworkPropertiesConstants.RESULT_WRITE_LOCATION, PropertyFileType.TEST_FRAMEWORK);
-        String resultFileName = getResultFileName();
-        File resultFile = new File(resultFileLocation + resultFileName);
+        String resultFileLocation = properties.getResultFileLoc();
+        String resultFileName = resultFileLocation + getResultFileName();
+
+        File resultFolder = new File(resultFileLocation);
+        if (!resultFolder.exists()){
+            resultFolder.mkdir();
+        }
+        File resultFile = new File(resultFileName);
         resultWriter = new PrintWriter(resultFile, "UTF-8");
         resultWriter.println("Test Framework Results");
         resultWriter.println("========================================");
@@ -228,12 +236,15 @@ public class ExperimentExecution {
                             System.out.println("################ Experiment : " + expId + " FAILED ###################");
                             Experiment experiment = airavata.getExperiment(expId);
                             List<ErrorDetails> errors = experiment.getErrors();
-                            for (ErrorDetails errorDetails : errors) {
-                                System.out.println(errorDetails.getActualErrorMessage());
-                                resultWriter.println("Actual Error : " + j + " : " + errorDetails.getActualErrorMessage());
-                                resultWriter.println("User Friendly Message : " + j + " : " + errorDetails.getUserFriendlyMessage());
-                                resultWriter.println("Corrective Action : " + j + " : " + errorDetails.getCorrectiveAction());
+                            if (errors != null && !errors.isEmpty()){
+                                for (ErrorDetails errorDetails : errors) {
+                                    System.out.println(errorDetails.getActualErrorMessage());
+                                    resultWriter.println("Actual Error : " + j + " : " + errorDetails.getActualErrorMessage());
+                                    resultWriter.println("User Friendly Message : " + j + " : " + errorDetails.getUserFriendlyMessage());
+                                    resultWriter.println("Corrective Action : " + j + " : " + errorDetails.getCorrectiveAction());
+                                }
                             }
+
                             resultWriter.println("End of Results for Experiment : " + expId );
                             resultWriter.println("=====================================================================");
                             resultWriter.println();
@@ -272,6 +283,14 @@ public class ExperimentExecution {
 
     public void createAmberExperiment () throws Exception{
         try {
+            TestFrameworkProps.Application[] applications = properties.getApplications();
+            Map<String, String> userGivenAmberInputs = new HashMap<>();
+            for (TestFrameworkProps.Application application : applications){
+                if (application.getName().equals(TestFrameworkConstants.AppcatalogConstants.AMBER_APP_NAME)){
+                    userGivenAmberInputs = application.getInputs();
+                }
+            }
+
             for (String gatewayId : csTokens.keySet()){
                 String token = csTokens.get(gatewayId);
                 Map<String, String> appsWithNames = appInterfaceMap.get(gatewayId);
@@ -280,20 +299,13 @@ public class ExperimentExecution {
                     List<OutputDataObjectType> appOutputs = airavata.getApplicationOutputs(appId);
                     String appName = appsWithNames.get(appId);
                     if (appName.equals(TestFrameworkConstants.AppcatalogConstants.AMBER_APP_NAME)){
-                        String heatRSTFile = propertyReader.readProperty(TestFrameworkConstants.AppcatalogConstants.AMBER_HEAT_RST_LOCATION, PropertyFileType.TEST_FRAMEWORK);
-                        String prodInFile = propertyReader.readProperty(TestFrameworkConstants.AppcatalogConstants.AMBER_PROD_IN_LOCATION, PropertyFileType.TEST_FRAMEWORK);
-                        String prmTopFile = propertyReader.readProperty(TestFrameworkConstants.AppcatalogConstants.AMBER_PRMTOP_LOCATION, PropertyFileType.TEST_FRAMEWORK);
-
-                        for (InputDataObjectType inputDataObjectType : applicationInputs) {
-                            if (inputDataObjectType.getName().equalsIgnoreCase("Heat_Restart_File")) {
-                                inputDataObjectType.setValue(heatRSTFile);
-                            } else if (inputDataObjectType.getName().equalsIgnoreCase("Production_Control_File")) {
-                                inputDataObjectType.setValue(prodInFile);
-                            } else if (inputDataObjectType.getName().equalsIgnoreCase("Parameter_Topology_File")) {
-                                inputDataObjectType.setValue(prmTopFile);
+                        for (String inputName : userGivenAmberInputs.keySet()){
+                            for (InputDataObjectType inputDataObjectType : applicationInputs) {
+                                if (inputDataObjectType.getName().equalsIgnoreCase(inputName)) {
+                                    inputDataObjectType.setValue(userGivenAmberInputs.get(inputName));
+                                }
                             }
                         }
-
                         List<Project> projectsPerGateway = projectsMap.get(gatewayId);
                         String projectID = null;
                         if (projectsPerGateway != null && !projectsPerGateway.isEmpty()){

http://git-wip-us.apache.org/repos/asf/airavata/blob/4e3fde8f/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/FrameworkBootstrapping.java
----------------------------------------------------------------------
diff --git a/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/FrameworkBootstrapping.java b/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/FrameworkBootstrapping.java
index a3b3825..002f316 100644
--- a/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/FrameworkBootstrapping.java
+++ b/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/FrameworkBootstrapping.java
@@ -37,7 +37,7 @@ public class FrameworkBootstrapping {
     private static boolean runAll = false;
     private static boolean regApps = false;
     private static boolean expExec = false;
-    private static PropertyReader propertyReader;
+    private static TestFrameworkProps properties;
     private static Map<String, String> tokens;
     private static ExperimentExecution experimentExecution;
 
@@ -45,7 +45,7 @@ public class FrameworkBootstrapping {
         parseArguments(args);
         try {
             FrameworkSetup setup = FrameworkSetup.getInstance();
-            propertyReader = new PropertyReader();
+            properties = setup.getTestFrameworkProps();
 
             if (runAll){
                 setup.getGatewayRegister().createGateways();
@@ -57,7 +57,7 @@ public class FrameworkBootstrapping {
                 setup.getComputeResourceRegister().registerGatewayResourceProfile();
                 setup.getApplicationRegister().addApplications();
                 logger.info("Applications registered for each each gateway...");
-                experimentExecution = new ExperimentExecution(setup.getAiravata(), tokens);
+                experimentExecution = new ExperimentExecution(setup.getAiravata(), tokens, properties);
                 experimentExecution.createEchoExperiment();
                 experimentExecution.createAmberExperiment();
                 experimentExecution.launchExperiments();
@@ -74,7 +74,7 @@ public class FrameworkBootstrapping {
                 logger.info("Applications registered for each each gateway...");
             }else if (expExec){
                 tokens = readTokens();
-                experimentExecution = new ExperimentExecution(setup.getAiravata(), tokens);
+                experimentExecution = new ExperimentExecution(setup.getAiravata(), tokens, setup.getTestFrameworkProps());
                 experimentExecution.createEchoExperiment();
                 experimentExecution.createAmberExperiment();
                 experimentExecution.launchExperiments();
@@ -87,7 +87,7 @@ public class FrameworkBootstrapping {
 
     public static Map<String, String> readTokens () throws Exception{
         Map<String, String> tokens = new HashMap<String, String>();
-        String fileLocation = propertyReader.readProperty(TestFrameworkConstants.FrameworkPropertiesConstants.TOKEN_WRITE_LOCATION, PropertyFileType.TEST_FRAMEWORK);
+        String fileLocation = properties.getTokenFileLoc();
         String fileName = TestFrameworkConstants.CredentialStoreConstants.TOKEN_FILE_NAME;
         String path = fileLocation + File.separator + fileName;
         File tokenFile = new File(path);

http://git-wip-us.apache.org/repos/asf/airavata/blob/4e3fde8f/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/FrameworkSetup.java
----------------------------------------------------------------------
diff --git a/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/FrameworkSetup.java b/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/FrameworkSetup.java
index 306a601..edad95e 100644
--- a/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/FrameworkSetup.java
+++ b/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/FrameworkSetup.java
@@ -21,16 +21,26 @@
 
 package org.apache.airavata.testsuite.multitenantedairavata;
 
+import com.google.gson.Gson;
+import com.google.gson.JsonElement;
 import org.apache.airavata.api.Airavata;
+import org.apache.airavata.testsuite.multitenantedairavata.utils.TestFrameworkConstants;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.URL;
+
 public class FrameworkSetup {
     private static FrameworkSetup instance = new FrameworkSetup();
     private GatewayRegister gatewayRegister;
     private ComputeResourceRegister computeResourceRegister;
     private ApplicationRegister applicationRegister;
     private Airavata.Client airavata;
+    private TestFrameworkProps testFrameworkProps;
     private final static Logger logger = LoggerFactory.getLogger(FrameworkSetup.class);
 
     public static FrameworkSetup getInstance() {
@@ -41,14 +51,29 @@ public class FrameworkSetup {
         try {
             AiravataClient airavataClient = AiravataClient.getInstance();
             this.airavata = airavataClient.getAiravataClient();
-            gatewayRegister = new GatewayRegister(airavata);
-            applicationRegister = new ApplicationRegister(airavata);
-            computeResourceRegister = new ComputeResourceRegister(airavata);
+            Gson gson = new Gson();
+            testFrameworkProps = gson.fromJson(getTestFrameworkJSON(), TestFrameworkProps.class);
+
+            gatewayRegister = new GatewayRegister(airavata, testFrameworkProps);
+            applicationRegister = new ApplicationRegister(airavata, testFrameworkProps);
+            computeResourceRegister = new ComputeResourceRegister(airavata, testFrameworkProps);
         } catch (Exception e) {
             logger.error("Error while creating airavata client instance", e);
         }
     }
 
+    private String getTestFrameworkJSON () throws IOException {
+        InputStream inputStream = FrameworkSetup.class.getClassLoader().getResourceAsStream(TestFrameworkConstants.TEST_FREAMEWORK_JSON);
+        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
+        String line;
+        String content = "";
+        while ((line = reader.readLine()) != null) {
+            content += line;
+        }
+        System.out.println(content);
+        return content;
+    }
+
     public GatewayRegister getGatewayRegister() {
         return gatewayRegister;
     }
@@ -80,4 +105,12 @@ public class FrameworkSetup {
     public void setComputeResourceRegister(ComputeResourceRegister computeResourceRegister) {
         this.computeResourceRegister = computeResourceRegister;
     }
+
+    public TestFrameworkProps getTestFrameworkProps() {
+        return testFrameworkProps;
+    }
+
+    public void setTestFrameworkProps(TestFrameworkProps testFrameworkProps) {
+        this.testFrameworkProps = testFrameworkProps;
+    }
 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/4e3fde8f/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/GatewayRegister.java
----------------------------------------------------------------------
diff --git a/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/GatewayRegister.java b/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/GatewayRegister.java
index 7f40976..ebf1c80 100644
--- a/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/GatewayRegister.java
+++ b/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/GatewayRegister.java
@@ -59,17 +59,19 @@ public class GatewayRegister {
     private String testUser;
     private String testProject;
     private List<String> gatewaysToAvoid;
+    private TestFrameworkProps properties;
 
-    public GatewayRegister(Airavata.Client client) throws Exception{
+    public GatewayRegister(Airavata.Client client, TestFrameworkProps props) throws Exception{
         try {
             this.airavata = client;
             this.tokenMap = new HashMap<String, String>();
             this.projectMap = new HashMap<String, String>();
             propertyReader = new PropertyReader();
-            testUser = propertyReader.readProperty(TestFrameworkConstants.FrameworkPropertiesConstants.TEST_USER, PropertyFileType.TEST_FRAMEWORK);
-            testProject = propertyReader.readProperty(TestFrameworkConstants.FrameworkPropertiesConstants.TEST_PROJECT, PropertyFileType.TEST_FRAMEWORK);
+            properties = props;
+            testUser = properties.getTestUserName();
+            testProject = properties.getTestProjectName();
             FrameworkUtils frameworkUtils = FrameworkUtils.getInstance();
-            gatewaysToAvoid = frameworkUtils.getGatewayListToAvoid();
+            gatewaysToAvoid = frameworkUtils.getGatewayListToAvoid(properties.getSkippedGateways());
         }catch (Exception e){
             logger.error("Error while initializing setup step", e);
             throw new Exception("Error while initializing setup step", e);
@@ -79,9 +81,9 @@ public class GatewayRegister {
     public void createGateways() throws Exception{
         try {
             // read gateway count from properties file
-            gatewayCount = Integer.valueOf(propertyReader.readProperty(TestFrameworkConstants.FrameworkPropertiesConstants.NUMBER_OF_GATEWAYS, PropertyFileType.TEST_FRAMEWORK));
-            String genericGatewayName = propertyReader.readProperty(TestFrameworkConstants.GatewayConstants.GENERIC_GATEWAY_NAME, PropertyFileType.TEST_FRAMEWORK);
-            String genericGatewayDomain = propertyReader.readProperty(TestFrameworkConstants.GatewayConstants.GENERIC_GATEWAY_DOMAIN, PropertyFileType.TEST_FRAMEWORK);
+            gatewayCount = properties.getGcount();
+            String genericGatewayName = properties.getGname();
+            String genericGatewayDomain = properties.getGdomain();
             for (int i = 0; i < gatewayCount; i++){
                 Gateway gateway = new Gateway();
                 String gatewayId = genericGatewayName + (i + 1);
@@ -121,7 +123,7 @@ public class GatewayRegister {
     public void registerSSHKeys () throws Exception{
         try {
             // write tokens to file
-            String tokenWriteLocation = propertyReader.readProperty(TestFrameworkConstants.FrameworkPropertiesConstants.TOKEN_WRITE_LOCATION, PropertyFileType.TEST_FRAMEWORK);
+            String tokenWriteLocation = properties.getTokenFileLoc();
             String fileName = tokenWriteLocation + File.separator + TestFrameworkConstants.CredentialStoreConstants.TOKEN_FILE_NAME;
 
             PrintWriter tokenWriter = new PrintWriter(fileName, "UTF-8");
@@ -131,9 +133,9 @@ public class GatewayRegister {
             String jdbcDriver = propertyReader.readProperty(TestFrameworkConstants.AiravataClientConstants.CS_JBDC_DRIVER, PropertyFileType.AIRAVATA_CLIENT);
             String userName = propertyReader.readProperty(TestFrameworkConstants.AiravataClientConstants.CS_DB_USERNAME, PropertyFileType.AIRAVATA_CLIENT);
             String password = propertyReader.readProperty(TestFrameworkConstants.AiravataClientConstants.CS_DB_PWD, PropertyFileType.AIRAVATA_CLIENT);
-            String privateKeyPath = propertyReader.readProperty(TestFrameworkConstants.FrameworkPropertiesConstants.SSH_PRIKEY_LOCATION, PropertyFileType.TEST_FRAMEWORK);
-            String pubKeyPath = propertyReader.readProperty(TestFrameworkConstants.FrameworkPropertiesConstants.SSH_PUBKEY_LOCATION, PropertyFileType.TEST_FRAMEWORK);
-            String keyPassword = propertyReader.readProperty(TestFrameworkConstants.FrameworkPropertiesConstants.SSH_PWD, PropertyFileType.TEST_FRAMEWORK);
+            String privateKeyPath = properties.getSshPrivateKeyLoc();
+            String pubKeyPath = properties.getSshPubKeyLoc();
+            String keyPassword = properties.getSshPassword();
             DBUtil dbUtil = new DBUtil(jdbcURL, userName, password, jdbcDriver);
             SSHCredentialWriter writer = new SSHCredentialWriter(dbUtil);
             List<Gateway> allGateways = airavata.getAllGateways();

http://git-wip-us.apache.org/repos/asf/airavata/blob/4e3fde8f/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/TestFrameworkProps.java
----------------------------------------------------------------------
diff --git a/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/TestFrameworkProps.java b/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/TestFrameworkProps.java
index cc7f7ea..c9b06bc 100644
--- a/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/TestFrameworkProps.java
+++ b/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/TestFrameworkProps.java
@@ -21,6 +21,228 @@
 
 package org.apache.airavata.testsuite.multitenantedairavata;
 
+import java.util.Map;
+
 public class TestFrameworkProps {
+    private int gcount;
+    private String gname;
+    private String gdomain;
+    private String testUserName;
+    private String testProjectName;
+    private String sshPubKeyLoc;
+    private String sshPrivateKeyLoc;
+    private String sshPassword;
+    private String sshUsername;
+    private String tokenFileLoc;
+    private String resultFileLoc;
+    private String skippedGateways;
+    private Resource[] resources;
+    private Application[] applications;
+    private Error[] errors;
+
+    public TestFrameworkProps() {
+    }
+
+    public int getGcount() {
+        return gcount;
+    }
+
+    public void setGcount(int gcount) {
+        this.gcount = gcount;
+    }
+
+    public String getGname() {
+        return gname;
+    }
+
+    public void setGname(String gname) {
+        this.gname = gname;
+    }
+
+    public String getGdomain() {
+        return gdomain;
+    }
+
+    public void setGdomain(String gdomain) {
+        this.gdomain = gdomain;
+    }
+
+    public String getTestUserName() {
+        return testUserName;
+    }
+
+    public void setTestUserName(String testUserName) {
+        this.testUserName = testUserName;
+    }
+
+    public String getTestProjectName() {
+        return testProjectName;
+    }
+
+    public void setTestProjectName(String testProjectName) {
+        this.testProjectName = testProjectName;
+    }
+
+    public String getSshPubKeyLoc() {
+        return sshPubKeyLoc;
+    }
+
+    public void setSshPubKeyLoc(String sshPubKeyLoc) {
+        this.sshPubKeyLoc = sshPubKeyLoc;
+    }
+
+    public String getSshPrivateKeyLoc() {
+        return sshPrivateKeyLoc;
+    }
+
+    public void setSshPrivateKeyLoc(String sshPrivateKeyLoc) {
+        this.sshPrivateKeyLoc = sshPrivateKeyLoc;
+    }
+
+    public String getSshPassword() {
+        return sshPassword;
+    }
+
+    public void setSshPassword(String sshPassword) {
+        this.sshPassword = sshPassword;
+    }
+
+    public String getSshUsername() {
+        return sshUsername;
+    }
+
+    public void setSshUsername(String sshUsername) {
+        this.sshUsername = sshUsername;
+    }
+
+    public String getTokenFileLoc() {
+        return tokenFileLoc;
+    }
+
+    public void setTokenFileLoc(String tokenFileLoc) {
+        this.tokenFileLoc = tokenFileLoc;
+    }
+
+    public String getResultFileLoc() {
+        return resultFileLoc;
+    }
+
+    public void setResultFileLoc(String resultFileLoc) {
+        this.resultFileLoc = resultFileLoc;
+    }
+
+    public String getSkippedGateways() {
+        return skippedGateways;
+    }
+
+    public void setSkippedGateways(String skippedGateways) {
+        this.skippedGateways = skippedGateways;
+    }
+
+    public Resource[] getResources() {
+        return resources;
+    }
 
+    public void setResources(Resource[] resources) {
+        this.resources = resources;
+    }
+
+    public Application[] getApplications() {
+        return applications;
+    }
+
+    public void setApplications(Application[] applications) {
+        this.applications = applications;
+    }
+
+    public Error[] getErrors() {
+        return errors;
+    }
+
+    public void setErrors(Error[] errors) {
+        this.errors = errors;
+    }
+
+    public class Resource {
+        private String name;
+        private String loginUser;
+
+        public Resource() {
+        }
+
+        public String getName() {
+            return name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public String getLoginUser() {
+            return loginUser;
+        }
+
+        public void setLoginUser(String loginUser) {
+            this.loginUser = loginUser;
+        }
+    }
+
+    public class Application {
+        private String name;
+        private Map<String, String> inputs;
+
+        public Application() {
+        }
+
+        public String getName() {
+            return name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public Map<String, String> getInputs() {
+            return inputs;
+        }
+
+        public void setInputs(Map<String, String> inputs) {
+            this.inputs = inputs;
+        }
+    }
+
+    public class Error {
+        private String name;
+        private String application;
+        private Map<String, String> errorFeeds;
+
+        public Error() {
+        }
+
+        public String getName() {
+            return name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public String getApplication() {
+            return application;
+        }
+
+        public void setApplication(String application) {
+            this.application = application;
+        }
+
+        public Map<String, String> getErrorFeeds() {
+            return errorFeeds;
+        }
+
+        public void setErrorFeeds(Map<String, String> errorFeeds) {
+            this.errorFeeds = errorFeeds;
+        }
+    }
 }
+
+

http://git-wip-us.apache.org/repos/asf/airavata/blob/4e3fde8f/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/utils/FrameworkUtils.java
----------------------------------------------------------------------
diff --git a/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/utils/FrameworkUtils.java b/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/utils/FrameworkUtils.java
index cdc1304..a02fe97 100644
--- a/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/utils/FrameworkUtils.java
+++ b/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/utils/FrameworkUtils.java
@@ -21,12 +21,10 @@
 
 package org.apache.airavata.testsuite.multitenantedairavata.utils;
 
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
 public class FrameworkUtils {
-    private static PropertyReader propertyReader;
 
     private static FrameworkUtils ourInstance = new FrameworkUtils();
 
@@ -35,20 +33,10 @@ public class FrameworkUtils {
     }
 
     public FrameworkUtils() {
-        propertyReader = new PropertyReader();
     }
 
-    public List<String> getGatewayListToAvoid (){
-        String listOfGateways = propertyReader.readProperty(TestFrameworkConstants.FrameworkPropertiesConstants.GATEWAYS_TOSKIP, PropertyFileType.TEST_FRAMEWORK);
-        String[] gateways = listOfGateways.split(",");
+    public List<String> getGatewayListToAvoid (String gatewayList){
+        String[] gateways = gatewayList.split(",");
         return Arrays.asList(gateways);
     }
-
-    public String getTestUserName (){
-        return propertyReader.readProperty(TestFrameworkConstants.FrameworkPropertiesConstants.TEST_USER, PropertyFileType.TEST_FRAMEWORK);
-    }
-
-    public String getTesProjectName (){
-        return propertyReader.readProperty(TestFrameworkConstants.FrameworkPropertiesConstants.TEST_PROJECT, PropertyFileType.TEST_FRAMEWORK);
-    }
 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/4e3fde8f/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/utils/PropertyFileType.java
----------------------------------------------------------------------
diff --git a/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/utils/PropertyFileType.java b/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/utils/PropertyFileType.java
index 0437c4e..1db022f 100644
--- a/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/utils/PropertyFileType.java
+++ b/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/utils/PropertyFileType.java
@@ -23,6 +23,6 @@ package org.apache.airavata.testsuite.multitenantedairavata.utils;
 
 
 public enum PropertyFileType {
-    AIRAVATA_CLIENT,
-    TEST_FRAMEWORK
+    AIRAVATA_CLIENT
+//    TEST_FRAMEWORK
 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/4e3fde8f/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/utils/PropertyReader.java
----------------------------------------------------------------------
diff --git a/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/utils/PropertyReader.java b/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/utils/PropertyReader.java
index 1ef2851..f7b8e1f 100644
--- a/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/utils/PropertyReader.java
+++ b/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/utils/PropertyReader.java
@@ -31,7 +31,6 @@ import java.util.Properties;
 public class PropertyReader {
     private final static Logger logger = LoggerFactory.getLogger(PropertyReader.class);
     private static Properties airavataClientProperties = new Properties();
-    private static Properties testFrameworkroperties = new Properties();
 
     public PropertyReader() {
         try {
@@ -43,22 +42,15 @@ public class PropertyReader {
 
     protected void loadProperties() throws IOException {
         URL airavataURL = PropertyFileType.class.getClassLoader().getResource(TestFrameworkConstants.AIRAVATA_CLIENT_PROPERTIES);
-        URL frameworkPropUrl = PropertyFileType.class.getClassLoader().getResource(TestFrameworkConstants.TEST_FREAMEWORK_PROPERTIES);
         if (airavataURL != null){
             airavataClientProperties.load(airavataURL.openStream());
         }
-        if (frameworkPropUrl != null){
-            testFrameworkroperties.load(frameworkPropUrl.openStream());
-        }
-
     }
 
     public String readProperty (String propertyName, PropertyFileType type){
         switch (type){
             case AIRAVATA_CLIENT:
                 return airavataClientProperties.getProperty(propertyName);
-            case TEST_FRAMEWORK:
-                return testFrameworkroperties.getProperty(propertyName);
         }
         return null;
     }

http://git-wip-us.apache.org/repos/asf/airavata/blob/4e3fde8f/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/utils/TestFrameworkConstants.java
----------------------------------------------------------------------
diff --git a/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/utils/TestFrameworkConstants.java b/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/utils/TestFrameworkConstants.java
index c0ea2c4..7376f7a 100644
--- a/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/utils/TestFrameworkConstants.java
+++ b/modules/test-suite/multi-tenanted-airavata/src/main/java/org/apache/airavata/testsuite/multitenantedairavata/utils/TestFrameworkConstants.java
@@ -24,6 +24,7 @@ package org.apache.airavata.testsuite.multitenantedairavata.utils;
 public class TestFrameworkConstants {
     public static final String AIRAVATA_CLIENT_PROPERTIES = "airavata-client.properties";
     public static final String TEST_FREAMEWORK_PROPERTIES = "test-framework.properties";
+    public static final String TEST_FREAMEWORK_JSON = "test-framework.json";
 
     public static final class AiravataClientConstants {
         public static final String THRIFT_SERVER_HOST = "thrift.server.host";

http://git-wip-us.apache.org/repos/asf/airavata/blob/4e3fde8f/modules/test-suite/multi-tenanted-airavata/src/main/resources/test-framework.json
----------------------------------------------------------------------
diff --git a/modules/test-suite/multi-tenanted-airavata/src/main/resources/test-framework.json b/modules/test-suite/multi-tenanted-airavata/src/main/resources/test-framework.json
index e69de29..50288a7 100644
--- a/modules/test-suite/multi-tenanted-airavata/src/main/resources/test-framework.json
+++ b/modules/test-suite/multi-tenanted-airavata/src/main/resources/test-framework.json
@@ -0,0 +1,63 @@
+{
+    "gcount": 1,
+    "gname": "testGateway",
+    "gdomain": ".airavata.org",
+    "testUserName": "testUser",
+    "testProjectName": "test.project",
+    "sshPubKeyLoc": "/Users/chathuri/.ssh/id_dsa.pub",
+    "sshPrivateKeyLoc": "/Users/chathuri/.ssh/id_dsa",
+    "sshPassword": "",
+    "sshUsername": "ogce",
+    "tokenFileLoc": "/tmp/",
+    "resultFileLoc": "/tmp/test_framework_results/",
+    "skippedGateways": "default,php_reference_gateway,ultrascan,umass",
+    "resources": [
+        {
+            "name": "trestles.sdsc.xsede.org",
+            "loginUser": "ogce"
+
+        },
+        {
+            "name": "stampede.tacc.xsede.org",
+            "loginUser": "ogce"
+
+        },
+        {
+            "name": "bigred2.uits.iu.edu",
+            "loginUser": "cpelikan"
+
+        }
+    ],
+    "applications": [
+        {
+            "name": "amber_sander",
+            "inputs": {
+                "heatRst": "/Users/chathuri/dev/airavata/source/php/inputs/AMBER_FILES/02_Heat.rst",
+                "prodIn": "/Users/chathuri/dev/airavata/source/php/inputs/AMBER_FILES/03_Prod.in",
+                "prmtop": "/Users/chathuri/dev/airavata/source/php/inputs/AMBER_FILES/prmtop"
+            }
+        }
+    ],
+    "errors": [
+        {
+            "name": "badinputs",
+            "application": "amber_sander",
+            "errorFeeds": {
+                "heatRst": "/Users/chathuri/dev/airavata/source/php/inputs/AMBER_FILES/02_Heat.rst",
+                "prodIn": "/Users/chathuri/dev/airavata/source/php/inputs/AMBER_FILES/03_Prod.in",
+                "prmtop": "/Users/chathuri/dev/airavata/source/php/inputs/AMBER_FILES/prmtop"
+            }
+        },
+        {
+            "name": "error.configuration",
+            "application": "amber_sander",
+            "errorFeeds": {
+                "projectId": "sds128",
+                "queueName": "normal",
+                "walltime": 10,
+                "hostName": "trestles.sdsc.xsede.org"
+            }
+
+        }
+    ]
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/4e3fde8f/modules/test-suite/multi-tenanted-airavata/src/main/resources/test-framework.yaml
----------------------------------------------------------------------
diff --git a/modules/test-suite/multi-tenanted-airavata/src/main/resources/test-framework.yaml b/modules/test-suite/multi-tenanted-airavata/src/main/resources/test-framework.yaml
new file mode 100644
index 0000000..6c1a6e6
--- /dev/null
+++ b/modules/test-suite/multi-tenanted-airavata/src/main/resources/test-framework.yaml
@@ -0,0 +1,49 @@
+gcount: 10
+gname: testGateway
+gdomain: .airavata.org
+testUserName: testUser
+testProjectName : test.project
+sshPubKeyLoc : /Users/chathuri/.ssh/id_dsa.pub
+sshPrivateKeyLoc: /Users/chathuri/.ssh/id_dsa
+sshPassword: password
+sshUsername: ogce
+tokenFileLoc : /tmp/
+resultFileLoc : /tmp/test_framework_results/
+skippedGateways : defaultphp_reference_gatewayultrascanumass
+resources :
+        -name : trestles.sdsc.xsede.org
+        loginUser : ogce
+        -name : stampede.tacc.xsede.org
+        loginUser : ogce
+        -name : bigred2.uits.iu.edu
+        loginUser : cgateway
+
+applications :
+    -name :amber
+      inputs : 
+          heatRst : /Users/chathuri/dev/airavata/source/php/inputs/AMBER_FILES/02_Heat.rst
+          prodIn : /Users/chathuri/dev/airavata/source/php/inputs/AMBER_FILES/03_Prod.in
+          prmtop : /Users/chathuri/dev/airavata/source/php/inputs/AMBER_FILES/prmtop
+      
+    
+
+errors :
+    name :badinputs
+        application : amber
+        errorFeeds :
+            heatRst : /Users/chathuri/dev/airavata/source/php/inputs/AMBER_FILES/02_Heat.rst
+            prodIn : /Users/chathuri/dev/airavata/source/php/inputs/AMBER_FILES/03_Prod.in
+            prmtop : /Users/chathuri/dev/airavata/source/php/inputs/AMBER_FILES/prmtop
+        
+    
+    name :error.configuration
+        application : amber
+        errorFeeds :
+            projectId : sds128
+            queueName : normal
+            walltime : 10
+            hostName : trestles.sdsc.xsede.org
+        
+    
+
+