You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by sa...@apache.org on 2014/04/19 03:57:30 UTC

git commit: throw exception from AiravataClientFactory when unable to create a client + refactor integration tests

Repository: airavata
Updated Branches:
  refs/heads/master 18ee7cd24 -> 832a7151f


throw exception from AiravataClientFactory when unable to create a client + refactor integration tests


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

Branch: refs/heads/master
Commit: 832a7151f2f3427dc56a75207fbb7d4a1d7aa5c1
Parents: 18ee7cd
Author: Saminda Wijeratne <sa...@gmail.com>
Authored: Fri Apr 18 18:57:10 2014 -0700
Committer: Saminda Wijeratne <sa...@gmail.com>
Committed: Fri Apr 18 18:57:10 2014 -0700

----------------------------------------------------------------------
 .../api/client/AiravataClientFactory.java       |  6 +-
 .../error/AiravataClientConnectException.java   | 32 +++++++++
 .../airavata/integration/SimpleEchoIT.java      | 12 ++--
 .../SingleAppIntegrationTestBase.java           | 75 ++++++++------------
 .../WorkflowIntegrationTestBase.java            | 29 ++++----
 5 files changed, 88 insertions(+), 66 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/airavata/blob/832a7151/airavata-api/airavata-api-stubs/src/main/java/org/apache/airavata/api/client/AiravataClientFactory.java
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-api-stubs/src/main/java/org/apache/airavata/api/client/AiravataClientFactory.java b/airavata-api/airavata-api-stubs/src/main/java/org/apache/airavata/api/client/AiravataClientFactory.java
index ec5b45d..c4274d9 100644
--- a/airavata-api/airavata-api-stubs/src/main/java/org/apache/airavata/api/client/AiravataClientFactory.java
+++ b/airavata-api/airavata-api-stubs/src/main/java/org/apache/airavata/api/client/AiravataClientFactory.java
@@ -22,6 +22,7 @@
 package org.apache.airavata.api.client;
 
 import org.apache.airavata.api.Airavata;
+import org.apache.airavata.api.error.AiravataClientConnectException;
 import org.apache.thrift.protocol.TBinaryProtocol;
 import org.apache.thrift.protocol.TProtocol;
 import org.apache.thrift.transport.TSocket;
