Repository: stratos
Updated Branches:
  refs/heads/stratos-4.1.x 999f0f25f -> b7e6d3b52


implementing STRATOS-1628


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

Branch: refs/heads/stratos-4.1.x
Commit: 710485771d4a7a89c79d180cea5fa9c780d86a3c
Parents: 999f0f2
Author: rajkumar <[email protected]>
Authored: Sat Nov 21 18:04:11 2015 +0530
Committer: rajkumar <[email protected]>
Committed: Sat Nov 21 18:04:11 2015 +0530

----------------------------------------------------------------------
 .../stratos/mock/iaas/api/MockIaasApi.java      | 20 ++++++++++
 .../mock/iaas/client/MockIaasApiClient.java     | 15 +++++++
 .../extensions/StratosServerExtension.java      | 42 +++++++++-----------
 3 files changed, 54 insertions(+), 23 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/71048577/components/org.apache.stratos.mock.iaas.api/src/main/java/org/apache/stratos/mock/iaas/api/MockIaasApi.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.mock.iaas.api/src/main/java/org/apache/stratos/mock/iaas/api/MockIaasApi.java
 
b/components/org.apache.stratos.mock.iaas.api/src/main/java/org/apache/stratos/mock/iaas/api/MockIaasApi.java
index d3ff5d1..c9a04c3 100644
--- 
a/components/org.apache.stratos.mock.iaas.api/src/main/java/org/apache/stratos/mock/iaas/api/MockIaasApi.java
+++ 
b/components/org.apache.stratos.mock.iaas.api/src/main/java/org/apache/stratos/mock/iaas/api/MockIaasApi.java
@@ -21,6 +21,8 @@ package org.apache.stratos.mock.iaas.api;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.common.Component;
+import org.apache.stratos.common.services.ComponentStartUpSynchronizer;
 import org.apache.stratos.mock.iaas.api.exception.MockIaasApiException;
 import org.apache.stratos.mock.iaas.config.MockIaasConfig;
 import org.apache.stratos.mock.iaas.domain.MockInstanceContext;
