adding application add, deploy, update, undeploy and remove in the integration test
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/77e45950 Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/77e45950 Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/77e45950 Branch: refs/heads/master Commit: 77e4595007e894876dd45600a90579546c7a5f77 Parents: 83e7fbe Author: reka <[email protected]> Authored: Mon Aug 3 14:44:43 2015 +0530 Committer: reka <[email protected]> Committed: Mon Aug 3 14:45:05 2015 +0530 ---------------------------------------------------------------------- .../tests/ApplicationPolicyTest.java | 2 + .../integration/tests/ApplicationTest.java | 221 +++++++ .../tests/AutoscalingPolicyTest.java | 2 + .../integration/tests/CartridgeGroupTest.java | 144 ++++ .../integration/tests/CartridgeTest.java | 2 + .../integration/tests/DeploymentPolicyTest.java | 16 +- .../integration/tests/RestConstants.java | 4 + .../tests/SampleApplicationsTest.java | 650 ++++++++++++++++++- .../application-policy-1.json | 7 +- .../single-cartridge-app-multi-cloud/README.md | 30 - .../artifacts/application.json | 25 - .../artifacts/application-signup.json | 18 - .../artifacts/application.json | 25 - .../artifacts/domain-mappings.json | 9 - .../single-cartridge-app/g-sc-G123-1.json | 86 +++ .../update/g-sc-G123-1.json | 86 +++ .../simple/single-group-app/README.md | 28 - .../single-group-app/artifacts/application.json | 69 -- .../autoscaling-policy-1.json | 14 + .../test/resources/cartridge-groups/group1.json | 38 -- .../cartridges-groups/cartrdige-nested.json | 18 +- .../update/cartrdige-nested.json | 50 ++ .../src/test/resources/cartridges/mock/c1.json | 45 ++ .../src/test/resources/cartridges/mock/c2.json | 45 ++ .../src/test/resources/cartridges/mock/c3.json | 45 ++ 25 files changed, 1392 insertions(+), 287 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/77e45950/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/ApplicationPolicyTest.java ---------------------------------------------------------------------- diff --git a/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/ApplicationPolicyTest.java b/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/ApplicationPolicyTest.java index c4c0261..b1b37b2 100644 --- a/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/ApplicationPolicyTest.java +++ b/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/ApplicationPolicyTest.java @@ -124,6 +124,8 @@ public class ApplicationPolicyTest extends StratosArtifactsUtils { if (response != null) { if ((response.getStatusCode() >= 200) && (response.getStatusCode() < 300)) { return true; + } else if(response.getContent().contains("it is used")) { + return false; } else { GsonBuilder gsonBuilder = new GsonBuilder(); Gson gson = gsonBuilder.create(); http://git-wip-us.apache.org/repos/asf/stratos/blob/77e45950/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/ApplicationTest.java ---------------------------------------------------------------------- diff --git a/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/ApplicationTest.java b/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/ApplicationTest.java new file mode 100644 index 0000000..284401e --- /dev/null +++ b/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/ApplicationTest.java @@ -0,0 +1,221 @@ +/* + * 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.stratos.integration.tests; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.http.client.utils.URIBuilder; +import org.apache.stratos.common.beans.application.ApplicationBean; +import org.apache.stratos.common.beans.policy.autoscale.AutoscalePolicyBean; +import org.apache.stratos.integration.tests.rest.ErrorResponse; +import org.apache.stratos.integration.tests.rest.HttpResponse; +import org.apache.stratos.integration.tests.rest.RestClient; + +import java.net.URI; + +/** + * Test to handle autoscaling policy CRUD operations + */ +public class ApplicationTest extends StratosArtifactsUtils { + private static final Log log = LogFactory.getLog(StratosTestServerManager.class); + String applications = "/applications/simple/single-cartridge-app/"; + String applicationsUpdate = "/applications/simple/single-cartridge-app/update/"; + + + public boolean addApplication(String applicationId, String endpoint, RestClient restClient) { + try { + String content = getJsonStringFromFile(applications + applicationId); + URI uri = new URIBuilder(endpoint + RestConstants.APPLICATIONS).build(); + + HttpResponse response = restClient.doPost(uri, content); + if (response != null) { + if ((response.getStatusCode() >= 200) && (response.getStatusCode() < 300)) { + return true; + } else { + GsonBuilder gsonBuilder = new GsonBuilder(); + Gson gson = gsonBuilder.create(); + ErrorResponse errorResponse = gson.fromJson(response.getContent(), ErrorResponse.class); + if (errorResponse != null) { + throw new RuntimeException(errorResponse.getErrorMessage()); + } + } + } + throw new RuntimeException("An unknown error occurred"); + } catch (Exception e) { + String message = "Could not start mock instance"; + throw new RuntimeException(message, e); + } + } + + public boolean deployApplication(String applicationId, String applicationPolicyId, + String endpoint, RestClient restClient) { + try { + URI uri = new URIBuilder(endpoint + RestConstants.APPLICATIONS + "/" + applicationId + + RestConstants.APPLICATIONS_DEPLOY + "/" + applicationPolicyId).build(); + + HttpResponse response = restClient.doPost(uri, ""); + if (response != null) { + if ((response.getStatusCode() >= 200) && (response.getStatusCode() < 300)) { + return true; + } else { + GsonBuilder gsonBuilder = new GsonBuilder(); + Gson gson = gsonBuilder.create(); + ErrorResponse errorResponse = gson.fromJson(response.getContent(), ErrorResponse.class); + if (errorResponse != null) { + throw new RuntimeException(errorResponse.getErrorMessage()); + } + } + } + throw new RuntimeException("An unknown error occurred"); + } catch (Exception e) { + String message = "Could not start mock instance"; + throw new RuntimeException(message, e); + } + } + + public boolean undeployApplication(String applicationId, + String endpoint, RestClient restClient) { + try { + URI uri = new URIBuilder(endpoint + RestConstants.APPLICATIONS + "/" + applicationId + + RestConstants.APPLICATIONS_UNDEPLOY).build(); + + HttpResponse response = restClient.doPost(uri, ""); + if (response != null) { + if ((response.getStatusCode() >= 200) && (response.getStatusCode() < 300)) { + return true; + } else { + GsonBuilder gsonBuilder = new GsonBuilder(); + Gson gson = gsonBuilder.create(); + ErrorResponse errorResponse = gson.fromJson(response.getContent(), ErrorResponse.class); + if (errorResponse != null) { + throw new RuntimeException(errorResponse.getErrorMessage()); + } + } + } + throw new RuntimeException("An unknown error occurred"); + } catch (Exception e) { + String message = "Could not start mock instance"; + throw new RuntimeException(message, e); + } + } + + public boolean forceUndeployApplication(String applicationId, + String endpoint, RestClient restClient) { + try { + URI uri = new URIBuilder(endpoint + RestConstants.APPLICATIONS + "/" + applicationId + + RestConstants.APPLICATIONS_UNDEPLOY + "?force=true").build(); + + HttpResponse response = restClient.doPost(uri, ""); + if (response != null) { + if ((response.getStatusCode() >= 200) && (response.getStatusCode() < 300)) { + return true; + } else { + GsonBuilder gsonBuilder = new GsonBuilder(); + Gson gson = gsonBuilder.create(); + ErrorResponse errorResponse = gson.fromJson(response.getContent(), ErrorResponse.class); + if (errorResponse != null) { + throw new RuntimeException(errorResponse.getErrorMessage()); + } + } + } + throw new RuntimeException("An unknown error occurred"); + } catch (Exception e) { + String message = "Could not start mock instance"; + throw new RuntimeException(message, e); + } + } + + public ApplicationBean getApplication(String applicationId, String endpoint, + RestClient restClient) { + try { + URI uri = new URIBuilder(endpoint + RestConstants.APPLICATIONS + "/" + + applicationId).build(); + HttpResponse response = restClient.doGet(uri); + GsonBuilder gsonBuilder = new GsonBuilder(); + Gson gson = gsonBuilder.create(); + if (response != null) { + if ((response.getStatusCode() >= 200) && (response.getStatusCode() < 300)) { + return gson.fromJson(response.getContent(), ApplicationBean.class); + } else if (response.getStatusCode() == 404) { + return null; + } else { + ErrorResponse errorResponse = gson.fromJson(response.getContent(), ErrorResponse.class); + if (errorResponse != null) { + throw new RuntimeException(errorResponse.getErrorMessage()); + } + } + } + throw new RuntimeException("An unknown error occurred"); + } catch (Exception e) { + String message = "Could not start mock instance"; + throw new RuntimeException(message, e); + } + } + + public boolean updateApplication(String applicationId, String endpoint, RestClient restClient) { + try { + String content = getJsonStringFromFile(applicationsUpdate + applicationId); + URI uri = new URIBuilder(endpoint + RestConstants.APPLICATIONS).build(); + HttpResponse response = restClient.doPut(uri, content); + if (response != null) { + if ((response.getStatusCode() >= 200) && (response.getStatusCode() < 300)) { + return true; + } else { + GsonBuilder gsonBuilder = new GsonBuilder(); + Gson gson = gsonBuilder.create(); + ErrorResponse errorResponse = gson.fromJson(response.getContent(), ErrorResponse.class); + if (errorResponse != null) { + throw new RuntimeException(errorResponse.getErrorMessage()); + } + } + } + throw new RuntimeException("An unknown error occurred"); + } catch (Exception e) { + String message = "Could not start mock instance"; + throw new RuntimeException(message, e); + } + } + + public boolean removeApplication(String applicationId, String endpoint, RestClient restClient) { + try { + URI uri = new URIBuilder(endpoint + RestConstants.APPLICATIONS + "/" + + applicationId).build(); + HttpResponse response = restClient.doDelete(uri); + if (response != null) { + if ((response.getStatusCode() >= 200) && (response.getStatusCode() < 300)) { + return true; + } else { + GsonBuilder gsonBuilder = new GsonBuilder(); + Gson gson = gsonBuilder.create(); + ErrorResponse errorResponse = gson.fromJson(response.getContent(), ErrorResponse.class); + if (errorResponse != null) { + throw new RuntimeException(errorResponse.getErrorMessage()); + } + } + } + throw new RuntimeException("An unknown error occurred"); + } catch (Exception e) { + String message = "Could not start mock instance"; + throw new RuntimeException(message, e); + } + } +} http://git-wip-us.apache.org/repos/asf/stratos/blob/77e45950/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/AutoscalingPolicyTest.java ---------------------------------------------------------------------- diff --git a/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/AutoscalingPolicyTest.java b/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/AutoscalingPolicyTest.java index fe4fa55..f5f3786 100644 --- a/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/AutoscalingPolicyTest.java +++ b/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/AutoscalingPolicyTest.java @@ -123,6 +123,8 @@ public class AutoscalingPolicyTest extends StratosArtifactsUtils { if (response != null) { if ((response.getStatusCode() >= 200) && (response.getStatusCode() < 300)) { return true; + } else if(response.getContent().contains("is in use")) { + return false; } else { GsonBuilder gsonBuilder = new GsonBuilder(); Gson gson = gsonBuilder.create(); http://git-wip-us.apache.org/repos/asf/stratos/blob/77e45950/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/CartridgeGroupTest.java ---------------------------------------------------------------------- diff --git a/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/CartridgeGroupTest.java b/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/CartridgeGroupTest.java new file mode 100644 index 0000000..dcbe5c9 --- /dev/null +++ b/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/CartridgeGroupTest.java @@ -0,0 +1,144 @@ +/* + * 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.stratos.integration.tests; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.http.client.utils.URIBuilder; +import org.apache.stratos.common.beans.cartridge.CartridgeGroupBean; +import org.apache.stratos.integration.tests.rest.ErrorResponse; +import org.apache.stratos.integration.tests.rest.HttpResponse; +import org.apache.stratos.integration.tests.rest.RestClient; + +import java.net.URI; + +/** + * Test to handle Network partition CRUD operations + */ +public class CartridgeGroupTest extends StratosArtifactsUtils { + private static final Log log = LogFactory.getLog(StratosTestServerManager.class); + String cartridgeGroups = "/cartridges-groups/"; + String cartridgeGroupsUpdate = "/cartridges-groups/update/"; + + + public boolean addCartridgeGroup(String groupName, String endpoint, RestClient restClient) { + try { + String content = getJsonStringFromFile(cartridgeGroups + groupName); + URI uri = new URIBuilder(endpoint + RestConstants.CARTRIDGE_GROUPS).build(); + + HttpResponse response = restClient.doPost(uri, content); + if (response != null) { + if ((response.getStatusCode() >= 200) && (response.getStatusCode() < 300)) { + return true; + } else { + GsonBuilder gsonBuilder = new GsonBuilder(); + Gson gson = gsonBuilder.create(); + ErrorResponse errorResponse = gson.fromJson(response.getContent(), ErrorResponse.class); + if (errorResponse != null) { + throw new RuntimeException(errorResponse.getErrorMessage()); + } + } + } + throw new RuntimeException("An unknown error occurred"); + } catch (Exception e) { + String message = "Could not start mock instance"; + throw new RuntimeException(message, e); + } + } + + public CartridgeGroupBean getCartridgeGroup(String groupName, String endpoint, + RestClient restClient) { + try { + URI uri = new URIBuilder(endpoint + RestConstants.CARTRIDGE_GROUPS + "/" + + groupName).build(); + HttpResponse response = restClient.doGet(uri); + GsonBuilder gsonBuilder = new GsonBuilder(); + Gson gson = gsonBuilder.create(); + if (response != null) { + if ((response.getStatusCode() >= 200) && (response.getStatusCode() < 300)) { + return gson.fromJson(response.getContent(), CartridgeGroupBean.class); + } else if (response.getStatusCode() == 404) { + return null; + } else { + ErrorResponse errorResponse = gson.fromJson(response.getContent(), ErrorResponse.class); + if (errorResponse != null) { + throw new RuntimeException(errorResponse.getErrorMessage()); + } + } + } + throw new RuntimeException("An unknown error occurred"); + } catch (Exception e) { + String message = "Could not start mock instance"; + throw new RuntimeException(message, e); + } + } + + public boolean updateCartridgeGroup(String groupName, String endpoint, RestClient restClient) { + try { + String content = getJsonStringFromFile(cartridgeGroupsUpdate + groupName); + URI uri = new URIBuilder(endpoint + RestConstants.CARTRIDGE_GROUPS).build(); + HttpResponse response = restClient.doPut(uri, content); + if (response != null) { + if ((response.getStatusCode() >= 200) && (response.getStatusCode() < 300)) { + return true; + } else { + GsonBuilder gsonBuilder = new GsonBuilder(); + Gson gson = gsonBuilder.create(); + ErrorResponse errorResponse = gson.fromJson(response.getContent(), ErrorResponse.class); + if (errorResponse != null) { + throw new RuntimeException(errorResponse.getErrorMessage()); + } + } + } + throw new RuntimeException("An unknown error occurred"); + } catch (Exception e) { + String message = "Could not start mock instance"; + throw new RuntimeException(message, e); + } + } + + public boolean removeCartridgeGroup(String groupName, String endpoint, RestClient restClient) { + try { + URI uri = new URIBuilder(endpoint + RestConstants.CARTRIDGE_GROUPS + "/" + + groupName).build(); + HttpResponse response = restClient.doDelete(uri); + if (response != null) { + if ((response.getStatusCode() >= 200) && (response.getStatusCode() < 300)) { + return true; + } else if(response.getContent().contains("it is used")) { + return false; + } else { + GsonBuilder gsonBuilder = new GsonBuilder(); + Gson gson = gsonBuilder.create(); + ErrorResponse errorResponse = gson.fromJson(response.getContent(), ErrorResponse.class); + if (errorResponse != null) { + throw new RuntimeException(errorResponse.getErrorMessage()); + } + } + } + throw new RuntimeException("An unknown error occurred"); + } catch (Exception e) { + String message = "Could not start mock instance"; + throw new RuntimeException(message, e); + } + } +} http://git-wip-us.apache.org/repos/asf/stratos/blob/77e45950/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/CartridgeTest.java ---------------------------------------------------------------------- diff --git a/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/CartridgeTest.java b/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/CartridgeTest.java index 9e9e07f..7cd5412 100644 --- a/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/CartridgeTest.java +++ b/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/CartridgeTest.java @@ -124,6 +124,8 @@ public class CartridgeTest extends StratosArtifactsUtils { if (response != null) { if ((response.getStatusCode() >= 200) && (response.getStatusCode() < 300)) { return true; + } else if (response.getContent().contains("it is used")) { + return false; } else { GsonBuilder gsonBuilder = new GsonBuilder(); Gson gson = gsonBuilder.create(); http://git-wip-us.apache.org/repos/asf/stratos/blob/77e45950/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/DeploymentPolicyTest.java ---------------------------------------------------------------------- diff --git a/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/DeploymentPolicyTest.java b/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/DeploymentPolicyTest.java index b437c5e..e7e80eb 100644 --- a/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/DeploymentPolicyTest.java +++ b/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/DeploymentPolicyTest.java @@ -100,15 +100,17 @@ public class DeploymentPolicyTest extends StratosArtifactsUtils { if (response != null) { if ((response.getStatusCode() >= 200) && (response.getStatusCode() < 300)) { return true; + } else if(response.getContent().contains("it is used")) { + return false; } else { - GsonBuilder gsonBuilder = new GsonBuilder(); - Gson gson = gsonBuilder.create(); - ErrorResponse errorResponse = gson.fromJson(response.getContent(), ErrorResponse.class); - if (errorResponse != null) { - throw new RuntimeException(errorResponse.getErrorMessage()); + GsonBuilder gsonBuilder = new GsonBuilder(); + Gson gson = gsonBuilder.create(); + ErrorResponse errorResponse = gson.fromJson(response.getContent(), ErrorResponse.class); + if (errorResponse != null) { + throw new RuntimeException(errorResponse.getErrorMessage()); + } } } - } throw new RuntimeException("An unknown error occurred"); } catch (Exception e) { String message = "Could not start mock instance"; @@ -124,6 +126,8 @@ public class DeploymentPolicyTest extends StratosArtifactsUtils { if (response != null) { if ((response.getStatusCode() >= 200) && (response.getStatusCode() < 300)) { return true; + } else if(response.getContent().contains("is in use")) { + return false; } else { GsonBuilder gsonBuilder = new GsonBuilder(); Gson gson = gsonBuilder.create(); http://git-wip-us.apache.org/repos/asf/stratos/blob/77e45950/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/RestConstants.java ---------------------------------------------------------------------- diff --git a/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/RestConstants.java b/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/RestConstants.java index 577d211..9678c4e 100644 --- a/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/RestConstants.java +++ b/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/RestConstants.java @@ -27,7 +27,11 @@ public class RestConstants { public static final String DEPLOYMENT_POLICIES = "/" + API + "/deploymentPolicies"; public static final String NETWORK_PARTITIONS = "/" + API + "/networkPartitions"; public static final String CARTRIDGES = "/" + API + "/cartridges"; + public static final String CARTRIDGE_GROUPS = "/" + API + "/cartridgeGroups"; public static final String APPLICATION_POLICIES = "/" + API + "/applicationPolicies"; public static final String APPLICATIONS = "/" + API + "/applications"; + public static final String APPLICATIONS_RUNTIME = "/runtime"; + public static final String APPLICATIONS_DEPLOY = "/deploy"; + public static final String APPLICATIONS_UNDEPLOY = "/undeploy"; } http://git-wip-us.apache.org/repos/asf/stratos/blob/77e45950/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/SampleApplicationsTest.java ---------------------------------------------------------------------- diff --git a/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/SampleApplicationsTest.java b/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/SampleApplicationsTest.java index 9b75245..c98e8f9 100644 --- a/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/SampleApplicationsTest.java +++ b/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/SampleApplicationsTest.java @@ -25,26 +25,40 @@ import org.apache.commons.exec.PumpStreamHandler; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.stratos.autoscaler.stub.pojo.ApplicationContext; import org.apache.stratos.common.beans.PropertyBean; +import org.apache.stratos.common.beans.application.ApplicationBean; import org.apache.stratos.common.beans.cartridge.CartridgeBean; +import org.apache.stratos.common.beans.cartridge.CartridgeGroupBean; import org.apache.stratos.common.beans.partition.NetworkPartitionBean; import org.apache.stratos.common.beans.policy.autoscale.AutoscalePolicyBean; +import org.apache.stratos.common.beans.policy.deployment.ApplicationPolicyBean; import org.apache.stratos.common.beans.policy.deployment.DeploymentPolicyBean; +import org.apache.stratos.common.client.AutoscalerServiceClient; import org.apache.stratos.common.threading.StratosThreadPool; import org.apache.stratos.integration.tests.rest.RestClient; -import org.apache.stratos.messaging.domain.application.Application; -import org.apache.stratos.messaging.domain.application.ApplicationStatus; +import org.apache.stratos.messaging.domain.application.*; +import org.apache.stratos.messaging.domain.instance.ClusterInstance; +import org.apache.stratos.messaging.domain.instance.GroupInstance; +import org.apache.stratos.messaging.domain.topology.Cluster; +import org.apache.stratos.messaging.domain.topology.Member; +import org.apache.stratos.messaging.domain.topology.MemberStatus; +import org.apache.stratos.messaging.domain.topology.Service; import org.apache.stratos.messaging.message.receiver.application.ApplicationManager; import org.apache.stratos.messaging.message.receiver.application.ApplicationsEventReceiver; +import org.apache.stratos.messaging.message.receiver.topology.TopologyEventReceiver; +import org.apache.stratos.messaging.message.receiver.topology.TopologyManager; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import java.io.ByteArrayOutputStream; import java.io.File; +import java.rmi.RemoteException; +import java.util.Collection; +import java.util.Set; import java.util.concurrent.ExecutorService; import static junit.framework.Assert.*; -import static junit.framework.Assert.assertEquals; /** * Sample application tests. @@ -53,30 +67,42 @@ public class SampleApplicationsTest extends StratosTestServerManager { private static final Log log = LogFactory.getLog(StratosTestServerManager.class); - public static final int APPLICATION_ACTIVATION_TIMEOUT = 600000; + public static final int APPLICATION_ACTIVATION_TIMEOUT = 120000; + public static final String APPLICATION_STATUS_CREATED = "Created"; + public static final String APPLICATION_STATUS_UNDEPLOYING = "Undeploying"; + private String endpoint = "https://localhost:9443"; + private ApplicationsEventReceiver applicationsEventReceiver; + private TopologyEventReceiver topologyEventReceiver; private RestClient restClient = new RestClient(); - private String endpoint = "https://localhost:9443"; private AutoscalingPolicyTest autoscalingPolicyTest; private NetworkPartitionTest networkPartitionTest; private CartridgeTest cartridgeTest; private DeploymentPolicyTest deploymentPolicyTest; + private CartridgeGroupTest cartridgeGroupTest; + private ApplicationTest applicationTest; + private ApplicationPolicyTest applicationPolicyTest; + @BeforeClass public void setUp() { // Set jndi.properties.dir system property for initializing event receivers System.setProperty("jndi.properties.dir", getResourcesFolderPath()); + System.setProperty("autoscaler.service.url", "https://localhost:9443/services/AutoscalerService"); autoscalingPolicyTest = new AutoscalingPolicyTest(); networkPartitionTest = new NetworkPartitionTest(); cartridgeTest = new CartridgeTest(); deploymentPolicyTest = new DeploymentPolicyTest(); + cartridgeGroupTest = new CartridgeGroupTest(); + applicationTest = new ApplicationTest(); + applicationPolicyTest = new ApplicationPolicyTest(); } @Test public void testSingleCartridgeApplication() { try { initializeApplicationEventReceiver(); - runApplicationTest("simple/single-cartridge-app", "single-cartridge-app"); + //runApplicationTest("simple/single-cartridge-app", "single-cartridge-app"); } catch (Exception e) { log.error(e); assertTrue("An error occurred", false); @@ -86,12 +112,12 @@ public class SampleApplicationsTest extends StratosTestServerManager { @Test public void testAutoscalingPolicy() { try { - initializeApplicationEventReceiver(); boolean added = autoscalingPolicyTest.addAutoscalingPolicy("autoscaling-policy-c0.json", endpoint, restClient); assertEquals(added, true); AutoscalePolicyBean bean = autoscalingPolicyTest.getAutoscalingPolicy("autoscaling-policy-c0", endpoint, restClient); + assertEquals(bean.getId(), "autoscaling-policy-c0"); assertEquals(bean.getLoadThresholds().getRequestsInFlight().getThreshold(), 35.0, 0.0); assertEquals(bean.getLoadThresholds().getMemoryConsumption().getThreshold(), 45.0, 0.0); assertEquals(bean.getLoadThresholds().getLoadAverage().getThreshold(), 25.0, 0.0); @@ -120,9 +146,399 @@ public class SampleApplicationsTest extends StratosTestServerManager { } @Test - public void testNetworkPartition() { + public void testCartridgeGroup() { + try { + boolean addedC1 = cartridgeTest.addCartridge("c1.json", endpoint, restClient); + assertEquals(addedC1, true); + + boolean addedC2 = cartridgeTest.addCartridge("c2.json", endpoint, restClient); + assertEquals(addedC2, true); + + boolean addedC3 = cartridgeTest.addCartridge("c3.json", endpoint, restClient); + assertEquals(addedC3, true); + + boolean added = cartridgeGroupTest.addCartridgeGroup("cartrdige-nested.json", + endpoint, restClient); + assertEquals(added, true); + CartridgeGroupBean bean = cartridgeGroupTest.getCartridgeGroup("G1", endpoint, + restClient); + assertEquals(bean.getName(), "G1"); + + boolean updated = cartridgeGroupTest.updateCartridgeGroup("cartrdige-nested.json", + endpoint, restClient); + assertEquals(updated, true); + CartridgeGroupBean updatedBean = cartridgeGroupTest.getCartridgeGroup("G1", endpoint, + restClient); + assertEquals(updatedBean.getName(), "G1"); + + boolean removedC1 = cartridgeTest.removeCartridge("c1", endpoint, + restClient); + assertEquals(removedC1, false); + + boolean removedC2 = cartridgeTest.removeCartridge("c2", endpoint, + restClient); + assertEquals(removedC2, false); + + boolean removedC3 = cartridgeTest.removeCartridge("c3", endpoint, + restClient); + assertEquals(removedC3, false); + + boolean removed = cartridgeGroupTest.removeCartridgeGroup("G1", endpoint, + restClient); + assertEquals(removed, true); + + CartridgeGroupBean beanRemoved = cartridgeGroupTest.getCartridgeGroup("G1", endpoint, + restClient); + assertEquals(beanRemoved, null); + + removedC1 = cartridgeTest.removeCartridge("c1", endpoint, + restClient); + assertEquals(removedC1, true); + + removedC2 = cartridgeTest.removeCartridge("c2", endpoint, + restClient); + assertEquals(removedC2, true); + + removedC3 = cartridgeTest.removeCartridge("c3", endpoint, + restClient); + assertEquals(removedC3, true); + + } catch (Exception e) { + log.error(e); + assertTrue("An error occurred while handling autoscaling policy", false); + } + } + + @Test + public void testApplication() { + try { + boolean addedScalingPolicy = autoscalingPolicyTest.addAutoscalingPolicy("autoscaling-policy-1.json", + endpoint, restClient); + assertEquals(addedScalingPolicy, true); + + boolean addedC1 = cartridgeTest.addCartridge("c1.json", endpoint, restClient); + assertEquals(addedC1, true); + + boolean addedC2 = cartridgeTest.addCartridge("c2.json", endpoint, restClient); + assertEquals(addedC2, true); + + boolean addedC3 = cartridgeTest.addCartridge("c3.json", endpoint, restClient); + assertEquals(addedC3, true); + + boolean addedG1 = cartridgeGroupTest.addCartridgeGroup("cartrdige-nested.json", + endpoint, restClient); + assertEquals(addedG1, true); + CartridgeGroupBean beanG1 = cartridgeGroupTest.getCartridgeGroup("G1", endpoint, + restClient); + assertEquals(beanG1.getName(), "G1"); + + boolean addedN1 = networkPartitionTest.addNetworkPartition("network-partition-1.json", + endpoint, restClient); + assertEquals(addedN1, true); + + boolean addedN2 = networkPartitionTest.addNetworkPartition("network-partition-2.json", + endpoint, restClient); + assertEquals(addedN2, true); + + boolean addedDep = deploymentPolicyTest.addDeploymentPolicy("deployment-policy-1.json", + endpoint, restClient); + assertEquals(addedDep, true); + + boolean added = applicationTest.addApplication("g-sc-G123-1.json", + endpoint, restClient); + assertEquals(added, true); + ApplicationBean bean = applicationTest.getApplication("g-sc-G123-1", endpoint, + restClient); + assertEquals(bean.getApplicationId(), "g-sc-G123-1"); + + assertEquals(bean.getComponents().getGroups().get(0).getName(), "G1"); + assertEquals(bean.getComponents().getGroups().get(0).getAlias(), "group1"); + assertEquals(bean.getComponents().getGroups().get(0).getGroupMaxInstances(), 1); + assertEquals(bean.getComponents().getGroups().get(0).getGroupMinInstances(), 1); + + assertEquals(bean.getComponents().getGroups().get(0).getCartridges().get(0).getType(), "c1"); + assertEquals(bean.getComponents().getGroups().get(0).getCartridges().get(0).getCartridgeMin(), 1); + assertEquals(bean.getComponents().getGroups().get(0).getCartridges().get(0).getCartridgeMax(), 2); + + assertEquals(bean.getComponents().getGroups().get(0).getGroups().get(0).getAlias(), "group2"); + assertEquals(bean.getComponents().getGroups().get(0).getGroups().get(0).getName(), "G2"); + assertEquals(bean.getComponents().getGroups().get(0).getGroups().get(0).getGroupMaxInstances(), 1); + assertEquals(bean.getComponents().getGroups().get(0).getGroups().get(0).getGroupMinInstances(), 1); + + assertEquals(bean.getComponents().getGroups().get(0).getGroups().get(0).getCartridges().get(0).getType(), "c2"); + assertEquals(bean.getComponents().getGroups().get(0).getGroups().get(0).getCartridges().get(0).getCartridgeMin(), 1); + assertEquals(bean.getComponents().getGroups().get(0).getGroups().get(0).getCartridges().get(0).getCartridgeMax(), 2); + + assertEquals(bean.getComponents().getGroups().get(0).getGroups().get(0).getGroups().get(0).getAlias(), "group3"); + assertEquals(bean.getComponents().getGroups().get(0).getGroups().get(0).getGroups().get(0).getName(), "G3"); + assertEquals(bean.getComponents().getGroups().get(0).getGroups().get(0).getGroups().get(0).getGroupMaxInstances(), 2); + assertEquals(bean.getComponents().getGroups().get(0).getGroups().get(0).getGroups().get(0).getGroupMinInstances(), 1); + + assertEquals(bean.getComponents().getGroups().get(0).getGroups().get(0).getGroups().get(0).getCartridges().get(0).getType(), "c3"); + assertEquals(bean.getComponents().getGroups().get(0).getGroups().get(0).getGroups().get(0).getCartridges().get(0).getCartridgeMin(), 1); + assertEquals(bean.getComponents().getGroups().get(0).getGroups().get(0).getGroups().get(0).getCartridges().get(0).getCartridgeMax(), 2); + + boolean updated = applicationTest.updateApplication("g-sc-G123-1.json", + endpoint, restClient); + assertEquals(updated, true); + + ApplicationBean updatedBean = applicationTest.getApplication("g-sc-G123-1", endpoint, + restClient); + + assertEquals(bean.getApplicationId(), "g-sc-G123-1"); + assertEquals(updatedBean.getComponents().getGroups().get(0).getName(), "G1"); + assertEquals(updatedBean.getComponents().getGroups().get(0).getAlias(), "group1"); + assertEquals(updatedBean.getComponents().getGroups().get(0).getGroupMaxInstances(), 1); + assertEquals(updatedBean.getComponents().getGroups().get(0).getGroupMinInstances(), 1); + + assertEquals(updatedBean.getComponents().getGroups().get(0).getCartridges().get(0).getType(), "c1"); + assertEquals(updatedBean.getComponents().getGroups().get(0).getCartridges().get(0).getCartridgeMin(), 2); + assertEquals(updatedBean.getComponents().getGroups().get(0).getCartridges().get(0).getCartridgeMax(), 3); + + assertEquals(updatedBean.getComponents().getGroups().get(0).getGroups().get(0).getAlias(), "group2"); + assertEquals(updatedBean.getComponents().getGroups().get(0).getGroups().get(0).getName(), "G2"); + assertEquals(updatedBean.getComponents().getGroups().get(0).getGroups().get(0).getGroupMaxInstances(), 1); + assertEquals(updatedBean.getComponents().getGroups().get(0).getGroups().get(0).getGroupMinInstances(), 1); + + assertEquals(updatedBean.getComponents().getGroups().get(0).getGroups().get(0).getCartridges().get(0).getType(), "c2"); + assertEquals(updatedBean.getComponents().getGroups().get(0).getGroups().get(0).getCartridges().get(0).getCartridgeMin(), 2); + assertEquals(updatedBean.getComponents().getGroups().get(0).getGroups().get(0).getCartridges().get(0).getCartridgeMax(), 4); + + assertEquals(updatedBean.getComponents().getGroups().get(0).getGroups().get(0).getGroups().get(0).getAlias(), "group3"); + assertEquals(updatedBean.getComponents().getGroups().get(0).getGroups().get(0).getGroups().get(0).getName(), "G3"); + assertEquals(updatedBean.getComponents().getGroups().get(0).getGroups().get(0).getGroups().get(0).getGroupMaxInstances(), 3); + assertEquals(updatedBean.getComponents().getGroups().get(0).getGroups().get(0).getGroups().get(0).getGroupMinInstances(), 2); + + assertEquals(updatedBean.getComponents().getGroups().get(0).getGroups().get(0).getGroups().get(0).getCartridges().get(0).getType(), "c3"); + assertEquals(updatedBean.getComponents().getGroups().get(0).getGroups().get(0).getGroups().get(0).getCartridges().get(0).getCartridgeMin(), 2); + assertEquals(updatedBean.getComponents().getGroups().get(0).getGroups().get(0).getGroups().get(0).getCartridges().get(0).getCartridgeMax(), 3); + + + boolean removedGroup = cartridgeGroupTest.removeCartridgeGroup("G1", endpoint, + restClient); + assertEquals(removedGroup, false); + + boolean removedAuto = autoscalingPolicyTest.removeAutoscalingPolicy("autoscaling-policy-1", endpoint, + restClient); + assertEquals(removedAuto, false); + + boolean removedNet = networkPartitionTest.removeNetworkPartition("network-partition-1", endpoint, + restClient); + //Trying to remove the used network partition + assertEquals(removedNet, false); + + boolean removedDep = deploymentPolicyTest.removeDeploymentPolicy("deployment-policy-1", endpoint, + restClient); + assertEquals(removedDep, false); + + boolean removed = applicationTest.removeApplication("g-sc-G123-1", endpoint, + restClient); + assertEquals(removed, true); + + ApplicationBean beanRemoved = applicationTest.getApplication("g-sc-G123-1", endpoint, + restClient); + assertEquals(beanRemoved, null); + + removedGroup = cartridgeGroupTest.removeCartridgeGroup("G1", endpoint, + restClient); + assertEquals(removedGroup, true); + + boolean removedC1 = cartridgeTest.removeCartridge("c1", endpoint, + restClient); + assertEquals(removedC1, true); + + boolean removedC2 = cartridgeTest.removeCartridge("c2", endpoint, + restClient); + assertEquals(removedC2, true); + + boolean removedC3 = cartridgeTest.removeCartridge("c3", endpoint, + restClient); + assertEquals(removedC3, true); + + removedAuto = autoscalingPolicyTest.removeAutoscalingPolicy("autoscaling-policy-1", endpoint, + restClient); + assertEquals(removedAuto, true); + + removedDep = deploymentPolicyTest.removeDeploymentPolicy("deployment-policy-1", endpoint, + restClient); + assertEquals(removedDep, true); + + removedNet = networkPartitionTest.removeNetworkPartition("network-partition-1", endpoint, + restClient); + assertEquals(removedNet, true); + + boolean removedN2 = networkPartitionTest.removeNetworkPartition("network-partition-2", endpoint, + restClient); + assertEquals(removedN2, true); + + } catch (Exception e) { + log.error(e); + assertTrue("An error occurred while handling application", false); + } + } + + @Test + public void testDeployApplication() { try { + //Initializing event Receivers initializeApplicationEventReceiver(); + initializeTopologyEventReceiver(); + + boolean addedScalingPolicy = autoscalingPolicyTest.addAutoscalingPolicy("autoscaling-policy-1.json", + endpoint, restClient); + assertEquals(addedScalingPolicy, true); + + boolean addedC1 = cartridgeTest.addCartridge("c1.json", endpoint, restClient); + assertEquals(addedC1, true); + + boolean addedC2 = cartridgeTest.addCartridge("c2.json", endpoint, restClient); + assertEquals(addedC2, true); + + boolean addedC3 = cartridgeTest.addCartridge("c3.json", endpoint, restClient); + assertEquals(addedC3, true); + + boolean addedG1 = cartridgeGroupTest.addCartridgeGroup("cartrdige-nested.json", + endpoint, restClient); + assertEquals(addedG1, true); + CartridgeGroupBean beanG1 = cartridgeGroupTest.getCartridgeGroup("G1", endpoint, + restClient); + assertEquals(beanG1.getName(), "G1"); + + boolean addedN1 = networkPartitionTest.addNetworkPartition("network-partition-1.json", + endpoint, restClient); + assertEquals(addedN1, true); + + boolean addedN2 = networkPartitionTest.addNetworkPartition("network-partition-2.json", + endpoint, restClient); + assertEquals(addedN2, true); + + boolean addedDep = deploymentPolicyTest.addDeploymentPolicy("deployment-policy-1.json", + endpoint, restClient); + assertEquals(addedDep, true); + + boolean added = applicationTest.addApplication("g-sc-G123-1.json", + endpoint, restClient); + assertEquals(added, true); + ApplicationBean bean = applicationTest.getApplication("g-sc-G123-1", endpoint, + restClient); + assertEquals(bean.getApplicationId(), "g-sc-G123-1"); + + boolean addAppPolicy = applicationPolicyTest.addApplicationPolicy( + "application-policy-1.json", endpoint, restClient); + assertEquals(addAppPolicy, true); + + ApplicationPolicyBean policyBean = applicationPolicyTest.getApplicationPolicy( + "application-policy-1", endpoint, restClient); + + //deploy the application + boolean deployed = applicationTest.deployApplication(bean.getApplicationId(), + policyBean.getId(), endpoint, restClient); + assertEquals(deployed, true); + + //Application active handling + assertApplicationActivation(bean.getApplicationId()); + + //Group active handling + assertGroupActivation(bean.getApplicationId()); + + //Cluster active handling + assertClusterActivation(bean.getApplicationId()); + + //Updating application + boolean updated = applicationTest.updateApplication("g-sc-G123-1.json", + endpoint, restClient); + assertEquals(updated, true); + + assertGroupInstanceCount(bean.getApplicationId(), "group3", 2); + ApplicationBean updatedBean = applicationTest.getApplication("g-sc-G123-1", endpoint, + restClient); + assertEquals(updatedBean.getApplicationId(), "g-sc-G123-1"); + + boolean removedGroup = cartridgeGroupTest.removeCartridgeGroup("G1", endpoint, + restClient); + assertEquals(removedGroup, false); + + boolean removedAuto = autoscalingPolicyTest.removeAutoscalingPolicy("autoscaling-policy-1", endpoint, + restClient); + assertEquals(removedAuto, false); + + boolean removedNet = networkPartitionTest.removeNetworkPartition("network-partition-1", endpoint, + restClient); + //Trying to remove the used network partition + assertEquals(removedNet, false); + + boolean removedDep = deploymentPolicyTest.removeDeploymentPolicy("deployment-policy-1", endpoint, + restClient); + assertEquals(removedDep, false); + + boolean unDeployed = applicationTest.undeployApplication("g-sc-G123-1", endpoint, + restClient); + assertEquals(unDeployed, true); + + assertApplicationUndeploy("g-sc-G123-1"); + + boolean removed = applicationTest.removeApplication("g-sc-G123-1", endpoint, + restClient); + assertEquals(removed, true); + + ApplicationBean beanRemoved = applicationTest.getApplication("g-sc-G123-1", endpoint, + restClient); + assertEquals(beanRemoved, null); + + removedGroup = cartridgeGroupTest.removeCartridgeGroup("G1", endpoint, + restClient); + assertEquals(removedGroup, true); + + boolean removedC1 = cartridgeTest.removeCartridge("c1", endpoint, + restClient); + assertEquals(removedC1, true); + + boolean removedC2 = cartridgeTest.removeCartridge("c2", endpoint, + restClient); + assertEquals(removedC2, true); + + boolean removedC3 = cartridgeTest.removeCartridge("c3", endpoint, + restClient); + assertEquals(removedC3, true); + + removedAuto = autoscalingPolicyTest.removeAutoscalingPolicy("autoscaling-policy-1", endpoint, + restClient); + assertEquals(removedAuto, true); + + removedDep = deploymentPolicyTest.removeDeploymentPolicy("deployment-policy-1", endpoint, + restClient); + assertEquals(removedDep, true); + + //Remove network partition used by application policy + removedNet = networkPartitionTest.removeNetworkPartition("network-partition-1", endpoint, + restClient); + assertEquals(removedNet, false); + + boolean removedN2 = networkPartitionTest.removeNetworkPartition("network-partition-2", endpoint, + restClient); + assertEquals(removedN2, false); + + boolean removeAppPolicy = applicationPolicyTest.removeApplicationPolicy("application-policy-1", endpoint, + restClient); + assertEquals(removeAppPolicy, true); + + removedNet = networkPartitionTest.removeNetworkPartition("network-partition-1", endpoint, + restClient); + assertEquals(removedNet, true); + + removedN2 = networkPartitionTest.removeNetworkPartition("network-partition-2", endpoint, + restClient); + assertEquals(removedN2, true); + + } catch (Exception e) { + log.error(e); + assertTrue("An error occurred while handling autoscaling policy", false); + } + } + + @Test + public void testNetworkPartition() { + try { boolean added = networkPartitionTest.addNetworkPartition("network-partition-1.json", endpoint, restClient); assertEquals(added, true); @@ -164,7 +580,6 @@ public class SampleApplicationsTest extends StratosTestServerManager { @Test public void testDeploymentPolicy() { try { - initializeApplicationEventReceiver(); boolean addedN1 = networkPartitionTest.addNetworkPartition("network-partition-1.json", endpoint, restClient); assertEquals(addedN1, true); @@ -238,7 +653,7 @@ public class SampleApplicationsTest extends StratosTestServerManager { restClient); assertEquals(removedDep, true); - DeploymentPolicyBean beanRemovedDep = deploymentPolicyTest.getDeploymentPolicy("network-partition-1", endpoint, + DeploymentPolicyBean beanRemovedDep = deploymentPolicyTest.getDeploymentPolicy("deployment-policy-1", endpoint, restClient); assertEquals(beanRemovedDep, null); @@ -267,33 +682,32 @@ public class SampleApplicationsTest extends StratosTestServerManager { @Test public void testCartridge() { try { - initializeApplicationEventReceiver(); boolean added = cartridgeTest.addCartridge("c0.json", endpoint, restClient); assertEquals(added, true); CartridgeBean bean = cartridgeTest.getCartridge("c0", endpoint, restClient); assertEquals(bean.getType(), "c0"); assertEquals(bean.getCategory(), "Application"); assertEquals(bean.getHost(), "qmog.cisco.com"); - for(PropertyBean property : bean.getProperty()) { - if(property.getName().equals("payload_parameter.CEP_IP")) { + for (PropertyBean property : bean.getProperty()) { + if (property.getName().equals("payload_parameter.CEP_IP")) { assertEquals(property.getValue(), "octl.qmog.cisco.com"); - } else if(property.getName().equals("payload_parameter.CEP_ADMIN_PASSWORD")) { + } else if (property.getName().equals("payload_parameter.CEP_ADMIN_PASSWORD")) { assertEquals(property.getValue(), "admin"); - } else if(property.getName().equals("payload_parameter.MONITORING_SERVER_IP")) { + } else if (property.getName().equals("payload_parameter.MONITORING_SERVER_IP")) { assertEquals(property.getValue(), "octl.qmog.cisco.com"); - } else if(property.getName().equals("payload_parameter.QTCM_NETWORK_COUNT")) { + } else if (property.getName().equals("payload_parameter.QTCM_NETWORK_COUNT")) { assertEquals(property.getValue(), "1"); - } else if(property.getName().equals("payload_parameter.MONITORING_SERVER_ADMIN_PASSWORD")) { + } else if (property.getName().equals("payload_parameter.MONITORING_SERVER_ADMIN_PASSWORD")) { assertEquals(property.getValue(), "admin"); - } else if(property.getName().equals("payload_parameter.QTCM_DNS_SEGMENT")) { + } else if (property.getName().equals("payload_parameter.QTCM_DNS_SEGMENT")) { assertEquals(property.getValue(), "test"); - } else if(property.getName().equals("payload_parameter.MONITORING_SERVER_SECURE_PORT")) { + } else if (property.getName().equals("payload_parameter.MONITORING_SERVER_SECURE_PORT")) { assertEquals(property.getValue(), "7711"); - } else if(property.getName().equals("payload_parameter.MONITORING_SERVER_PORT")) { + } else if (property.getName().equals("payload_parameter.MONITORING_SERVER_PORT")) { assertEquals(property.getValue(), "7611"); - } else if(property.getName().equals("payload_parameter.CEP_PORT")) { + } else if (property.getName().equals("payload_parameter.CEP_PORT")) { assertEquals(property.getValue(), "7611"); - } else if(property.getName().equals("payload_parameter.MB_PORT")) { + } else if (property.getName().equals("payload_parameter.MB_PORT")) { assertEquals(property.getValue(), "61616"); } } @@ -307,26 +721,26 @@ public class SampleApplicationsTest extends StratosTestServerManager { assertEquals(updatedBean.getType(), "c0"); assertEquals(updatedBean.getCategory(), "Data"); assertEquals(updatedBean.getHost(), "qmog.cisco.com12"); - for(PropertyBean property : updatedBean.getProperty()) { - if(property.getName().equals("payload_parameter.CEP_IP")) { + for (PropertyBean property : updatedBean.getProperty()) { + if (property.getName().equals("payload_parameter.CEP_IP")) { assertEquals(property.getValue(), "octl.qmog.cisco.com123"); - } else if(property.getName().equals("payload_parameter.CEP_ADMIN_PASSWORD")) { + } else if (property.getName().equals("payload_parameter.CEP_ADMIN_PASSWORD")) { assertEquals(property.getValue(), "admin123"); - } else if(property.getName().equals("payload_parameter.MONITORING_SERVER_IP")) { + } else if (property.getName().equals("payload_parameter.MONITORING_SERVER_IP")) { assertEquals(property.getValue(), "octl.qmog.cisco.com123"); - } else if(property.getName().equals("payload_parameter.QTCM_NETWORK_COUNT")) { + } else if (property.getName().equals("payload_parameter.QTCM_NETWORK_COUNT")) { assertEquals(property.getValue(), "3"); - } else if(property.getName().equals("payload_parameter.MONITORING_SERVER_ADMIN_PASSWORD")) { + } else if (property.getName().equals("payload_parameter.MONITORING_SERVER_ADMIN_PASSWORD")) { assertEquals(property.getValue(), "admin123"); - } else if(property.getName().equals("payload_parameter.QTCM_DNS_SEGMENT")) { + } else if (property.getName().equals("payload_parameter.QTCM_DNS_SEGMENT")) { assertEquals(property.getValue(), "test123"); - } else if(property.getName().equals("payload_parameter.MONITORING_SERVER_SECURE_PORT")) { + } else if (property.getName().equals("payload_parameter.MONITORING_SERVER_SECURE_PORT")) { assertEquals(property.getValue(), "7712"); - } else if(property.getName().equals("payload_parameter.MONITORING_SERVER_PORT")) { + } else if (property.getName().equals("payload_parameter.MONITORING_SERVER_PORT")) { assertEquals(property.getValue(), "7612"); - } else if(property.getName().equals("payload_parameter.CEP_PORT")) { + } else if (property.getName().equals("payload_parameter.CEP_PORT")) { assertEquals(property.getValue(), "7612"); - } else if(property.getName().equals("payload_parameter.MB_PORT")) { + } else if (property.getName().equals("payload_parameter.MB_PORT")) { assertEquals(property.getValue(), "61617"); } } @@ -370,6 +784,18 @@ public class SampleApplicationsTest extends StratosTestServerManager { } /** + * Initialize Topology event receiver + */ + private void initializeTopologyEventReceiver() { + if (topologyEventReceiver == null) { + topologyEventReceiver = new TopologyEventReceiver(); + ExecutorService executorService = StratosThreadPool.getExecutorService("STRATOS_TEST_SERVER1", 1); + topologyEventReceiver.setExecutorService(executorService); + topologyEventReceiver.execute(); + } + } + + /** * Execute shell command * * @param commandText @@ -407,12 +833,168 @@ public class SampleApplicationsTest extends StratosTestServerManager { break; } } - assertNotNull(String.format("Application is not found: [application-id] %s", applicationName), application); assertEquals(String.format("Application status did not change to active: [application-id] %s", applicationName), ApplicationStatus.Active, application.getStatus()); } + /** + * Assert application activation + * + * @param applicationName + */ + private void assertGroupActivation(String applicationName) { + Application application = ApplicationManager.getApplications().getApplication(applicationName); + assertNotNull(String.format("Application is not found: [application-id] %s", + applicationName), application); + + Collection<Group> groups = application.getAllGroupsRecursively(); + for(Group group : groups) { + assertEquals(group.getInstanceContextCount() >= group.getGroupMinInstances(), true); + } + } + + /** + * Assert application activation + * + * @param applicationName + */ + private void assertClusterActivation(String applicationName) { + Application application = ApplicationManager.getApplications().getApplication(applicationName); + assertNotNull(String.format("Application is not found: [application-id] %s", + applicationName), application); + + Set<ClusterDataHolder> clusterDataHolderSet = application.getClusterDataRecursively(); + for(ClusterDataHolder clusterDataHolder : clusterDataHolderSet) { + String serviceName = clusterDataHolder.getServiceType(); + String clusterId = clusterDataHolder.getClusterId(); + Service service = TopologyManager.getTopology().getService(serviceName); + assertNotNull(String.format("Service is not found: [application-id] %s [service] %s", + applicationName, serviceName), service); + + Cluster cluster = service.getCluster(clusterId); + assertNotNull(String.format("Cluster is not found: [application-id] %s [service] %s [cluster-id] %s", + applicationName, serviceName, clusterId), cluster); + boolean clusterActive = false; + + for (ClusterInstance instance : cluster.getInstanceIdToInstanceContextMap().values()) { + int activeInstances = 0; + for (Member member : cluster.getMembers()) { + if (member.getClusterInstanceId().equals(instance.getInstanceId())) { + if (member.getStatus().equals(MemberStatus.Active)) { + activeInstances++; + } + } + } + clusterActive = activeInstances >= clusterDataHolder.getMinInstances(); + + if (!clusterActive) { + break; + } + } + assertEquals(String.format("Cluster status did not change to active: [cluster-id] %s", clusterId), + clusterActive, true); + } + + } + + + /** + * Assert application activation + * + * @param applicationName + */ + private void assertApplicationUndeploy(String applicationName) { + long startTime = System.currentTimeMillis(); + Application application = ApplicationManager.getApplications().getApplication(applicationName); + ApplicationContext applicationContext = null; + try { + applicationContext = AutoscalerServiceClient.getInstance().getApplication(applicationName); + } catch (RemoteException e) { + log.error("Error while getting the application context for [application] " + applicationName); + } + while (((application != null) && application.getInstanceContextCount() > 0) || + (applicationContext == null || applicationContext.getStatus().equals(APPLICATION_STATUS_UNDEPLOYING))) { + try { + Thread.sleep(1000); + } catch (InterruptedException ignore) { + } + application = ApplicationManager.getApplications().getApplication(applicationName); + try { + applicationContext = AutoscalerServiceClient.getInstance().getApplication(applicationName); + } catch (RemoteException e) { + log.error("Error while getting the application context for [application] " + applicationName); + } + if ((System.currentTimeMillis() - startTime) > APPLICATION_ACTIVATION_TIMEOUT) { + break; + } + } + + assertNotNull(String.format("Application is not found: [application-id] %s", + applicationName), application); + assertNotNull(String.format("Application Context is not found: [application-id] %s", + applicationName), applicationContext); + + //Force undeployment after the graceful deployment + if (application.getInstanceContextCount() > 0 || + applicationContext.getStatus().equals(APPLICATION_STATUS_UNDEPLOYING)) { + log.info("Force undeployment is going to start for the [application] " + applicationName); + + applicationTest.forceUndeployApplication(applicationName, endpoint, restClient); + while (application.getInstanceContextCount() > 0 || + applicationContext.getStatus().equals(APPLICATION_STATUS_UNDEPLOYING)) { + try { + Thread.sleep(1000); + } catch (InterruptedException ignore) { + } + application = ApplicationManager.getApplications().getApplication(applicationName); + if ((System.currentTimeMillis() - startTime) > APPLICATION_ACTIVATION_TIMEOUT) { + break; + } + } + } + assertEquals(String.format("Application status did not change to Created: [application-id] %s", applicationName), + APPLICATION_STATUS_CREATED, applicationContext.getStatus()); + + } + + /** + * Assert application activation + * + * @param applicationName + */ + private void assertGroupInstanceCount(String applicationName, String groupAlias, int count) { + long startTime = System.currentTimeMillis(); + Application application = ApplicationManager.getApplications().getApplication(applicationName); + if (application != null) { + Group group = application.getGroupRecursively(groupAlias); + while (group.getInstanceContextCount() != count) { + try { + Thread.sleep(1000); + } catch (InterruptedException ignore) { + } + if ((System.currentTimeMillis() - startTime) > APPLICATION_ACTIVATION_TIMEOUT) { + break; + } + } + for (GroupInstance instance : group.getInstanceIdToInstanceContextMap().values()) { + while (!instance.getStatus().equals(GroupStatus.Active)) { + try { + Thread.sleep(1000); + } catch (InterruptedException ignore) { + } + if ((System.currentTimeMillis() - startTime) > APPLICATION_ACTIVATION_TIMEOUT) { + break; + } + } + } + assertEquals(String.format("Application status did not change to active: [application-id] %s", applicationName), + group.getInstanceContextCount(), count); + } + assertNotNull(String.format("Application is not found: [application-id] %s", applicationName), application); + + } + private void assertApplicationNotExists(String applicationName) { Application application = ApplicationManager.getApplications().getApplication(applicationName); assertNull(String.format("Application is found in the topology : [application-id] %s", applicationName), application); http://git-wip-us.apache.org/repos/asf/stratos/blob/77e45950/products/stratos/modules/integration/src/test/resources/application-policies/application-policy-1.json ---------------------------------------------------------------------- diff --git a/products/stratos/modules/integration/src/test/resources/application-policies/application-policy-1.json b/products/stratos/modules/integration/src/test/resources/application-policies/application-policy-1.json index 417b94f..17858bb 100644 --- a/products/stratos/modules/integration/src/test/resources/application-policies/application-policy-1.json +++ b/products/stratos/modules/integration/src/test/resources/application-policies/application-policy-1.json @@ -2,12 +2,13 @@ "id": "application-policy-1", "algorithm": "one-after-another", "networkPartitions": [ - "network-partition-1" + "network-partition-1", + "network-partition-2" ], "properties": [ { - "name": "key-1", - "value": "value-1" + "name": "networkPartitionGroups", + "value": "network-partition-1,network-partition-2" }, { "name": "key-2", http://git-wip-us.apache.org/repos/asf/stratos/blob/77e45950/products/stratos/modules/integration/src/test/resources/applications/simple/single-cartridge-app-multi-cloud/README.md ---------------------------------------------------------------------- diff --git a/products/stratos/modules/integration/src/test/resources/applications/simple/single-cartridge-app-multi-cloud/README.md b/products/stratos/modules/integration/src/test/resources/applications/simple/single-cartridge-app-multi-cloud/README.md deleted file mode 100644 index b8b2c92..0000000 --- a/products/stratos/modules/integration/src/test/resources/applications/simple/single-cartridge-app-multi-cloud/README.md +++ /dev/null @@ -1,30 +0,0 @@ -Single Cartridge Application in a multi cloud environment -========================================================= -A simple application with a php cartridge in two AWS EC2 regions and Openstack on-premise deployment - -Application view ----------------- - - single-cartridge-app - | - _____________________________________|__________________________________ - | | | - single-cartridge-app-1(ec2 R1) single-cartridge-app-2(ec2 R2) single-cartridge-app-3(Openstack region) - | | | - my-php(member 1) my-php(member 2) my-php(member 3) - -Application folder structure ----------------------------- --- artifacts/multi/ IaaS specific artifacts <br /> --- scripts/common/ Common scripts for all iaases <br /> --- scripts/multi IaaS specific scripts <br /> - -How to run ----------- -cd scripts/multi/ <br /> -./deploy.sh <br /> - -How to undeploy ---------------- -cd scripts/multi/ <br /> -./undeploy.sh <br /> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/stratos/blob/77e45950/products/stratos/modules/integration/src/test/resources/applications/simple/single-cartridge-app-multi-cloud/artifacts/application.json ---------------------------------------------------------------------- diff --git a/products/stratos/modules/integration/src/test/resources/applications/simple/single-cartridge-app-multi-cloud/artifacts/application.json b/products/stratos/modules/integration/src/test/resources/applications/simple/single-cartridge-app-multi-cloud/artifacts/application.json deleted file mode 100644 index cbe785c..0000000 --- a/products/stratos/modules/integration/src/test/resources/applications/simple/single-cartridge-app-multi-cloud/artifacts/application.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "applicationId": "single-cartridge-multi-cloud-app", - "alias": "single-cartridge-multi-cloud-app", - "multiTenant": false, - "components": { - "cartridges": [ - { - "type": "php", - "cartridgeMin": 1, - "cartridgeMax": 10, - "subscribableInfo": { - "alias": "my-php", - "autoscalingPolicy": "autoscaling-policy-1", - "deploymentPolicy": "multi-cloud-deployment-policy", - "artifactRepository": { - "privateRepo": false, - "repoUrl": "https://github.com/lakwarus/single-cartridge.git", - "repoUsername": "", - "repoPassword": "" - } - } - } - ] - } -} http://git-wip-us.apache.org/repos/asf/stratos/blob/77e45950/products/stratos/modules/integration/src/test/resources/applications/simple/single-cartridge-app/artifacts/application-signup.json ---------------------------------------------------------------------- diff --git a/products/stratos/modules/integration/src/test/resources/applications/simple/single-cartridge-app/artifacts/application-signup.json b/products/stratos/modules/integration/src/test/resources/applications/simple/single-cartridge-app/artifacts/application-signup.json deleted file mode 100644 index 73a5774..0000000 --- a/products/stratos/modules/integration/src/test/resources/applications/simple/single-cartridge-app/artifacts/application-signup.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "artifactRepositories": [ - { - "alias": "php", - "privateRepo": false, - "repoUrl": "https://github.com/imesh/stratos-php-applications.git", - "repoUsername": "", - "repoPassword": "" - }, - { - "alias": "tomcat", - "privateRepo": false, - "repoUrl": "https://github.com/imesh/stratos-tomcat-applications.git", - "repoUsername": "", - "repoPassword": "" - } - ] -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/stratos/blob/77e45950/products/stratos/modules/integration/src/test/resources/applications/simple/single-cartridge-app/artifacts/application.json ---------------------------------------------------------------------- diff --git a/products/stratos/modules/integration/src/test/resources/applications/simple/single-cartridge-app/artifacts/application.json b/products/stratos/modules/integration/src/test/resources/applications/simple/single-cartridge-app/artifacts/application.json deleted file mode 100644 index 4043e4f..0000000 --- a/products/stratos/modules/integration/src/test/resources/applications/simple/single-cartridge-app/artifacts/application.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "applicationId": "single-cartridge-app", - "alias": "single-cartridge-app", - "multiTenant": false, - "components": { - "cartridges": [ - { - "type": "php", - "cartridgeMin": 1, - "cartridgeMax": 5, - "subscribableInfo": { - "alias": "my-php", - "autoscalingPolicy": "autoscaling-policy-1", - "deploymentPolicy": "deployment-policy-1", - "artifactRepository": { - "privateRepo": false, - "repoUrl": "https://github.com/lakwarus/single-cartridge.git", - "repoUsername": "", - "repoPassword": "" - } - } - } - ] - } -} http://git-wip-us.apache.org/repos/asf/stratos/blob/77e45950/products/stratos/modules/integration/src/test/resources/applications/simple/single-cartridge-app/artifacts/domain-mappings.json ---------------------------------------------------------------------- diff --git a/products/stratos/modules/integration/src/test/resources/applications/simple/single-cartridge-app/artifacts/domain-mappings.json b/products/stratos/modules/integration/src/test/resources/applications/simple/single-cartridge-app/artifacts/domain-mappings.json deleted file mode 100644 index d26db7f..0000000 --- a/products/stratos/modules/integration/src/test/resources/applications/simple/single-cartridge-app/artifacts/domain-mappings.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "domainMappings": [ - { - "cartridgeAlias": "my-php", - "domainName": "abc.com", - "contextPath": "/abc/app" - } - ] -} http://git-wip-us.apache.org/repos/asf/stratos/blob/77e45950/products/stratos/modules/integration/src/test/resources/applications/simple/single-cartridge-app/g-sc-G123-1.json ---------------------------------------------------------------------- diff --git a/products/stratos/modules/integration/src/test/resources/applications/simple/single-cartridge-app/g-sc-G123-1.json b/products/stratos/modules/integration/src/test/resources/applications/simple/single-cartridge-app/g-sc-G123-1.json new file mode 100644 index 0000000..76d72c8 --- /dev/null +++ b/products/stratos/modules/integration/src/test/resources/applications/simple/single-cartridge-app/g-sc-G123-1.json @@ -0,0 +1,86 @@ +{ + "alias": "g-sc-G123-1", + "applicationId": "g-sc-G123-1", + "components": { + "cartridges": [], + "groups": [ + { + "name": "G1", + "groupMaxInstances": 1, + "groupMinInstances": 1, + "alias": "group1", + "cartridges": [ + { + "cartridgeMin": 1, + "cartridgeMax": 2, + "type": "c1", + "subscribableInfo": { + "alias": "c1-1x0", + "deploymentPolicy": "deployment-policy-1", + "artifactRepository": { + "repoUsername": "user", + "repoUrl": "http://stratos.apache.org:10080/git/default.git", + "privateRepo": true, + "repoPassword": "c-policy" + }, + "autoscalingPolicy": "autoscaling-policy-1" + } + } + ], + "groups": [ + { + "name": "G2", + "groupMaxInstances": 1, + "groupMinInstances": 1, + "alias": "group2", + "cartridges": [ + { + "cartridgeMin": 1, + "cartridgeMax": 2, + "type": "c2", + "subscribableInfo": { + "alias": "c2-1x0", + "deploymentPolicy": "deployment-policy-1", + "artifactRepository": { + "repoUsername": "user", + "repoUrl": "http://stratos.apache.org:10080/git/default.git", + "privateRepo": true, + "repoPassword": "c-policy" + }, + "autoscalingPolicy": "autoscaling-policy-1" + } + } + ], + "groups": [ + { + "name": "G3", + "groupMaxInstances": 2, + "groupMinInstances": 1, + "deploymentPolicy": "deployment-policy-1", + "alias": "group3", + "cartridges": [ + { + "cartridgeMin": 1, + "cartridgeMax": 2, + "type": "c3", + "subscribableInfo": { + "alias": "c3-1x0", + "artifactRepository": { + "repoUsername": "user", + "repoUrl": "http://stratos.apache.org:10080/git/default.git", + "privateRepo": true, + "repoPassword": "c-policy" + }, + "autoscalingPolicy": "autoscaling-policy-1" + } + } + ], + "groups": [] + } + ] + } + ] + } + ] + } +} http://git-wip-us.apache.org/repos/asf/stratos/blob/77e45950/products/stratos/modules/integration/src/test/resources/applications/simple/single-cartridge-app/update/g-sc-G123-1.json ---------------------------------------------------------------------- diff --git a/products/stratos/modules/integration/src/test/resources/applications/simple/single-cartridge-app/update/g-sc-G123-1.json b/products/stratos/modules/integration/src/test/resources/applications/simple/single-cartridge-app/update/g-sc-G123-1.json new file mode 100644 index 0000000..ff332c0 --- /dev/null +++ b/products/stratos/modules/integration/src/test/resources/applications/simple/single-cartridge-app/update/g-sc-G123-1.json @@ -0,0 +1,86 @@ +{ + "alias": "g-sc-G123-1", + "applicationId": "g-sc-G123-1", + "components": { + "cartridges": [], + "groups": [ + { + "name": "G1", + "groupMaxInstances": 1, + "groupMinInstances": 1, + "alias": "group1", + "cartridges": [ + { + "cartridgeMin": 2, + "cartridgeMax": 3, + "type": "c1", + "subscribableInfo": { + "alias": "c1-1x0", + "deploymentPolicy": "deployment-policy-1", + "artifactRepository": { + "repoUsername": "user", + "repoUrl": "http://stratos.apache.org:10080/git/default.git", + "privateRepo": true, + "repoPassword": "c-policy" + }, + "autoscalingPolicy": "autoscaling-policy-1" + } + } + ], + "groups": [ + { + "name": "G2", + "groupMaxInstances": 1, + "groupMinInstances": 1, + "alias": "group2", + "cartridges": [ + { + "cartridgeMin": 2, + "cartridgeMax": 4, + "type": "c2", + "subscribableInfo": { + "alias": "c2-1x0", + "deploymentPolicy": "deployment-policy-1", + "artifactRepository": { + "repoUsername": "user", + "repoUrl": "http://stratos.apache.org:10080/git/default.git", + "privateRepo": true, + "repoPassword": "c-policy" + }, + "autoscalingPolicy": "autoscaling-policy-1" + } + } + ], + "groups": [ + { + "name": "G3", + "groupMaxInstances": 3, + "groupMinInstances": 2, + "deploymentPolicy": "static-1", + "alias": "group3", + "cartridges": [ + { + "cartridgeMin": 2, + "cartridgeMax": 3, + "type": "c3", + "subscribableInfo": { + "alias": "c3-1x0", + "artifactRepository": { + "repoUsername": "user", + "repoUrl": "http://stratos.apache.org:10080/git/default.git", + "privateRepo": true, + "repoPassword": "c-policy" + }, + "autoscalingPolicy": "autoscaling-policy-1" + } + } + ], + "groups": [] + } + ] + } + ] + } + ] + } +}
