Hi all,
I tried to write integration tests for Airavata and noticed there are
redundant code in the module.
So I created a class WorkflowIntegrationTestBase and extended the
BasecaseIT and ForeachIT from that class.
The + is that now writing Integration testing is easier. If you look at
the ForEachCaseIT class, you'd understand. Hope it's ok. I'm will continue
to write tests now.
I have attached the patch in the mail.
--
Thanks,
Sachith Dhanushka Withana
Student, Dept. of Computer Science and Eng.
University of Moratuwa
www.sachith.withana.net <http://sachith.withana.net/>
Index: modules/integration-tests/src/test/java/org/apache/airavata/integration/BaseCaseIT.java
===================================================================
--- modules/integration-tests/src/test/java/org/apache/airavata/integration/BaseCaseIT.java (revision 1548680)
+++ modules/integration-tests/src/test/java/org/apache/airavata/integration/BaseCaseIT.java (working copy)
@@ -69,155 +69,12 @@
/**
* Integration test class.
*/
-public class BaseCaseIT {
+public class BaseCaseIT extends WorkflowIntegrationTestBase {
- private final Logger log = LoggerFactory.getLogger(BaseCaseIT.class);
-
- private int port;
- private String serverUrl;
- private String serverContextName;
-
- private String registryURL;
-
- private String gatewayName = "default";
- private String userName = "admin";
- private String password = "admin";
-
- private static final int TIME_OUT = 20000;
-
- private static final int TRIES = 3;
-
- private AiravataAPI airavataAPI;
-
- protected void log(String message) {
- log.info(message);
- }
-
- public Logger getLog() {
- return log;
- }
-
- public int getPort() {
- return port;
- }
-
- public String getServerUrl() {
- return serverUrl;
- }
-
- public String getServerContextName() {
- return serverContextName;
- }
-
- public String getRegistryURL() {
- return registryURL;
- }
-
- public String getGatewayName() {
- return gatewayName;
- }
-
- public String getUserName() {
- return userName;
- }
-
- public AiravataAPI getAiravataAPI() {
- return airavataAPI;
- }
-
- public String getPassword() {
- return password;
- }
-
public BaseCaseIT() throws Exception {
setUpEnvironment();
}
- public void setUpEnvironment() throws Exception {
-
- log("..................Validating server logs .............................");
- // TODO validate logs
-
- setRegistryURL(createRegistryURL());
-
- log("Configurations - Registry URL : " + getRegistryURL());
-
- PasswordCallback passwordCallback = new PasswordCallbackImpl();
- AiravataAPI airavataAPI = AiravataAPIFactory.getAPI(new URI(getRegistryURL()), getGatewayName(), getUserName(),
- passwordCallback);
-
- checkServerStartup(airavataAPI);
-
- log("Server successfully started .............................");
- log("Running tests .............................");
- }
-
- private String createRegistryURL() {
- log("Reading test server configurations ...");
-
- String strPort = System.getProperty("test.server.port");
-
- if (strPort == null) {
- strPort = "8080";
- }
-
- String strHost = System.getProperty("test.server.url");
-
- if (strHost == null) {
- strHost = "localhost";
- }
-
- String strContext = System.getProperty("test.server.context");
-
- if (strContext == null) {
- strContext = "airavata";
- }
-
- port = Integer.parseInt(strPort);
- serverUrl = strHost;
- serverContextName = strContext;
-
- log("Configurations - port : " + port);
- log("Configurations - serverUrl : " + serverUrl);
- log("Configurations - serverContext : " + serverContextName);
-
- String registryURL = "http://" + serverUrl + ":" + port + "/" + serverContextName + "/services/registry";
- return registryURL;
- }
-
- protected void checkServerStartup(AiravataAPI airavataAPI) throws Exception {
-
- int tries = 0;
-
- while (true) {
-
- if (tries == TRIES) {
- log("Server not responding. Cannot continue with integration tests ...");
- throw new Exception("Server not responding !");
- }
-
- log("Checking server is running, try - " + tries);
-
- URI eventingServiceURL = airavataAPI.getAiravataManager().getEventingServiceURL();
-
- URI messageBoxServiceURL = airavataAPI.getAiravataManager().getMessageBoxServiceURL();
-
- URI workflowInterpreterServiceURL = airavataAPI.getAiravataManager().getWorkflowInterpreterServiceURL();
-
- if (eventingServiceURL == null || messageBoxServiceURL == null
- || workflowInterpreterServiceURL == null) {
-
- log.info("Waiting till server initializes ........");
- Thread.sleep(TIME_OUT);
- } else {
- break;
- }
-
- ++tries;
- }
-
- }
-
@BeforeTest
public void setUp() throws Exception {
@@ -392,45 +249,13 @@
protected void runWorkFlow(Workflow workflow, List<String> inputValues) throws Exception {
- AiravataAPI airavataAPI = AiravataAPIFactory.getAPI(new URI(getRegistryURL()), getGatewayName(), getUserName(),
- new PasswordCallbackImpl());
- List<WorkflowInput> workflowInputs = setupInputs(workflow, inputValues);
- String workflowName = workflow.getName();
- ExperimentAdvanceOptions options = airavataAPI.getExecutionManager().createExperimentAdvanceOptions(
- workflowName, getUserName(), null);
-
- options.getCustomSecuritySettings().getCredentialStoreSecuritySettings().setTokenId("1234");
-
- String experimentId = airavataAPI.getExecutionManager().runExperiment(workflowName, workflowInputs, options);
-
- Assert.assertNotNull(experimentId);
-
- log.info("Run workflow completed ....");
- log.info("Starting monitoring ....");
-
+ String experimentId = executeWorkflow(workflow,inputValues);
monitor(experimentId);
}
-
protected void runWorkFlowWithoutMonitor(Workflow workflow, List<String> inputValues) throws Exception {
- AiravataAPI airavataAPI = AiravataAPIFactory.getAPI(new URI(getRegistryURL()), getGatewayName(), getUserName(),
- new PasswordCallbackImpl());
- List<WorkflowInput> workflowInputs = setupInputs(workflow, inputValues);
- String workflowName = workflow.getName();
- ExperimentAdvanceOptions options = airavataAPI.getExecutionManager().createExperimentAdvanceOptions(
- workflowName, getUserName(), null);
- String experimentId = airavataAPI.getExecutionManager().runExperiment(workflowName, workflowInputs, options,
- new EventDataListenerAdapter() {
- public void notify(EventDataRepository eventDataRepo, EventData eventData) {
- // do nothing
- }
- });
+ String experimentId = executeWorkflow(workflow,inputValues);
- Assert.assertNotNull(experimentId);
- airavataAPI.getExecutionManager().waitForExperimentTermination(experimentId);
-
- log.info("Run workflow completed ....");
-
verifyOutput(experimentId, "echo_output=Airavata_Test");
log.info("Verifying application jobs ....");
@@ -438,50 +263,6 @@
Assert.assertEquals(applicationJobs.size(), 1);
}
- protected void verifyOutput(String experimentId, String outputVerifyingString) throws Exception {
- AiravataAPI airavataAPI = AiravataAPIFactory.getAPI(new URI(getRegistryURL()), getGatewayName(), getUserName(),
- new PasswordCallbackImpl());
- log.info("Experiment ID Returned : " + experimentId);
-
- ExperimentData experimentData = airavataAPI.getProvenanceManager().getExperimentData(experimentId);
-
- log.info("Verifying output ...");
-
- List<WorkflowExecutionDataImpl> workflowInstanceData = experimentData.getWorkflowExecutionDataList();
-
- Assert.assertFalse("Workflow instance data cannot be empty !", workflowInstanceData.isEmpty());
-
- for (WorkflowExecutionDataImpl data : workflowInstanceData) {
- List<NodeExecutionData> nodeDataList = data.getNodeDataList();
- for (NodeExecutionData nodeData : nodeDataList) {
-
- Assert.assertFalse("Node execution data list cannot be empty !", nodeDataList.isEmpty());
-
- for (OutputData outputData : nodeData.getOutputData()) {
- Assert.assertEquals("Airavata_Test", outputData.getValue());
- }
- for (InputData inputData : nodeData.getInputData()) {
- Assert.assertEquals(outputVerifyingString, inputData.getValue());
- }
- }
- }
- }
-
- private List<WorkflowInput> setupInputs(Workflow workflow, List<String> inputValues) throws Exception {
- AiravataAPI airavataAPI = AiravataAPIFactory.getAPI(new URI(getRegistryURL()), getGatewayName(), getUserName(),
- new PasswordCallbackImpl());
- List<WorkflowInput> workflowInputs = airavataAPI.getWorkflowManager().getWorkflowInputs(workflow.getName());
-
- Assert.assertEquals(workflowInputs.size(), inputValues.size());
-
- int i = 0;
- for (String valueString : inputValues) {
- workflowInputs.get(i).setValue(valueString);
- ++i;
- }
- return workflowInputs;
- }
-
protected String getWorkflowComposeContent(String fileName) throws IOException {
File f = new File(".");
log.debug(f.getAbsolutePath());
Index: modules/integration-tests/src/test/java/org/apache/airavata/integration/ForEachCaseIT.java
===================================================================
--- modules/integration-tests/src/test/java/org/apache/airavata/integration/ForEachCaseIT.java (revision 1548680)
+++ modules/integration-tests/src/test/java/org/apache/airavata/integration/ForEachCaseIT.java (working copy)
@@ -65,164 +65,12 @@
/**
* Integration test class.
*/
-public class ForEachCaseIT {
+public class ForEachCaseIT extends WorkflowIntegrationTestBase {
- private final Logger log = LoggerFactory.getLogger(ForEachCaseIT.class);
-
- private int port;
- private String serverUrl;
- private String serverContextName;
-
- private String registryURL;
-
- private String gatewayName = "default";
- private String userName = "admin";
- private String password = "admin";
-
- private static final int TIME_OUT = 20000;
-
- private static final int TRIES = 3;
-
- private AiravataAPI airavataAPI;
-
- protected void log(String message) {
- log.info(message);
- }
-
- public Logger getLog() {
- return log;
- }
-
- public int getPort() {
- return port;
- }
-
- public String getServerUrl() {
- return serverUrl;
- }
-
- public String getServerContextName() {
- return serverContextName;
- }
-
- public String getRegistryURL() {
- return registryURL;
- }
-
- public String getGatewayName() {
- return gatewayName;
- }
-
- public String getUserName() {
- return userName;
- }
-
- public AiravataAPI getAiravataAPI() {
- return airavataAPI;
- }
-
- public String getPassword() {
- return password;
- }
-
public ForEachCaseIT() throws Exception {
setUpEnvironment();
}
- public void setUpEnvironment() throws Exception {
-
- log("..................Validating server logs .............................");
- // TODO validate logs
-
- setRegistryURL(createRegistryURL());
-
- log("Configurations - Registry URL : " + getRegistryURL());
-
- PasswordCallback passwordCallback = new PasswordCallbackImpl();
- AiravataAPI airavataAPI = AiravataAPIFactory.getAPI(new URI(getRegistryURL()), getGatewayName(), getUserName(),
- passwordCallback);
-
- checkServerStartup(airavataAPI);
-
- log("Server successfully started .............................");
- log("Running tests .............................");
- }
-
- private String createRegistryURL() {
- log("Reading test server configurations ...");
-
- String strPort = System.getProperty("test.server.port");
-
- if (strPort == null) {
- strPort = "8080";
- }
-
- String strHost = System.getProperty("test.server.url");
-
- if (strHost == null) {
- strHost = "localhost";
- }
-
- String strContext = System.getProperty("test.server.context");
-
- if (strContext == null) {
- strContext = "airavata";
- }
-
- port = Integer.parseInt(strPort);
- serverUrl = strHost;
- serverContextName = strContext;
-
- log("Configurations - port : " + port);
- log("Configurations - serverUrl : " + serverUrl);
- log("Configurations - serverContext : " + serverContextName);
-
- String registryURL = "http://" + serverUrl + ":" + port + "/" + serverContextName + "/services/registry";
- return registryURL;
- }
-
- protected void checkServerStartup(AiravataAPI airavataAPI) throws Exception {
-
- int tries = 0;
-
- while (true) {
-
- if (tries == TRIES) {
- log("Server not responding. Cannot continue with integration tests ...");
- throw new Exception("Server not responding !");
- }
-
- log("Checking server is running, try - " + tries);
-
- URI eventingServiceURL = airavataAPI.getAiravataManager().getEventingServiceURL();
-
- URI messageBoxServiceURL = airavataAPI.getAiravataManager().getMessageBoxServiceURL();
-
- URI workflowInterpreterServiceURL = airavataAPI.getAiravataManager().getWorkflowInterpreterServiceURL();
-
- if (eventingServiceURL == null || messageBoxServiceURL == null
- || workflowInterpreterServiceURL == null) {
-
- log.info("Waiting till server initializes ........");
- Thread.sleep(TIME_OUT);
- } else {
- break;
- }
-
- ++tries;
- }
-
- }
-
- @BeforeTest
- public void setUp() throws Exception {
-
- PasswordCallback passwordCallback = new PasswordCallbackImpl();
- this.airavataAPI = AiravataAPIFactory.getAPI(new URI(getRegistryURL()), getGatewayName(), getUserName(),
- passwordCallback);
- setupDescriptors();
- }
-
@Test(groups = { "forEachGroup" }, dependsOnGroups = { "echoGroup" })
public void testForEachUsecases() throws Exception {
executeExperiment("src/test/resources/ForEachBasicWorkflow.xwf", Arrays.asList("10","20"), Arrays.asList("10 20"));
@@ -234,173 +82,4 @@
executeExperiment("src/test/resources/ForEachEchoWorkflow.xwf", Arrays.asList("10,20","30,40"), Arrays.asList("10,30","20,40"));
}
- private void executeExperiment(String workflowFilePath,
- List<String> inputs, List<String> outputs) throws GraphException,
- ComponentException, IOException, WorkflowAlreadyExistsException,
- AiravataAPIInvocationException, Exception {
- log("Saving workflow ...");
-
- Workflow workflow = new Workflow(getWorkflowComposeContent(workflowFilePath));
- if (!airavataAPI.getWorkflowManager().isWorkflowExists(workflow.getName())){
- airavataAPI.getWorkflowManager().addWorkflow(workflow);
- }
- Assert.assertTrue(airavataAPI.getWorkflowManager().isWorkflowExists(workflow.getName()));
-
- log("Workflow setting up completed ...");
-
- runWorkFlow(workflow, inputs,outputs);
- }
-
- private void setupDescriptors() throws AiravataAPIInvocationException,
- DescriptorAlreadyExistsException, IOException {
- DescriptorBuilder descriptorBuilder = airavataAPI.getDescriptorBuilder();
- HostDescription hostDescription = descriptorBuilder.buildHostDescription(HostDescriptionType.type, "localhost2",
- "127.0.0.1");
-
- log("Adding host description ....");
- airavataAPI.getApplicationManager().addHostDescription(hostDescription);
- Assert.assertTrue(airavataAPI.getApplicationManager().isHostDescriptorExists(hostDescription.getType().getHostName()));
-
- List<InputParameterType> inputParameters = new ArrayList<InputParameterType>();
- inputParameters.add(descriptorBuilder.buildInputParameterType("data1", "data1", DataType.STRING));
- inputParameters.add(descriptorBuilder.buildInputParameterType("data2", "data2", DataType.STRING));
-
- List<OutputParameterType> outputParameters = new ArrayList<OutputParameterType>();
- outputParameters.add(descriptorBuilder.buildOutputParameterType("out", "out", DataType.STD_OUT));
-
- ServiceDescription serviceDescription = descriptorBuilder.buildServiceDescription("comma_app", "comma_app",
- inputParameters, outputParameters);
-
- ServiceDescription serviceDescription2 = descriptorBuilder.buildServiceDescription("echo_app", "echo_app",
- inputParameters, outputParameters);
-
- log("Adding service description ...");
- airavataAPI.getApplicationManager().addServiceDescription(serviceDescription);
- Assert.assertTrue(airavataAPI.getApplicationManager().isServiceDescriptorExists(
- serviceDescription.getType().getName()));
-
- airavataAPI.getApplicationManager().addServiceDescription(serviceDescription2);
- Assert.assertTrue(airavataAPI.getApplicationManager().isServiceDescriptorExists(
- serviceDescription2.getType().getName()));
-
- // Deployment descriptor
- File executable;
- if(OsUtils.isWindows()) {
- executable = getFile("src/test/resources/comma_data.bat");
- } else {
- executable = getFile("src/test/resources/comma_data.sh");
- Runtime.getRuntime().exec("chmod +x "+executable.getAbsolutePath());
- }
-
- ApplicationDescription applicationDeploymentDescription = descriptorBuilder
- .buildApplicationDeploymentDescription("comma_app_localhost", executable.getAbsolutePath(), OsUtils.getTempFolderPath());
- ApplicationDescription applicationDeploymentDescription2 = descriptorBuilder
- .buildApplicationDeploymentDescription("echo_app_localhost", OsUtils.getEchoExecutable(), OsUtils.getTempFolderPath());
-
- log("Adding deployment description ...");
- airavataAPI.getApplicationManager().addApplicationDescription(serviceDescription, hostDescription,
- applicationDeploymentDescription);
-
- Assert.assertTrue(airavataAPI.getApplicationManager().isApplicationDescriptorExists(
- serviceDescription.getType().getName(), hostDescription.getType().getHostName(),
- applicationDeploymentDescription.getType().getApplicationName().getStringValue()));
-
- airavataAPI.getApplicationManager().addApplicationDescription(serviceDescription2, hostDescription,
- applicationDeploymentDescription2);
-
- Assert.assertTrue(airavataAPI.getApplicationManager().isApplicationDescriptorExists(
- serviceDescription2.getType().getName(), hostDescription.getType().getHostName(),
- applicationDeploymentDescription2.getType().getApplicationName().getStringValue()));
- }
-
- protected void runWorkFlow(Workflow workflow, List<String> inputValues, List<String> outputValue) throws Exception {
- AiravataAPI airavataAPI = AiravataAPIFactory.getAPI(new URI(getRegistryURL()), getGatewayName(), getUserName(),
- new PasswordCallbackImpl());
- List<WorkflowInput> workflowInputs = setupInputs(workflow, inputValues);
- String workflowName = workflow.getName();
- ExperimentAdvanceOptions options = airavataAPI.getExecutionManager().createExperimentAdvanceOptions(
- workflowName, getUserName(), null);
-
- String experimentId = airavataAPI.getExecutionManager().runExperiment(workflowName, workflowInputs, options);
-
- Assert.assertNotNull(experimentId);
-
- log.info("Run workflow completed ....");
-
- airavataAPI.getExecutionManager().waitForExperimentTermination(experimentId);
- verifyOutput(experimentId, outputValue);
- }
-
- protected void verifyOutput(String experimentId, List<String> outputVerifyingString) throws Exception {
- AiravataAPI airavataAPI = AiravataAPIFactory.getAPI(new URI(getRegistryURL()), getGatewayName(), getUserName(),
- new PasswordCallbackImpl());
- log.info("Experiment ID Returned : " + experimentId);
-
- ExperimentData experimentData = airavataAPI.getProvenanceManager().getExperimentData(experimentId);
-
- log.info("Verifying output ...");
-
- List<WorkflowExecutionDataImpl> workflowInstanceData = experimentData.getWorkflowExecutionDataList();
-
- Assert.assertFalse("Workflow instance data cannot be empty !", workflowInstanceData.isEmpty());
-
- for (WorkflowExecutionDataImpl data : workflowInstanceData) {
- List<NodeExecutionData> nodeDataList = data.getNodeDataList(WorkflowNode.OUTPUTNODE);
- Assert.assertFalse("Node execution data list cannot be empty !", nodeDataList.isEmpty());
- for (NodeExecutionData nodeData : nodeDataList) {
- for (InputData inputData : nodeData.getInputData()) {
- String[] outputValues = StringUtil.getElementsFromString(inputData.getValue());
- Assert.assertEquals(outputVerifyingString.size(), outputValues.length);
- for(int i=0;i<outputValues.length;i++){
- Assert.assertEquals(outputVerifyingString.get(i), outputValues[i]);
- }
- }
- }
- }
- }
-
- private List<WorkflowInput> setupInputs(Workflow workflow, List<String> inputValues) throws Exception {
- AiravataAPI airavataAPI = AiravataAPIFactory.getAPI(new URI(getRegistryURL()), getGatewayName(), getUserName(),
- new PasswordCallbackImpl());
- List<WorkflowInput> workflowInputs = airavataAPI.getWorkflowManager().getWorkflowInputs(workflow.getName());
-
- Assert.assertEquals(workflowInputs.size(), inputValues.size());
-
- int i = 0;
- for (String valueString : inputValues) {
- workflowInputs.get(i).setValue(valueString);
- ++i;
- }
- return workflowInputs;
- }
-
- protected String getWorkflowComposeContent(String fileName) throws IOException {
- File file = getFile(fileName);
-
- BufferedReader reader = new BufferedReader(new FileReader(file));
- String line;
- StringBuilder buffer = new StringBuilder();
- while ((line = reader.readLine()) != null) {
- buffer.append(line);
- }
- reader.close();
- log.debug("Workflow compose - " + buffer.toString());
- return buffer.toString();
- }
-
- private File getFile(String fileName) {
- File f = new File(".");
- log.debug(f.getAbsolutePath());
-
- File file = new File(fileName);
- if (!file.exists()) {
- file = new File("modules/integration-tests/"+fileName);
- }
- return file;
- }
-
- public void setRegistryURL(String registryURL) {
- this.registryURL = registryURL;
- }
-
}
Index: modules/integration-tests/src/test/java/org/apache/airavata/integration/WorkflowIntegrationTestBase.java
===================================================================
--- modules/integration-tests/src/test/java/org/apache/airavata/integration/WorkflowIntegrationTestBase.java (revision 0)
+++ modules/integration-tests/src/test/java/org/apache/airavata/integration/WorkflowIntegrationTestBase.java (working copy)
@@ -0,0 +1,405 @@
+package org.apache.airavata.integration;
+
+import junit.framework.Assert;
+import org.apache.airavata.client.AiravataAPIFactory;
+import org.apache.airavata.client.api.AiravataAPI;
+import org.apache.airavata.client.api.ExperimentAdvanceOptions;
+import org.apache.airavata.client.api.builder.DescriptorBuilder;
+import org.apache.airavata.client.api.exception.AiravataAPIInvocationException;
+import org.apache.airavata.client.api.exception.DescriptorAlreadyExistsException;
+import org.apache.airavata.client.api.exception.WorkflowAlreadyExistsException;
+import org.apache.airavata.common.utils.StringUtil;
+import org.apache.airavata.commons.gfac.type.ApplicationDescription;
+import org.apache.airavata.commons.gfac.type.HostDescription;
+import org.apache.airavata.commons.gfac.type.ServiceDescription;
+import org.apache.airavata.registry.api.PasswordCallback;
+import org.apache.airavata.registry.api.impl.WorkflowExecutionDataImpl;
+import org.apache.airavata.registry.api.workflow.*;
+import org.apache.airavata.schemas.gfac.DataType;
+import org.apache.airavata.schemas.gfac.HostDescriptionType;
+import org.apache.airavata.schemas.gfac.InputParameterType;
+import org.apache.airavata.schemas.gfac.OutputParameterType;
+import org.apache.airavata.workflow.model.component.ComponentException;
+import org.apache.airavata.workflow.model.graph.GraphException;
+import org.apache.airavata.workflow.model.wf.Workflow;
+import org.apache.airavata.workflow.model.wf.WorkflowInput;
+import org.apache.airavata.ws.monitor.EventData;
+import org.apache.airavata.ws.monitor.EventDataListenerAdapter;
+import org.apache.airavata.ws.monitor.EventDataRepository;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testng.annotations.BeforeTest;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Since most of the workflow integration tests have common functionality to register, start and monitor workflows, this
+ * class will act as the aggregation of those methods.
+ */
+public abstract class WorkflowIntegrationTestBase {
+
+ protected final Logger log = LoggerFactory.getLogger(WorkflowIntegrationTestBase.class);
+
+ protected int port;
+ protected String serverUrl;
+ protected String serverContextName;
+
+ protected String registryURL;
+
+ protected String gatewayName = "default";
+ protected String userName = "admin";
+ protected String password = "admin";
+
+ protected static final int TIME_OUT = 20000;
+
+ protected static final int TRIES = 3;
+
+ protected AiravataAPI airavataAPI;
+
+ protected void log(String message) {
+ log.info(message);
+ }
+
+ public Logger getLog() {
+ return log;
+ }
+
+ public int getPort() {
+ return port;
+ }
+
+ public String getServerUrl() {
+ return serverUrl;
+ }
+
+ public String getServerContextName() {
+ return serverContextName;
+ }
+
+ public String getRegistryURL() {
+ return registryURL;
+ }
+
+ public String getGatewayName() {
+ return gatewayName;
+ }
+
+ public String getUserName() {
+ return userName;
+ }
+
+ public AiravataAPI getAiravataAPI() {
+ return airavataAPI;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public void setUpEnvironment() throws Exception {
+
+ log("..................Validating server logs .............................");
+ // TODO validate logs
+
+ setRegistryURL(createRegistryURL());
+
+ log("Configurations - Registry URL : " + getRegistryURL());
+
+ PasswordCallback passwordCallback = new PasswordCallbackImpl();
+ AiravataAPI airavataAPI = AiravataAPIFactory.getAPI(new URI(getRegistryURL()), getGatewayName(), getUserName(),
+ passwordCallback);
+
+ checkServerStartup(airavataAPI);
+
+ log("Server successfully started .............................");
+ log("Running tests .............................");
+ }
+
+ protected String createRegistryURL() {
+ log("Reading test server configurations ...");
+
+ String strPort = System.getProperty("test.server.port");
+
+ if (strPort == null) {
+ strPort = "8080";
+ }
+
+ String strHost = System.getProperty("test.server.url");
+
+ if (strHost == null) {
+ strHost = "localhost";
+ }
+
+ String strContext = System.getProperty("test.server.context");
+
+ if (strContext == null) {
+ strContext = "airavata";
+ }
+
+ port = Integer.parseInt(strPort);
+ serverUrl = strHost;
+ serverContextName = strContext;
+
+ log("Configurations - port : " + port);
+ log("Configurations - serverUrl : " + serverUrl);
+ log("Configurations - serverContext : " + serverContextName);
+
+ String registryURL = "http://" + serverUrl + ":" + port + "/" + serverContextName + "/services/registry";
+ return registryURL;
+ }
+
+ protected void checkServerStartup(AiravataAPI airavataAPI) throws Exception {
+
+ int tries = 0;
+
+ while (true) {
+
+ if (tries == TRIES) {
+ log("Server not responding. Cannot continue with integration tests ...");
+ throw new Exception("Server not responding !");
+ }
+
+ log("Checking server is running, try - " + tries);
+
+ URI eventingServiceURL = airavataAPI.getAiravataManager().getEventingServiceURL();
+
+ URI messageBoxServiceURL = airavataAPI.getAiravataManager().getMessageBoxServiceURL();
+
+ URI workflowInterpreterServiceURL = airavataAPI.getAiravataManager().getWorkflowInterpreterServiceURL();
+
+ if (eventingServiceURL == null || messageBoxServiceURL == null
+ || workflowInterpreterServiceURL == null) {
+
+ log.info("Waiting till server initializes ........");
+ Thread.sleep(TIME_OUT);
+ } else {
+ break;
+ }
+
+ ++tries;
+ }
+
+ }
+
+ @BeforeTest
+ public void setUp() throws Exception {
+
+ PasswordCallback passwordCallback = new PasswordCallbackImpl();
+ this.airavataAPI = AiravataAPIFactory.getAPI(new URI(getRegistryURL()), getGatewayName(), getUserName(),
+ passwordCallback);
+ setupDescriptors();
+ }
+
+ protected void executeExperiment(String workflowFilePath,
+ List<String> inputs, List<String> outputs) throws GraphException,
+ ComponentException, IOException, WorkflowAlreadyExistsException,
+ AiravataAPIInvocationException, Exception {
+ log("Saving workflow ...");
+
+ Workflow workflow = new Workflow(getWorkflowComposeContent(workflowFilePath));
+ if (!airavataAPI.getWorkflowManager().isWorkflowExists(workflow.getName())){
+ airavataAPI.getWorkflowManager().addWorkflow(workflow);
+ }
+ Assert.assertTrue(airavataAPI.getWorkflowManager().isWorkflowExists(workflow.getName()));
+
+ log("Workflow setting up completed ...");
+
+ executeWorkflow(workflow, inputs, outputs);
+ }
+
+ private void setupDescriptors() throws AiravataAPIInvocationException,
+ DescriptorAlreadyExistsException, IOException {
+ DescriptorBuilder descriptorBuilder = airavataAPI.getDescriptorBuilder();
+ HostDescription hostDescription = descriptorBuilder.buildHostDescription(HostDescriptionType.type, "localhost2",
+ "127.0.0.1");
+
+ log("Adding host description ....");
+ airavataAPI.getApplicationManager().addHostDescription(hostDescription);
+ Assert.assertTrue(airavataAPI.getApplicationManager().isHostDescriptorExists(hostDescription.getType().getHostName()));
+
+ List<InputParameterType> inputParameters = new ArrayList<InputParameterType>();
+ inputParameters.add(descriptorBuilder.buildInputParameterType("data1", "data1", DataType.STRING));
+ inputParameters.add(descriptorBuilder.buildInputParameterType("data2", "data2", DataType.STRING));
+
+ List<OutputParameterType> outputParameters = new ArrayList<OutputParameterType>();
+ outputParameters.add(descriptorBuilder.buildOutputParameterType("out", "out", DataType.STD_OUT));
+
+ ServiceDescription serviceDescription = descriptorBuilder.buildServiceDescription("comma_app", "comma_app",
+ inputParameters, outputParameters);
+
+ ServiceDescription serviceDescription2 = descriptorBuilder.buildServiceDescription("echo_app", "echo_app",
+ inputParameters, outputParameters);
+
+ log("Adding service description ...");
+ airavataAPI.getApplicationManager().addServiceDescription(serviceDescription);
+ Assert.assertTrue(airavataAPI.getApplicationManager().isServiceDescriptorExists(
+ serviceDescription.getType().getName()));
+
+ airavataAPI.getApplicationManager().addServiceDescription(serviceDescription2);
+ Assert.assertTrue(airavataAPI.getApplicationManager().isServiceDescriptorExists(
+ serviceDescription2.getType().getName()));
+
+ // Deployment descriptor
+ File executable;
+ if(OsUtils.isWindows()) {
+ executable = getFile("src/test/resources/comma_data.bat");
+ } else {
+ executable = getFile("src/test/resources/comma_data.sh");
+ Runtime.getRuntime().exec("chmod +x "+executable.getAbsolutePath());
+ }
+
+ ApplicationDescription applicationDeploymentDescription = descriptorBuilder
+ .buildApplicationDeploymentDescription("comma_app_localhost", executable.getAbsolutePath(), OsUtils.getTempFolderPath());
+ ApplicationDescription applicationDeploymentDescription2 = descriptorBuilder
+ .buildApplicationDeploymentDescription("echo_app_localhost", OsUtils.getEchoExecutable(), OsUtils.getTempFolderPath());
+
+ log("Adding deployment description ...");
+ airavataAPI.getApplicationManager().addApplicationDescription(serviceDescription, hostDescription,
+ applicationDeploymentDescription);
+
+ Assert.assertTrue(airavataAPI.getApplicationManager().isApplicationDescriptorExists(
+ serviceDescription.getType().getName(), hostDescription.getType().getHostName(),
+ applicationDeploymentDescription.getType().getApplicationName().getStringValue()));
+
+ airavataAPI.getApplicationManager().addApplicationDescription(serviceDescription2, hostDescription,
+ applicationDeploymentDescription2);
+
+ Assert.assertTrue(airavataAPI.getApplicationManager().isApplicationDescriptorExists(
+ serviceDescription2.getType().getName(), hostDescription.getType().getHostName(),
+ applicationDeploymentDescription2.getType().getApplicationName().getStringValue()));
+ }
+
+ protected void executeWorkflow(Workflow workflow, List<String> inputValues, List<String> outputValue) throws Exception {
+ String experimentId = executeWorkflow(workflow, inputValues);
+ airavataAPI.getExecutionManager().waitForExperimentTermination(experimentId);
+ verifyOutput(experimentId, outputValue);
+ }
+
+ protected String executeWorkflow(Workflow workflow, List<String> inputValues) throws Exception {
+ AiravataAPI airavataAPI = AiravataAPIFactory.getAPI(new URI(getRegistryURL()), getGatewayName(), getUserName(),
+ new PasswordCallbackImpl());
+ List<WorkflowInput> workflowInputs = setupInputs(workflow, inputValues);
+ String workflowName = workflow.getName();
+ ExperimentAdvanceOptions options = airavataAPI.getExecutionManager().createExperimentAdvanceOptions(
+ workflowName, getUserName(), null);
+
+ options.getCustomSecuritySettings().getCredentialStoreSecuritySettings().setTokenId("1234");
+
+ String experimentId = airavataAPI.getExecutionManager().runExperiment(workflowName, workflowInputs, options);
+
+ Assert.assertNotNull(experimentId);
+
+ log.info("Run workflow completed ....");
+ log.info("Starting monitoring ....");
+ return experimentId;
+ }
+
+
+ protected void verifyOutput(String experimentId, List<String> outputVerifyingString) throws Exception {
+ AiravataAPI airavataAPI = AiravataAPIFactory.getAPI(new URI(getRegistryURL()), getGatewayName(), getUserName(),
+ new PasswordCallbackImpl());
+ log.info("Experiment ID Returned : " + experimentId);
+
+ ExperimentData experimentData = airavataAPI.getProvenanceManager().getExperimentData(experimentId);
+
+ log.info("Verifying output ...");
+
+ List<WorkflowExecutionDataImpl> workflowInstanceData = experimentData.getWorkflowExecutionDataList();
+
+ Assert.assertFalse("Workflow instance data cannot be empty !", workflowInstanceData.isEmpty());
+
+ for (WorkflowExecutionDataImpl data : workflowInstanceData) {
+ List<NodeExecutionData> nodeDataList = data.getNodeDataList(WorkflowNodeType.WorkflowNode.OUTPUTNODE);
+ Assert.assertFalse("Node execution data list cannot be empty !", nodeDataList.isEmpty());
+ for (NodeExecutionData nodeData : nodeDataList) {
+ for (InputData inputData : nodeData.getInputData()) {
+ String[] outputValues = StringUtil.getElementsFromString(inputData.getValue());
+ Assert.assertEquals(outputVerifyingString.size(), outputValues.length);
+ for(int i=0;i<outputValues.length;i++){
+ Assert.assertEquals(outputVerifyingString.get(i), outputValues[i]);
+ }
+ }
+ }
+ }
+ }
+ protected void verifyOutput(String experimentId, String outputVerifyingString) throws Exception {
+ AiravataAPI airavataAPI = AiravataAPIFactory.getAPI(new URI(getRegistryURL()), getGatewayName(), getUserName(),
+ new PasswordCallbackImpl());
+ log.info("Experiment ID Returned : " + experimentId);
+
+ ExperimentData experimentData = airavataAPI.getProvenanceManager().getExperimentData(experimentId);
+
+ log.info("Verifying output ...");
+
+ List<WorkflowExecutionDataImpl> workflowInstanceData = experimentData.getWorkflowExecutionDataList();
+
+ Assert.assertFalse("Workflow instance data cannot be empty !", workflowInstanceData.isEmpty());
+
+ for (WorkflowExecutionDataImpl data : workflowInstanceData) {
+ List<NodeExecutionData> nodeDataList = data.getNodeDataList();
+ for (NodeExecutionData nodeData : nodeDataList) {
+
+ Assert.assertFalse("Node execution data list cannot be empty !", nodeDataList.isEmpty());
+
+ for (OutputData outputData : nodeData.getOutputData()) {
+ Assert.assertEquals("Airavata_Test", outputData.getValue());
+ }
+ for (InputData inputData : nodeData.getInputData()) {
+ Assert.assertEquals(outputVerifyingString, inputData.getValue());
+ }
+ }
+ }
+ }
+
+ protected List<WorkflowInput> setupInputs(Workflow workflow, List<String> inputValues) throws Exception {
+ AiravataAPI airavataAPI = AiravataAPIFactory.getAPI(new URI(getRegistryURL()), getGatewayName(), getUserName(),
+ new PasswordCallbackImpl());
+ List<WorkflowInput> workflowInputs = airavataAPI.getWorkflowManager().getWorkflowInputs(workflow.getName());
+
+ Assert.assertEquals(workflowInputs.size(), inputValues.size());
+
+ int i = 0;
+ for (String valueString : inputValues) {
+ workflowInputs.get(i).setValue(valueString);
+ ++i;
+ }
+ return workflowInputs;
+ }
+
+ protected String getWorkflowComposeContent(String fileName) throws IOException {
+ File file = getFile(fileName);
+
+ BufferedReader reader = new BufferedReader(new FileReader(file));
+ String line;
+ StringBuilder buffer = new StringBuilder();
+ while ((line = reader.readLine()) != null) {
+ buffer.append(line);
+ }
+ reader.close();
+ log.debug("Workflow compose - " + buffer.toString());
+ return buffer.toString();
+ }
+
+ private File getFile(String fileName) {
+ File f = new File(".");
+ log.debug(f.getAbsolutePath());
+
+ File file = new File(fileName);
+ if (!file.exists()) {
+ file = new File("modules/integration-tests/"+fileName);
+ }
+ return file;
+ }
+
+ public void setRegistryURL(String registryURL) {
+ this.registryURL = registryURL;
+ }
+
+
+}