@@ -34,15 +35,14 @@ public class AiravataClientFactory {
 
     private final static Logger logger = LoggerFactory.getLogger(AiravataClientFactory.class);
 
-    public static Airavata.Client createAiravataClient(String serverHost, int serverPort){
+    public static Airavata.Client createAiravataClient(String serverHost, int serverPort) throws AiravataClientConnectException{
         try {
             TTransport transport = new TSocket(serverHost, serverPort);
             transport.open();
             TProtocol protocol = new TBinaryProtocol(transport);
             return new Airavata.Client(protocol);
         } catch (TTransportException e) {
-            logger.error("Unable to connect to the server at "+serverHost+":"+serverPort);
+            throw new AiravataClientConnectException("Unable to connect to the server at "+serverHost+":"+serverPort);
         }
-        return null;
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/832a7151/airavata-api/airavata-api-stubs/src/main/java/org/apache/airavata/api/error/AiravataClientConnectException.java
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-api-stubs/src/main/java/org/apache/airavata/api/error/AiravataClientConnectException.java b/airavata-api/airavata-api-stubs/src/main/java/org/apache/airavata/api/error/AiravataClientConnectException.java
new file mode 100644
index 0000000..8c68641
--- /dev/null
+++ b/airavata-api/airavata-api-stubs/src/main/java/org/apache/airavata/api/error/AiravataClientConnectException.java
@@ -0,0 +1,32 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.airavata.api.error;
+
+public class AiravataClientConnectException extends Exception {
+
+	private static final long serialVersionUID = 430165455326177755L;
+
+	public AiravataClientConnectException(String message) {
+		super(message);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata/blob/832a7151/modules/integration-tests/src/test/java/org/apache/airavata/integration/SimpleEchoIT.java
----------------------------------------------------------------------
diff --git a/modules/integration-tests/src/test/java/org/apache/airavata/integration/SimpleEchoIT.java b/modules/integration-tests/src/test/java/org/apache/airavata/integration/SimpleEchoIT.java
index 2360c70..1414dfe 100644
--- a/modules/integration-tests/src/test/java/org/apache/airavata/integration/SimpleEchoIT.java
+++ b/modules/integration-tests/src/test/java/org/apache/airavata/integration/SimpleEchoIT.java
@@ -51,7 +51,9 @@ public class SimpleEchoIT extends SingleAppIntegrationTestBase {
 
     @Test
     public void testSimpleLocalhostEchoService() throws Exception {
-        log.info("Running job in localhost...");
+        log.info("Running job in localhost");
+        log.info("========================\n");
+        log.info("Adding applications...");
         DocumentCreator documentCreator = new DocumentCreator(airavataAPI);
         documentCreator.createLocalHostDocs();
 
@@ -81,16 +83,16 @@ public class SimpleEchoIT extends SingleAppIntegrationTestBase {
         userConfigurationData.setComputationalResourceScheduling(scheduling);
         simpleExperiment.setUserConfigurationData(userConfigurationData);
 
+        log.info("Creating experiment...");
 
         final String expId = createExperiment(simpleExperiment);
-        System.out.println("Experiment Id returned : " + expId);
-
         log.info("Experiment Id returned : " + expId);
 
         launchExperiment(expId);
 
-        System.out.println("Launched successfully");
-
+        log.info("Experiment launched successfully\n");
+        log.info("Monitoring job in localhost");
+        log.info("===========================\n");
         monitorJob(expId);
     }
 

http://git-wip-us.apache.org/repos/asf/airavata/blob/832a7151/modules/integration-tests/src/test/java/org/apache/airavata/integration/SingleAppIntegrationTestBase.java
----------------------------------------------------------------------
diff --git a/modules/integration-tests/src/test/java/org/apache/airavata/integration/SingleAppIntegrationTestBase.java b/modules/integration-tests/src/test/java/org/apache/airavata/integration/SingleAppIntegrationTestBase.java
index 6592bf8..41e4dd8 100644
--- a/modules/integration-tests/src/test/java/org/apache/airavata/integration/SingleAppIntegrationTestBase.java
+++ b/modules/integration-tests/src/test/java/org/apache/airavata/integration/SingleAppIntegrationTestBase.java
@@ -21,8 +21,7 @@
 package org.apache.airavata.integration;
 
 import java.io.IOException;
-import java.util.Map;
-import java.util.Set;
+import java.util.Date;
 
 import org.apache.airavata.api.Airavata;
 import org.apache.airavata.api.client.AiravataClientFactory;
@@ -33,12 +32,10 @@ import org.apache.airavata.api.error.InvalidRequestException;
 import org.apache.airavata.client.AiravataAPIFactory;
 import org.apache.airavata.client.api.AiravataAPI;
 import org.apache.airavata.client.api.exception.AiravataAPIInvocationException;
-import org.apache.airavata.common.utils.AiravataUtils;
-import org.apache.airavata.common.utils.ApplicationSettings;
 import org.apache.airavata.common.utils.ClientSettings;
 import org.apache.airavata.model.workspace.experiment.Experiment;
-import org.apache.airavata.model.workspace.experiment.JobState;
-import org.apache.airavata.model.workspace.experiment.JobStatus;
+import org.apache.airavata.model.workspace.experiment.ExperimentState;
+import org.apache.airavata.model.workspace.experiment.ExperimentStatus;
 import org.apache.thrift.TException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -90,31 +87,19 @@ public class SingleAppIntegrationTestBase {
     * */
     protected void initClient() 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 if the server has started, try - " + tries);
-
+        while (client==null) {
+        	log.info("Waiting till server initializes ........[try "+ (++tries) + " of "+TRIES+"]");
             try {
-                this.client = AiravataClientFactory.createAiravataClient(THRIFT_SERVER_HOST, THRIFT_SERVER_PORT);
-            } catch (Exception e) {
-
-            }
-            if (this.client == null) {
-                log.info("Waiting till server initializes ........");
-                Thread.sleep(TIME_OUT);
-            } else {
-                break;
+                client = AiravataClientFactory.createAiravataClient(THRIFT_SERVER_HOST, THRIFT_SERVER_PORT);
+            } catch (Exception e) { 
+            	if (tries == TRIES) {
+					log("Server not responding. Cannot continue with integration tests ...");
+					throw e;
+				} else {
+					Thread.sleep(TIME_OUT);
+				}
             }
-
-            ++tries;
         }
-
     }
 
     protected String createExperiment(Experiment experiment) throws AiravataSystemException, InvalidRequestException, AiravataClientException, TException {
@@ -133,26 +118,24 @@ public class SingleAppIntegrationTestBase {
     protected void monitorJob(final String expId) {
         Thread monitor = (new Thread() {
             public void run() {
-                Map<String, JobStatus> jobStatuses = null;
+            	long previousUpdateTime=-1;
                 while (true) {
                     try {
-                    	System.out.println("*********Experiment status*** : "+client.getExperimentStatus(expId));
-                        jobStatuses = client.getJobStatuses(expId);
-                        Set<String> strings = jobStatuses.keySet();
-                        for (String key : strings) {
-                            JobStatus jobStatus = jobStatuses.get(key);
-                            if (jobStatus == null) {
-                                return;
-                            } else {
-                                if (JobState.COMPLETE.equals(jobStatus.getJobState())) {
-                                    log.info("Job completed Job ID: " + key);
-                                    return;
-                                } else {
-                                    log.info("Job ID:" + key + "  Job Status : " + jobStatuses.get(key).getJobState().toString());
-                                }
-                            }
-                        }
-                        Thread.sleep(5000);
+                    	ExperimentStatus experimentStatus = client.getExperimentStatus(expId);
+						if (previousUpdateTime!=experimentStatus.getTimeOfStateChange()) {
+							previousUpdateTime=experimentStatus.getTimeOfStateChange();
+							log.info("Experiment ID:"
+									+ expId
+									+ "  Status : "
+									+ experimentStatus.getExperimentState()
+											.toString()
+									+ "["+new Date(previousUpdateTime).toString()+"]");
+							
+						}
+						if (experimentStatus.getExperimentState()==ExperimentState.COMPLETED){
+							break;
+						}
+                        Thread.sleep(2000);
                     } catch (Exception e) {
                         log.error("Thread interrupted", e.getMessage());
                     }

http://git-wip-us.apache.org/repos/asf/airavata/blob/832a7151/modules/integration-tests/src/test/java/org/apache/airavata/integration/WorkflowIntegrationTestBase.java
----------------------------------------------------------------------
diff --git a/modules/integration-tests/src/test/java/org/apache/airavata/integration/WorkflowIntegrationTestBase.java b/modules/integration-tests/src/test/java/org/apache/airavata/integration/WorkflowIntegrationTestBase.java
index 6885cbc..f288a54 100644
--- a/modules/integration-tests/src/test/java/org/apache/airavata/integration/WorkflowIntegrationTestBase.java
+++ b/modules/integration-tests/src/test/java/org/apache/airavata/integration/WorkflowIntegrationTestBase.java
@@ -21,8 +21,17 @@
 
 package org.apache.airavata.integration;
 
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.List;
+
 import junit.framework.Assert;
+
+import org.apache.airavata.api.Airavata;
 import org.apache.airavata.api.client.AiravataClientFactory;
+import org.apache.airavata.api.error.AiravataClientConnectException;
 import org.apache.airavata.api.error.AiravataClientException;
 import org.apache.airavata.api.error.AiravataSystemException;
 import org.apache.airavata.api.error.ExperimentNotFoundException;
@@ -38,10 +47,13 @@ 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.api.Airavata;
 import org.apache.airavata.model.workspace.experiment.Experiment;
 import org.apache.airavata.registry.api.impl.WorkflowExecutionDataImpl;
-import org.apache.airavata.registry.api.workflow.*;
+import org.apache.airavata.registry.api.workflow.ExperimentData;
+import org.apache.airavata.registry.api.workflow.InputData;
+import org.apache.airavata.registry.api.workflow.NodeExecutionData;
+import org.apache.airavata.registry.api.workflow.OutputData;
+import org.apache.airavata.registry.api.workflow.WorkflowNodeType;
 import org.apache.airavata.workflow.model.component.ComponentException;
 import org.apache.airavata.workflow.model.graph.GraphException;
 import org.apache.airavata.workflow.model.wf.Workflow;
@@ -50,13 +62,6 @@ import org.apache.thrift.TException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileReader;
-import java.io.IOException;
-import java.net.URI;
-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.
@@ -89,7 +94,7 @@ public abstract class WorkflowIntegrationTestBase {
         log.info(message);
     }
 
-    public Airavata.Client getClient() {
+    public Airavata.Client getClient() throws AiravataClientConnectException {
         if (client == null){
             client = AiravataClientFactory.createAiravataClient(THRIFT_SERVER_HOST, THRIFT_SERVER_PORT);
         }
@@ -218,11 +223,11 @@ public abstract class WorkflowIntegrationTestBase {
 //
 //    }
 
-    protected String createExperiment (Experiment experiment) throws AiravataSystemException, InvalidRequestException, AiravataClientException, TException {
+    protected String createExperiment (Experiment experiment) throws AiravataSystemException, InvalidRequestException, AiravataClientException, TException, AiravataClientConnectException {
         return getClient().createExperiment(experiment);
     }
 
-    protected void launchExperiment (String expId) throws ExperimentNotFoundException, AiravataSystemException, InvalidRequestException, AiravataClientException, TException {
+    protected void launchExperiment (String expId) throws ExperimentNotFoundException, AiravataSystemException, InvalidRequestException, AiravataClientException, TException, AiravataClientConnectException {
         getClient().launchExperiment(expId, "testToken");
     }