@@ -49,6 +51,24 @@ public class MockIaasApi {
     public MockIaasApi() {
     }
 
+    @GET
+    @Path("/init")
+    @Produces("application/json")
+    public Response init() throws MockIaasApiException {
+
+        PrivilegedCarbonContext carbonContext = 
PrivilegedCarbonContext.getThreadLocalCarbonContext();
+        Object serviceObj = 
carbonContext.getOSGiService(ComponentStartUpSynchronizer.class);
+        if (serviceObj == null || !(serviceObj instanceof 
ComponentStartUpSynchronizer)) {
+            return 
Response.status(Response.Status.SERVICE_UNAVAILABLE).build();
+        }
+
+        ComponentStartUpSynchronizer componentStartUpSynchronizer = 
(ComponentStartUpSynchronizer) serviceObj;
+        if 
(!componentStartUpSynchronizer.isComponentActive(Component.MockIaaS)) {
+            return 
Response.status(Response.Status.SERVICE_UNAVAILABLE).build();
+        }
+        return Response.status(Response.Status.OK).build();
+    }
+
     @POST
     @Path("/instances")
     @Consumes("application/json")

http://git-wip-us.apache.org/repos/asf/stratos/blob/71048577/components/org.apache.stratos.mock.iaas.client/src/main/java/org/apache/stratos/mock/iaas/client/MockIaasApiClient.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.mock.iaas.client/src/main/java/org/apache/stratos/mock/iaas/client/MockIaasApiClient.java
 
b/components/org.apache.stratos.mock.iaas.client/src/main/java/org/apache/stratos/mock/iaas/client/MockIaasApiClient.java
index 1ec00e6..571d082 100644
--- 
a/components/org.apache.stratos.mock.iaas.client/src/main/java/org/apache/stratos/mock/iaas/client/MockIaasApiClient.java
+++ 
b/components/org.apache.stratos.mock.iaas.client/src/main/java/org/apache/stratos/mock/iaas/client/MockIaasApiClient.java
@@ -39,6 +39,7 @@ public class MockIaasApiClient {
 
     private static final Log log = LogFactory.getLog(MockIaasApiClient.class);
     private static final String INSTANCES_CONTEXT = "/instances/";
+    private static final String INIT_CONTEXT = "/init";
 
     private RestClient restClient;
     private String endpoint;
@@ -48,6 +49,20 @@ public class MockIaasApiClient {
         this.endpoint = endpoint;
     }
 
+    public boolean isMockIaaSReady() {
+        try {
+            URI uri = new URIBuilder(endpoint + INIT_CONTEXT).build();
+            HttpResponse response = restClient.doGet(uri);
+            if (response != null) {
+                return response.getStatusCode() == 200;
+            }
+            throw new RuntimeException("An unknown error occurred");
+        } catch (Exception e) {
+            String message = "Could not check whether mock-iaas is active";
+            throw new RuntimeException(message, e);
+        }
+    }
+
     public MockInstanceMetadata startInstance(MockInstanceContext 
mockInstanceContext) {
         try {
             GsonBuilder gsonBuilder = new GsonBuilder();

http://git-wip-us.apache.org/repos/asf/stratos/blob/71048577/products/stratos/modules/integration/test-common/src/main/java/org/apache/stratos/integration/common/extensions/StratosServerExtension.java
----------------------------------------------------------------------
diff --git 
a/products/stratos/modules/integration/test-common/src/main/java/org/apache/stratos/integration/common/extensions/StratosServerExtension.java
 
b/products/stratos/modules/integration/test-common/src/main/java/org/apache/stratos/integration/common/extensions/StratosServerExtension.java
index e401929..1622162 100644
--- 
a/products/stratos/modules/integration/test-common/src/main/java/org/apache/stratos/integration/common/extensions/StratosServerExtension.java
+++ 
b/products/stratos/modules/integration/test-common/src/main/java/org/apache/stratos/integration/common/extensions/StratosServerExtension.java
@@ -24,6 +24,7 @@ import org.apache.log4j.Logger;
 import org.apache.stratos.common.test.TestLogAppender;
 import org.apache.stratos.integration.common.StratosTestServerManager;
 import org.apache.stratos.integration.common.Util;
+import org.apache.stratos.mock.iaas.client.MockIaasApiClient;
 import org.wso2.carbon.automation.engine.context.AutomationContext;
 import org.wso2.carbon.automation.engine.context.TestUserMode;
 import 
org.wso2.carbon.automation.engine.exceptions.AutomationFrameworkException;
@@ -41,20 +42,18 @@ import static org.testng.Assert.assertNotNull;
  */
 public class StratosServerExtension extends ExecutionListenerExtension {
     private static final Log log = 
LogFactory.getLog(StratosServerExtension.class);
-    private TestLogAppender testLogAppender;
+    private static final String MOCK_IAAS_API_EP = "/mock-iaas/api";
     private static StratosTestServerManager stratosTestServerManager;
     private static BrokerService broker;
+    private static MockIaasApiClient mockIaasApiClient;
 
     @Override
     public void initiate() throws AutomationFrameworkException {
         broker = new BrokerService();
-        testLogAppender = new TestLogAppender();
     }
 
     @Override
     public void onExecutionStart() throws AutomationFrameworkException {
-        Logger.getRootLogger().addAppender(testLogAppender);
-        Logger.getRootLogger().setLevel(Level.INFO);
         int activeMQDynamicPort = startActiveMQServer();
         startStratosServer(activeMQDynamicPort);
     }
@@ -107,11 +106,10 @@ public class StratosServerExtension extends 
ExecutionListenerExtension {
             long time3 = System.currentTimeMillis();
             String carbonHome = stratosTestServerManager.startServer();
             assertNotNull(carbonHome, "CARBON_HOME is null");
-            while (!serverStarted()) {
-                log.info("Waiting for topology to be initialized...");
-                Thread.sleep(5000);
-            }
-            while (!mockServiceStarted()) {
+
+            // checking whether mock iaas component is ready. If it is ready, 
all the components are activated.
+            mockIaasApiClient = new 
MockIaasApiClient(stratosTestServerManager.getWebAppURL() + MOCK_IAAS_API_EP);
+            while 
(!StratosServerExtension.mockIaasApiClient.isMockIaaSReady()) {
                 log.info("Waiting for mock service to be initialized...");
                 Thread.sleep(1000);
             }
@@ -172,22 +170,20 @@ public class StratosServerExtension extends 
ExecutionListenerExtension {
         }
     }
 
-    private boolean serverStarted() {
-        for (String message : testLogAppender.getMessages()) {
-            if (message.contains("Topology initialized")) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    private boolean mockServiceStarted() {
-        for (String message : testLogAppender.getMessages()) {
-            if (message.contains("Mock IaaS service component activated")) {
-                return true;
+    public static void restartStratosServer() throws 
AutomationFrameworkException {
+        log.info("Restarting Stratos server...");
+        long time1 = System.currentTimeMillis();
+        try {
+            stratosTestServerManager.restartGracefully();
+            while 
(!StratosServerExtension.mockIaasApiClient.isMockIaaSReady()) {
+                log.info("Waiting for mock service to be initialized...");
+                Thread.sleep(1000);
             }
+            long time2 = System.currentTimeMillis();
+            log.info(String.format("Stratos server restarted in %d sec", 
(time2 - time1) / 1000));
+        } catch (Exception e) {
+            throw new AutomationFrameworkException("Could not restart Stratos 
server", e);
         }
-        return false;
     }
 
     public static StratosTestServerManager getStratosTestServerManager() {

Reply via email to