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() {
