You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by ga...@apache.org on 2015/11/02 16:31:31 UTC

[50/50] [abbrv] stratos git commit: Merge with the stratos-4.1.x branch changes

Merge with the stratos-4.1.x branch changes


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

Branch: refs/heads/master
Commit: be922cc6ad1ff8c3b1db0da19204e5a7a3f1cc67
Parents: aece0c4
Author: gayangunarathne <ga...@wso2.com>
Authored: Mon Nov 2 20:59:12 2015 +0530
Committer: gayangunarathne <ga...@wso2.com>
Committed: Mon Nov 2 20:59:12 2015 +0530

----------------------------------------------------------------------
 .../services/impl/AutoscalerServiceImpl.java    |  61 ++--
 .../group/GroupStatusProcessorChain.java        |   4 +-
 .../integration/common/TopologyHandler.java     | 120 +++----
 .../SingleClusterScalingTestCase.java           | 354 ++++++++++++++++++-
 .../src/test/resources/common/jndi.properties   |  22 ++
 5 files changed, 458 insertions(+), 103 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/be922cc6/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java
index b9f436a..2264a82 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/services/impl/AutoscalerServiceImpl.java
@@ -25,21 +25,15 @@ import org.apache.stratos.autoscaler.algorithms.networkpartition.NetworkPartitio
 import org.apache.stratos.autoscaler.applications.ApplicationHolder;
 import org.apache.stratos.autoscaler.applications.parser.ApplicationParser;
 import org.apache.stratos.autoscaler.applications.parser.DefaultApplicationParser;
-import org.apache.stratos.autoscaler.applications.pojo.ApplicationClusterContext;
-import org.apache.stratos.autoscaler.applications.pojo.ApplicationContext;
-import org.apache.stratos.autoscaler.applications.pojo.ArtifactRepositoryContext;
-import org.apache.stratos.autoscaler.applications.pojo.CartridgeContext;
-import org.apache.stratos.autoscaler.applications.pojo.ComponentContext;
-import org.apache.stratos.autoscaler.applications.pojo.GroupContext;
-import org.apache.stratos.autoscaler.applications.pojo.SubscribableInfoContext;
+import org.apache.stratos.autoscaler.applications.pojo.*;
 import org.apache.stratos.autoscaler.applications.topic.ApplicationBuilder;
+import org.apache.stratos.autoscaler.applications.topic.ApplicationsEventPublisher;
 import org.apache.stratos.autoscaler.client.AutoscalerCloudControllerClient;
 import org.apache.stratos.autoscaler.context.AutoscalerContext;
 import org.apache.stratos.autoscaler.context.InstanceContext;
 import org.apache.stratos.autoscaler.context.cluster.ClusterInstanceContext;
 import org.apache.stratos.autoscaler.context.partition.ClusterLevelPartitionContext;
 import org.apache.stratos.autoscaler.context.partition.network.NetworkPartitionContext;
-import org.apache.stratos.autoscaler.event.publisher.ClusterStatusEventPublisher;
 import org.apache.stratos.autoscaler.exception.*;
 import org.apache.stratos.autoscaler.exception.application.ApplicationDefinitionException;
 import org.apache.stratos.autoscaler.exception.application.InvalidApplicationPolicyException;
@@ -49,7 +43,6 @@ import org.apache.stratos.autoscaler.exception.policy.*;
 import org.apache.stratos.autoscaler.monitor.Monitor;
 import org.apache.stratos.autoscaler.monitor.cluster.ClusterMonitor;
 import org.apache.stratos.autoscaler.monitor.component.ApplicationMonitor;
-import org.apache.stratos.autoscaler.monitor.component.GroupMonitor;
 import org.apache.stratos.autoscaler.pojo.Dependencies;
 import org.apache.stratos.autoscaler.pojo.ServiceGroup;
 import org.apache.stratos.autoscaler.pojo.policy.PolicyManager;
@@ -80,7 +73,6 @@ import org.apache.stratos.messaging.domain.instance.ClusterInstance;
 import org.apache.stratos.messaging.domain.instance.Instance;
 import org.apache.stratos.messaging.domain.topology.Cluster;
 import org.apache.stratos.messaging.domain.topology.Member;
-import org.apache.stratos.messaging.message.receiver.application.ApplicationManager;
 import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
 import org.wso2.carbon.registry.api.RegistryException;
 
@@ -150,6 +142,7 @@ public class AutoscalerServiceImpl implements AutoscalerService {
             log.info(String.format("Application added successfully: [application-id] %s",
                     applicationContext.getApplicationId()));
         }
+        ApplicationsEventPublisher.sendApplicationCreatedEvent(application);
         return true;
     }
 
@@ -163,8 +156,9 @@ public class AutoscalerServiceImpl implements AutoscalerService {
         }
 
         if (AutoscalerContext.getInstance().getApplicationContext(applicationId) == null) {
-            String message = "Application is not found as ApplicationContext. Please add application before updating it: " +
-                    "[application-id] " + applicationId;
+            String message =
+                    "Application is not found as ApplicationContext. Please add application before updating it: " +
+                            "[application-id] " + applicationId;
             log.error(message);
             throw new ApplicationDefinitionException(message);
         }
@@ -310,7 +304,7 @@ public class AutoscalerServiceImpl implements AutoscalerService {
      * @param clusterIds
      */
     private void addApplicationSignUp(ApplicationContext applicationContext, String applicationKey,
-            List<String> clusterIds) {
+                                      List<String> clusterIds) {
 
         try {
             if (log.isInfoEnabled()) {
@@ -436,7 +430,7 @@ public class AutoscalerServiceImpl implements AutoscalerService {
     }
 
     private void updateArtifactRepositoryList(List<ArtifactRepository> artifactRepositoryList,
-            CartridgeContext[] cartridgeContexts) {
+                                              CartridgeContext[] cartridgeContexts) {
 
         if (cartridgeContexts == null) {
             return;
@@ -463,7 +457,7 @@ public class AutoscalerServiceImpl implements AutoscalerService {
 
     public boolean undeployApplication(String applicationId, boolean force)
             throws RemoteException, StratosManagerServiceApplicationSignUpExceptionException,
-                   UnremovableApplicationException {
+            UnremovableApplicationException {
 
         AutoscalerContext asCtx = AutoscalerContext.getInstance();
         ApplicationMonitor appMonitor = asCtx.getAppMonitor(applicationId);
@@ -509,7 +503,7 @@ public class AutoscalerServiceImpl implements AutoscalerService {
                         return false;
                     } else {
                         log.info(String.format("Previous graceful un-deployment is in progress for "
-                                        + "[application-id] %s , thus  terminating instances directly", applicationId));
+                                + "[application-id] %s , thus  terminating instances directly", applicationId));
                         appMonitor.setForce(true);
                         terminateAllMembersAndClustersForcefully(applicationId);
                     }
@@ -785,8 +779,9 @@ public class AutoscalerServiceImpl implements AutoscalerService {
 
     @Override
     public String findClusterId(String applicationId, String alias) {
+        ApplicationHolder.acquireReadLock();
         try {
-            Application application = ApplicationManager.getApplications().getApplication(applicationId);
+            Application application = ApplicationHolder.getApplications().getApplication(applicationId);
             if (application != null) {
 
                 ClusterDataHolder clusterData = application.getClusterDataHolderRecursivelyByAlias(alias);
@@ -862,7 +857,8 @@ public class AutoscalerServiceImpl implements AutoscalerService {
     }
 
     @Override
-    public boolean removeApplicationPolicy(String applicationPolicyId) throws InvalidPolicyException, UnremovablePolicyException {
+    public boolean removeApplicationPolicy(String applicationPolicyId)
+            throws InvalidPolicyException, UnremovablePolicyException {
 
         if (removableApplicationPolicy(applicationPolicyId)) {
             return PolicyManager.getInstance().removeApplicationPolicy(applicationPolicyId);
@@ -921,9 +917,9 @@ public class AutoscalerServiceImpl implements AutoscalerService {
         }
 
         Application application;
+        ApplicationHolder.acquireReadLock();
         try {
-            ApplicationManager.acquireReadLockForApplication(applicationId);
-            application = ApplicationManager.getApplications().getApplication(applicationId);
+            application = ApplicationHolder.getApplications().getApplication(applicationId);
             if (application == null) {
                 log.warn(String.format(
                         "Could not find application, thus no members to be terminated " + "[application-id] %s",
@@ -998,8 +994,8 @@ public class AutoscalerServiceImpl implements AutoscalerService {
                                         .terminateInstanceForcefully(memberIdToTerminate);
                             } catch (Exception e) {
                                 log.error(String.format(
-                                                "Forceful termination of member %s has failed, but continuing forceful "
-                                                        + "deletion of other members", memberIdToTerminate));
+                                        "Forceful termination of member %s has failed, but continuing forceful "
+                                                + "deletion of other members", memberIdToTerminate));
                             }
                         }
                     }
@@ -1160,7 +1156,7 @@ public class AutoscalerServiceImpl implements AutoscalerService {
     @Override
     public boolean updateDeploymentPolicy(DeploymentPolicy deploymentPolicy)
             throws RemoteException, InvalidDeploymentPolicyException, DeploymentPolicyNotExistsException,
-                   InvalidPolicyException, CloudControllerConnectionException {
+            InvalidPolicyException, CloudControllerConnectionException {
 
         validateDeploymentPolicy(deploymentPolicy);
 
@@ -1217,9 +1213,10 @@ public class AutoscalerServiceImpl implements AutoscalerService {
                             throw new InvalidDeploymentPolicyException(message, e);
                         } catch (CloudControllerServiceInvalidCartridgeTypeExceptionException e) {
 
-                            String message = "Invalid cartridge type, Cluster monitor update failed for [deployment-policy] "
-                                    + deploymentPolicy.getDeploymentPolicyID() + " [cartridge] "
-                                    + clusterMonitor.getClusterContext().getServiceId();
+                            String message =
+                                    "Invalid cartridge type, Cluster monitor update failed for [deployment-policy] "
+                                            + deploymentPolicy.getDeploymentPolicyID() + " [cartridge] "
+                                            + clusterMonitor.getClusterContext().getServiceId();
                             log.error(message);
                             throw new InvalidDeploymentPolicyException(message, e);
                         }
@@ -1231,13 +1228,15 @@ public class AutoscalerServiceImpl implements AutoscalerService {
     }
 
     private void removeOldPartitionsFromClusterMonitor(NetworkPartitionContext clusterLevelNetworkPartitionContext,
-            NetworkPartitionRef networkPartition) {
+                                                       NetworkPartitionRef networkPartition) {
 
-        for (InstanceContext instanceContext : clusterLevelNetworkPartitionContext.getInstanceIdToInstanceContextMap().values()) {
+        for (InstanceContext instanceContext : clusterLevelNetworkPartitionContext.getInstanceIdToInstanceContextMap()
+                .values()) {
 
             ClusterInstanceContext clusterInstanceContext = (ClusterInstanceContext) instanceContext;
 
-            for (ClusterLevelPartitionContext clusterLevelPartitionContext : clusterInstanceContext.getPartitionCtxts()) {
+            for (ClusterLevelPartitionContext clusterLevelPartitionContext : clusterInstanceContext
+                    .getPartitionCtxts()) {
 
                 if (null == networkPartition.getPartitionRef(clusterLevelPartitionContext.getPartitionId())) {
 
@@ -1264,9 +1263,9 @@ public class AutoscalerServiceImpl implements AutoscalerService {
     }
 
     private void addNewPartitionsToClusterMonitor(NetworkPartitionContext clusterLevelNetworkPartitionContext,
-            NetworkPartitionRef networkPartitionRef, String deploymentPolicyID, String cartridgeType)
+                                                  NetworkPartitionRef networkPartitionRef, String deploymentPolicyID, String cartridgeType)
             throws RemoteException, CloudControllerServiceInvalidPartitionExceptionException,
-                   CloudControllerServiceInvalidCartridgeTypeExceptionException {
+            CloudControllerServiceInvalidCartridgeTypeExceptionException {
 
         boolean validationOfNetworkPartitionRequired = false;
         for (PartitionRef partition : networkPartitionRef.getPartitionRefs()) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/be922cc6/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusProcessorChain.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusProcessorChain.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusProcessorChain.java
index feddaf5..98ee1e0 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusProcessorChain.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusProcessorChain.java
@@ -38,9 +38,9 @@ public class GroupStatusProcessorChain extends StatusProcessorChain {
                 new GroupStatusTerminatedProcessor();
         add(groupStatusTerminatedProcessor);
 
-        GroupStatusTerminatingProcessor groupStatusTerminatingProcessor =
+        /*GroupStatusTerminatingProcessor groupStatusTerminatingProcessor =
                 new GroupStatusTerminatingProcessor();
-        add(groupStatusTerminatingProcessor);
+        add(groupStatusTerminatingProcessor);*/
 
         GroupStatusInactiveProcessor groupStatusInactiveProcessor =
                 new GroupStatusInactiveProcessor();

http://git-wip-us.apache.org/repos/asf/stratos/blob/be922cc6/products/stratos/modules/integration/test-common/src/main/java/org/apache/stratos/integration/common/TopologyHandler.java
----------------------------------------------------------------------
diff --git a/products/stratos/modules/integration/test-common/src/main/java/org/apache/stratos/integration/common/TopologyHandler.java b/products/stratos/modules/integration/test-common/src/main/java/org/apache/stratos/integration/common/TopologyHandler.java
index ad4887b..721a5c6 100644
--- a/products/stratos/modules/integration/test-common/src/main/java/org/apache/stratos/integration/common/TopologyHandler.java
+++ b/products/stratos/modules/integration/test-common/src/main/java/org/apache/stratos/integration/common/TopologyHandler.java
@@ -127,7 +127,8 @@ public class TopologyHandler {
                 break;
             }
         }
-        assertEquals(String.format("Application Topology didn't get initialized "), applicationTopologyInitialized, true);
+        assertEquals(String.format("Application Topology didn't get initialized "), applicationTopologyInitialized,
+                true);
     }
 
     /**
@@ -152,12 +153,11 @@ public class TopologyHandler {
     /**
      * Assert application activation
      *
-     * @param tenantId
      * @param applicationName
      */
-    public void assertApplicationStatus(String applicationName, ApplicationStatus status, int tenantId) {
+    public void assertApplicationStatus(String applicationName, ApplicationStatus status) {
         long startTime = System.currentTimeMillis();
-        Application application = ApplicationManager.getApplications().getApplicationByTenant(applicationName, tenantId);
+        Application application = ApplicationManager.getApplications().getApplication(applicationName);
         while (!((application != null) && (application.getStatus() == status))) {
             try {
                 Thread.sleep(1000);
@@ -170,26 +170,14 @@ public class TopologyHandler {
             }
         }
         assertNotNull(String.format("Application is not found: [application-id] %s", applicationName), application);
-        assertEquals(String.format("Application status did not change to %s: [application-id] %s",
-                        status.toString(), applicationName),
-                status, application.getStatus());
-    }
-
-    public Application getApplication(String applicationName, int tenantId) {
-        return ApplicationManager.getApplications().getApplicationByTenant(applicationName, tenantId);
-    }
-
-    public void assertApplicationForNonAvailability(String applicationName,  int tenantId) {
-
-        Application application = ApplicationManager.getApplications().getApplicationByTenant(applicationName, tenantId);
-        assertNull(String.format("Application is found for other tenant : [application-id] %s", applicationName),application);
+        assertEquals(String.format("Application status did not change to %s: [application-id] %s", status.toString(),
+                applicationName), status, application.getStatus());
     }
 
     /**
      * Assert application activation
      *
      * @param applicationName
-     * @param tenantId
      */
     public void assertGroupActivation(String applicationName) {
         Application application = ApplicationManager.getApplications().getApplication(applicationName);
@@ -205,7 +193,6 @@ public class TopologyHandler {
      * Assert application activation
      *
      * @param applicationName
-     * @param tenantId
      */
     public void assertClusterActivation(String applicationName) {
         Application application = ApplicationManager.getApplications().getApplication(applicationName);
@@ -213,7 +200,7 @@ public class TopologyHandler {
 
         Set<ClusterDataHolder> clusterDataHolderSet = application.getClusterDataRecursively();
         for (ClusterDataHolder clusterDataHolder : clusterDataHolderSet) {
-            String serviceUuid = clusterDataHolder.getServiceUuid();
+            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,
@@ -228,9 +215,10 @@ public class TopologyHandler {
                         member.getClusterId()));
             }
             boolean clusterActive = false;
-
+            int activeInstances;
             for (ClusterInstance instance : cluster.getInstanceIdToInstanceContextMap().values()) {
-                int activeInstances = 0;
+                log.info("Checking for active members in cluster instance: " + instance.getInstanceId());
+                activeInstances = 0;
                 for (Member member : cluster.getMembers()) {
                     if (member.getClusterInstanceId().equals(instance.getInstanceId())) {
                         if (member.getStatus().equals(MemberStatus.Active)) {
@@ -242,28 +230,24 @@ public class TopologyHandler {
                 assertTrue(String.format("Cluster status did not change to active: [cluster-id] %s", clusterId),
                         clusterActive);
             }
-            assertEquals(String.format("Cluster status did not change to active: [cluster-id] %s", clusterId),
-                    clusterActive, true);
         }
-
     }
 
     /**
-     * Assert application activation
+     * Get all the members that belongs to the cluster identified by cartridge name and application name in the
+     * topology
      *
-     * @param tenantId
+     * @param cartridgeName
      * @param applicationName
      */
-
-    public void terminateMemberFromCluster(String cartridgeName, String applicationName, IntegrationMockClient mockIaasApiClient, int tenantId) {
-        Application application = ApplicationManager.getApplications().getApplicationByTenant(applicationName, tenantId);
-        assertNotNull(String.format("Application is not found: [application-id] %s",
-                applicationName), application);
-
+    public Map<String, Member> getMembersForCluster(String cartridgeName, 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();
+        Map<String, Member> memberMap = new HashMap<String, Member>();
         for (ClusterDataHolder clusterDataHolder : clusterDataHolderSet) {
-            String serviceUuid = clusterDataHolder.getServiceUuid();
-            if(cartridgeName.equals(serviceUuid)) {
+            String serviceName = clusterDataHolder.getServiceType();
+            if (cartridgeName.equals(serviceName)) {
                 String clusterId = clusterDataHolder.getClusterId();
                 Service service = TopologyManager.getTopology().getService(serviceName);
                 assertNotNull(String.format("Service is not found: [application-id] %s [service] %s", applicationName,
@@ -271,19 +255,16 @@ public class TopologyHandler {
 
                 Cluster cluster = service.getCluster(clusterId);
                 assertNotNull(String.format("Cluster is not found: [application-id] %s [service] %s [cluster-id] %s",
-                        applicationName, serviceUuid, clusterId), cluster);
-                boolean memberTerminated = false;
-
+                        applicationName, serviceName, clusterId), cluster);
                 for (ClusterInstance instance : cluster.getInstanceIdToInstanceContextMap().values()) {
                     for (Member member : cluster.getMembers()) {
-                        if (member.getClusterInstanceId().equals(instance.getInstanceId())) {
-                            if (member.getStatus().equals(MemberStatus.Active)) {
-                                mockIaasApiClient.terminateInstance(member.getMemberId());
-                                memberTerminated = true;
-                                break;
-                            }
-                        }
+                        memberMap.put(member.getMemberId(), member);
                     }
+                }
+            }
+        }
+        return memberMap;
+    }
 
     /**
      * Terminate a member in mock iaas directly without involving Stratos REST API
@@ -316,7 +297,6 @@ public class TopologyHandler {
                     log.error("Member did not get removed from the topology within timeout period");
                     break;
                 }
-                assertTrue("Any member couldn't be terminated from the mock IaaS client", memberTerminated);
             }
             try {
                 Thread.sleep(1000);
@@ -324,10 +304,11 @@ public class TopologyHandler {
                 log.error("Could not sleep", e);
             }
         }
-
+        assertTrue(String.format("Member [member-id] %s did not get removed from the topology", memberId),
+                hasMemberRemoved);
     }
 
-    public void assertClusterMinMemberCount(String applicationName, int minMembers, int tenantId) {
+    public void assertClusterMinMemberCount(String applicationName, int minMembers) {
         long startTime = System.currentTimeMillis();
 
         Application application = ApplicationManager.getApplications().getApplication(applicationName);
@@ -335,7 +316,7 @@ public class TopologyHandler {
 
         Set<ClusterDataHolder> clusterDataHolderSet = application.getClusterDataRecursively();
         for (ClusterDataHolder clusterDataHolder : clusterDataHolderSet) {
-            String serviceName = clusterDataHolder.getServiceUuid();
+            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,
@@ -377,8 +358,9 @@ public class TopologyHandler {
                         }
                     }
                     clusterActive = activeInstances >= minMembers;
-                    assertNotNull(String.format("Cluster is not found: [application-id] %s [service] %s [cluster-id] %s",
-                            applicationName, serviceName, clusterId), cluster);
+                    assertNotNull(
+                            String.format("Cluster is not found: [application-id] %s [service] %s [cluster-id] %s",
+                                    applicationName, serviceName, clusterId), cluster);
 
                     if ((System.currentTimeMillis() - startTime) > APPLICATION_ACTIVATION_TIMEOUT) {
                         log.error("Cluster did not activate within timeout period");
@@ -396,11 +378,10 @@ public class TopologyHandler {
      * Assert application activation
      *
      * @param applicationName
-     * @param tenantId
      */
-    public boolean assertApplicationUndeploy(String applicationName, int tenantId) {
+    public boolean assertApplicationUndeploy(String applicationName) {
         long startTime = System.currentTimeMillis();
-        Application application = ApplicationManager.getApplications().getApplicationByTenant(applicationName, tenantId);
+        Application application = ApplicationManager.getApplications().getApplication(applicationName);
         ApplicationContext applicationContext = null;
         try {
             applicationContext = AutoscalerServiceClient.getInstance().getApplication(applicationName);
@@ -434,7 +415,8 @@ public class TopologyHandler {
                 .equals(APPLICATION_STATUS_UNDEPLOYING)) {
             return false;
         }
-        assertEquals(String.format("Application status did not change to Created: [application-id] %s", applicationName),
+        assertEquals(
+                String.format("Application status did not change to Created: [application-id] %s", applicationName),
                 APPLICATION_STATUS_CREATED, applicationContext.getStatus());
         return true;
     }
@@ -442,12 +424,11 @@ public class TopologyHandler {
     /**
      * Assert application activation
      *
-     * @param tenantId
      * @param applicationName
      */
-    public void assertGroupInstanceCount(String applicationName, String groupAlias, int count, int tenantId) {
+    public void assertGroupInstanceCount(String applicationName, String groupAlias, int count) {
         long startTime = System.currentTimeMillis();
-        Application application = ApplicationManager.getApplications().getApplicationByTenant(applicationName, tenantId);
+        Application application = ApplicationManager.getApplications().getApplication(applicationName);
         if (application != null) {
             Group group = application.getGroupRecursively(groupAlias);
             while (group.getInstanceContextCount() != count) {
@@ -472,7 +453,8 @@ public class TopologyHandler {
                     }
                 }
             }
-            assertEquals(String.format("Application status did not change to active: [application-id] %s", applicationName),
+            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);
@@ -481,7 +463,8 @@ public class TopologyHandler {
 
     public void assertApplicationNotExists(String applicationName) {
         Application application = ApplicationManager.getApplications().getApplication(applicationName);
-        assertNull(String.format("Application is found in the topology : [application-id] %s", applicationName), application);
+        assertNull(String.format("Application is found in the topology : [application-id] %s", applicationName),
+                application);
     }
 
     private void addTopologyEventListeners() {
@@ -490,7 +473,10 @@ public class TopologyHandler {
             protected void onEvent(Event event) {
                 MemberTerminatedEvent memberTerminatedEvent = (MemberTerminatedEvent) event;
                 getTerminatedMembers().put(memberTerminatedEvent.getMemberId(), System.currentTimeMillis());
-
+                getActivateddMembers().remove(((MemberTerminatedEvent) event).getMemberId());
+                getCreatedMembers().remove(((MemberTerminatedEvent) event).getMemberId());
+                getInActiveMembers().remove(((MemberTerminatedEvent) event).getMemberId());
+                getTerminatingMembers().remove(((MemberTerminatedEvent) event).getMemberId());
             }
         });
 
@@ -610,8 +596,8 @@ public class TopologyHandler {
         return appId + "-" + groupId + "-" + instanceId;
     }
 
-    public String getClusterIdFromAlias(String applicationId, String alias,int tenantId) {
-        Application application = ApplicationManager.getApplications().getApplicationByTenant(applicationId,tenantId);
+    public String getClusterIdFromAlias(String applicationId, String alias) {
+        Application application = ApplicationManager.getApplications().getApplication(applicationId);
         assertNotNull(application);
 
         ClusterDataHolder dataHolder = application.getClusterDataHolderRecursivelyByAlias(alias);
@@ -621,14 +607,14 @@ public class TopologyHandler {
     }
 
     public void removeMembersFromMaps(String applicationId) {
-        for(Map.Entry<String, Long> entry: getActivateddMembers().entrySet()) {
-            if(entry.getKey().contains(applicationId)) {
+        for (Map.Entry<String, Long> entry : getActivateddMembers().entrySet()) {
+            if (entry.getKey().contains(applicationId)) {
                 getActivateddMembers().remove(entry.getKey());
             }
         }
 
-        for(Map.Entry<String, Long> entry: getTerminatedMembers().entrySet()) {
-            if(entry.getKey().contains(applicationId)) {
+        for (Map.Entry<String, Long> entry : getTerminatedMembers().entrySet()) {
+            if (entry.getKey().contains(applicationId)) {
                 getTerminatedMembers().remove(entry.getKey());
             }
         }

http://git-wip-us.apache.org/repos/asf/stratos/blob/be922cc6/products/stratos/modules/integration/test-integration/src/test/java/org/apache/stratos/integration/tests/application/SingleClusterScalingTestCase.java
----------------------------------------------------------------------
diff --git a/products/stratos/modules/integration/test-integration/src/test/java/org/apache/stratos/integration/tests/application/SingleClusterScalingTestCase.java b/products/stratos/modules/integration/test-integration/src/test/java/org/apache/stratos/integration/tests/application/SingleClusterScalingTestCase.java
index e84bc3c..0b96210 100644
--- a/products/stratos/modules/integration/test-integration/src/test/java/org/apache/stratos/integration/tests/application/SingleClusterScalingTestCase.java
+++ b/products/stratos/modules/integration/test-integration/src/test/java/org/apache/stratos/integration/tests/application/SingleClusterScalingTestCase.java
@@ -1,7 +1,355 @@
+/*
+ * 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.application;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.common.beans.application.ApplicationBean;
+import org.apache.stratos.common.beans.policy.deployment.ApplicationPolicyBean;
+import org.apache.stratos.integration.common.RestConstants;
+import org.apache.stratos.integration.common.TopologyHandler;
+import org.apache.stratos.integration.tests.StratosIntegrationTest;
+import org.apache.stratos.messaging.domain.application.Application;
+import org.apache.stratos.messaging.domain.application.ApplicationStatus;
+import org.apache.stratos.messaging.domain.application.ClusterDataHolder;
+import org.apache.stratos.messaging.domain.instance.ClusterInstance;
+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.topology.TopologyManager;
+import org.testng.annotations.Test;
+
+import java.util.Set;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.AssertJUnit.assertNotNull;
+
 /**
- * Created by gayan on 11/2/15.
+ * This will handle the scale-up and scale-down of a particular cluster bursting test cases
  */
-public class SingleClusterScalingTestCase {
-}
+public class SingleClusterScalingTestCase extends StratosIntegrationTest {
+    private static final Log log = LogFactory.getLog(SingleClusterScalingTestCase.class);
+    private static final String RESOURCES_PATH = "/single-cluster-scaling-test";
+    private static final int CLUSTER_SCALE_UP_TIMEOUT = 180000;
+    private static final int CLUSTER_SCALE_DOWN_TIMEOUT = 360000;
+    private int activeInstancesAfterScaleup = 0;
+
+    @Test(timeOut = APPLICATION_TEST_TIMEOUT, groups = {"stratos.application.deployment"})
+    public void testDeployApplication() throws Exception {
+        TopologyHandler topologyHandler = TopologyHandler.getInstance();
+        String autoscalingPolicyId = "autoscaling-policy-single-cluster-scaling-test";
+
+        boolean addedScalingPolicy = restClient.addEntity(RESOURCES_PATH + RestConstants.AUTOSCALING_POLICIES_PATH
+                        + "/" + autoscalingPolicyId + ".json",
+                RestConstants.AUTOSCALING_POLICIES, RestConstants.AUTOSCALING_POLICIES_NAME);
+        assertEquals(addedScalingPolicy, true);
+
+        boolean addedC1 = restClient.addEntity(
+                RESOURCES_PATH + RestConstants.CARTRIDGES_PATH + "/" + "c7-single-cluster-scaling-test.json",
+                RestConstants.CARTRIDGES, RestConstants.CARTRIDGES_NAME);
+        assertEquals(addedC1, true);
+
+        boolean addedN1 = restClient.addEntity(RESOURCES_PATH + RestConstants.NETWORK_PARTITIONS_PATH + "/" +
+                        "network-partition-single-cluster-scaling-test.json",
+                RestConstants.NETWORK_PARTITIONS, RestConstants.NETWORK_PARTITIONS_NAME);
+        assertEquals(addedN1, true);
+
+        boolean addedDep = restClient.addEntity(RESOURCES_PATH + RestConstants.DEPLOYMENT_POLICIES_PATH + "/" +
+                        "deployment-policy-single-cluster-scaling-test.json",
+                RestConstants.DEPLOYMENT_POLICIES, RestConstants.DEPLOYMENT_POLICIES_NAME);
+        assertEquals(addedDep, true);
+
+        boolean added = restClient.addEntity(RESOURCES_PATH + RestConstants.APPLICATIONS_PATH + "/" +
+                        "single-cluster-scaling-test.json", RestConstants.APPLICATIONS,
+                RestConstants.APPLICATIONS_NAME);
+        assertEquals(added, true);
+
+        ApplicationBean bean = (ApplicationBean) restClient.getEntity(RestConstants.APPLICATIONS,
+                "single-cluster-scaling-test", ApplicationBean.class, RestConstants.APPLICATIONS_NAME);
+        assertEquals(bean.getApplicationId(), "single-cluster-scaling-test");
+
+        boolean addAppPolicy = restClient.addEntity(RESOURCES_PATH + RestConstants.APPLICATION_POLICIES_PATH + "/" +
+                        "application-policy-single-cluster-scaling-test.json", RestConstants.APPLICATION_POLICIES,
+                RestConstants.APPLICATION_POLICIES_NAME);
+        assertEquals(addAppPolicy, true);
+
+        ApplicationPolicyBean policyBean = (ApplicationPolicyBean) restClient.getEntity(
+                RestConstants.APPLICATION_POLICIES,
+                "application-policy-single-cluster-scaling-test", ApplicationPolicyBean.class,
+                RestConstants.APPLICATION_POLICIES_NAME);
+
+        //deploy the application
+        String resourcePath = RestConstants.APPLICATIONS + "/" + "single-cluster-scaling-test" +
+                RestConstants.APPLICATIONS_DEPLOY + "/" + "application-policy-single-cluster-scaling-test";
+        boolean deployed = restClient.deployEntity(resourcePath,
+                RestConstants.APPLICATIONS_NAME);
+        assertEquals(deployed, true);
+
+        //Application active handling
+        topologyHandler.assertApplicationStatus(bean.getApplicationId()
+                , ApplicationStatus.Active);
+
+        //Cluster active handling
+        topologyHandler.assertClusterActivation(bean.getApplicationId());
+
+        //Verifying whether members got created using round robin algorithm
+        assertClusterWithScalingup(bean.getApplicationId());
+
+        //assert scale-down
+        assertClusterWithScaleDown(bean.getApplicationId());
+
+        //Check whether cluster could scale-down upto the minimum
+        assertClusterScaleDownToMinimumCount(bean.getApplicationId());
+
+        boolean removedAuto = restClient.removeEntity(RestConstants.AUTOSCALING_POLICIES,
+                autoscalingPolicyId, RestConstants.AUTOSCALING_POLICIES_NAME);
+        assertEquals(removedAuto, false);
+
+        boolean removedNet = restClient.removeEntity(RestConstants.NETWORK_PARTITIONS,
+                "network-partition-single-cluster-scaling-test",
+                RestConstants.NETWORK_PARTITIONS_NAME);
+        //Trying to remove the used network partition
+        assertEquals(removedNet, false);
+
+        boolean removedDep = restClient.removeEntity(RestConstants.DEPLOYMENT_POLICIES,
+                "deployment-policy-single-cluster-scaling-test", RestConstants.DEPLOYMENT_POLICIES_NAME);
+        assertEquals(removedDep, false);
+
+        //Un-deploying the application
+        String resourcePathUndeploy = RestConstants.APPLICATIONS + "/" + "single-cluster-scaling-test" +
+                RestConstants.APPLICATIONS_UNDEPLOY;
+
+        boolean unDeployed = restClient.undeployEntity(resourcePathUndeploy,
+                RestConstants.APPLICATIONS_NAME);
+        assertEquals(unDeployed, true);
+
+        boolean undeploy = topologyHandler.assertApplicationUndeploy("single-cluster-scaling-test");
+        if (!undeploy) {
+            //Need to forcefully undeploy the application
+            log.info("Force undeployment is going to start for the [application] " + "single-cluster-scaling-test");
+
+            restClient.undeployEntity(RestConstants.APPLICATIONS + "/" + "single-cluster-scaling-test" +
+                    RestConstants.APPLICATIONS_UNDEPLOY + "?force=true", RestConstants.APPLICATIONS);
+
+            boolean forceUndeployed = topologyHandler.assertApplicationUndeploy("single-cluster-scaling-test");
+            assertEquals(forceUndeployed, true, String.format("Forceful undeployment failed for the application %s",
+                    "single-cluster-scaling-test"));
+        }
+
+        boolean removed = restClient.removeEntity(RestConstants.APPLICATIONS, "single-cluster-scaling-test",
+                RestConstants.APPLICATIONS_NAME);
+        assertEquals(removed, true);
+
+        ApplicationBean beanRemoved = (ApplicationBean) restClient.getEntity(RestConstants.APPLICATIONS,
+                "single-cluster-scaling-test", ApplicationBean.class, RestConstants.APPLICATIONS_NAME);
+        assertEquals(beanRemoved, null);
+
+        boolean removedC1 = restClient.removeEntity(RestConstants.CARTRIDGES, "c7-single-cluster-scaling-test",
+                RestConstants.CARTRIDGES_NAME);
+        assertEquals(removedC1, true);
+
+
+        removedAuto = restClient.removeEntity(RestConstants.AUTOSCALING_POLICIES,
+                autoscalingPolicyId, RestConstants.AUTOSCALING_POLICIES_NAME);
+        assertEquals(removedAuto, true);
+
+        removedDep = restClient.removeEntity(RestConstants.DEPLOYMENT_POLICIES,
+                "deployment-policy-single-cluster-scaling-test", RestConstants.DEPLOYMENT_POLICIES_NAME);
+        assertEquals(removedDep, true);
+
+        removedNet = restClient.removeEntity(RestConstants.NETWORK_PARTITIONS,
+                "network-partition-single-cluster-scaling-test", RestConstants.NETWORK_PARTITIONS_NAME);
+        assertEquals(removedNet, false);
+
+
+        boolean removeAppPolicy = restClient.removeEntity(RestConstants.APPLICATION_POLICIES,
+                "application-policy-single-cluster-scaling-test", RestConstants.APPLICATION_POLICIES_NAME);
+        assertEquals(removeAppPolicy, true);
+
+        removedNet = restClient.removeEntity(RestConstants.NETWORK_PARTITIONS,
+                "network-partition-single-cluster-scaling-test", RestConstants.NETWORK_PARTITIONS_NAME);
+        assertEquals(removedNet, true);
+    }
+
+    /**
+     * Assert application activation
+     *
+     * @param applicationName
+     */
+    private void assertClusterWithScalingup(String applicationName) {
+        Application application = ApplicationManager.getApplications().getApplication(applicationName);
+        assertNotNull(String.format("Application is not found: [application-id] %s",
+                applicationName), application);
+        boolean clusterScaleup = false;
+        String clusterId = null;
+        long startTime = System.currentTimeMillis();
+        while (!clusterScaleup) {
+            try {
+                Thread.sleep(1000);
+            } catch (InterruptedException ignore) {
+            }
+            Set<ClusterDataHolder> clusterDataHolderSet = application.getClusterDataRecursively();
+            for (ClusterDataHolder clusterDataHolder : clusterDataHolderSet) {
+                String serviceName = clusterDataHolder.getServiceType();
+                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);
+                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++;
+                            }
+                        }
+                    }
+
+                    clusterScaleup = activeInstances > clusterDataHolder.getMinInstances();
+                    if (clusterScaleup) {
+                        activeInstancesAfterScaleup = activeInstances;
+                        break;
+                    }
+                }
+                application = ApplicationManager.getApplications().getApplication(applicationName);
+                if ((System.currentTimeMillis() - startTime) > CLUSTER_SCALE_UP_TIMEOUT) {
+                    break;
+                }
+            }
+        }
+        assertEquals(true, clusterScaleup, String.format("Cluster did not get scaled up: [cluster-id] %s", clusterId));
+    }
+
+    /**
+     * Assert application activation
+     *
+     * @param applicationName
+     */
+    private void assertClusterWithScaleDown(String applicationName) {
+        Application application = ApplicationManager.getApplications().getApplication(applicationName);
+        assertNotNull(String.format("Application is not found: [application-id] %s",
+                applicationName), application);
+        boolean clusterScaleDown = false;
+        String clusterId = null;
+        long startTime = System.currentTimeMillis();
+        while (!clusterScaleDown) {
+            try {
+                Thread.sleep(1000);
+            } catch (InterruptedException ignore) {
+            }
+            Set<ClusterDataHolder> clusterDataHolderSet = application.getClusterDataRecursively();
+            for (ClusterDataHolder clusterDataHolder : clusterDataHolderSet) {
+                String serviceName = clusterDataHolder.getServiceType();
+                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);
+                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++;
+                            }
+                        }
+                    }
+
+                    if (activeInstances > activeInstancesAfterScaleup) {
+                        activeInstancesAfterScaleup = activeInstances;
+                    }
+
+                    clusterScaleDown = activeInstancesAfterScaleup - 1 == activeInstances;
+                    if (clusterScaleDown) {
+                        break;
+                    }
+
+                }
+
+                application = ApplicationManager.getApplications().getApplication(applicationName);
+                if ((System.currentTimeMillis() - startTime) > CLUSTER_SCALE_DOWN_TIMEOUT) {
+                    break;
+                }
+            }
+        }
+        assertEquals(clusterScaleDown, true,
+                String.format("Cluster did not get scaled up: [cluster-id] %s", clusterId));
+    }
+
+    /**
+     * Assert application activation
+     *
+     * @param applicationName
+     */
+    private void assertClusterScaleDownToMinimumCount(String applicationName) {
+        Application application = ApplicationManager.getApplications().getApplication(applicationName);
+        assertNotNull(String.format("Application is not found: [application-id] %s",
+                applicationName), application);
+        boolean clusterScaleDown = false;
+        String clusterId = null;
+        long startTime = System.currentTimeMillis();
+        while (!clusterScaleDown) {
+            try {
+                Thread.sleep(1000);
+            } catch (InterruptedException ignore) {
+            }
+            Set<ClusterDataHolder> clusterDataHolderSet = application.getClusterDataRecursively();
+            for (ClusterDataHolder clusterDataHolder : clusterDataHolderSet) {
+                String serviceName = clusterDataHolder.getServiceType();
+                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);
+                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++;
+                            }
+                        }
+                    }
+                    clusterScaleDown = activeInstances == clusterDataHolder.getMinInstances();
+                    if (clusterScaleDown) {
+                        break;
+                    }
+                }
+                application = ApplicationManager.getApplications().getApplication(applicationName);
+                if ((System.currentTimeMillis() - startTime) > CLUSTER_SCALE_DOWN_TIMEOUT) {
+                    break;
+                }
+            }
+        }
+        assertEquals(clusterScaleDown, true,
+                String.format("Cluster did not get scaled up: [cluster-id] %s", clusterId));
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/stratos/blob/be922cc6/products/stratos/modules/integration/test-integration/src/test/resources/common/jndi.properties
----------------------------------------------------------------------
diff --git a/products/stratos/modules/integration/test-integration/src/test/resources/common/jndi.properties b/products/stratos/modules/integration/test-integration/src/test/resources/common/jndi.properties
index e69de29..cfe8c7e 100644
--- a/products/stratos/modules/integration/test-integration/src/test/resources/common/jndi.properties
+++ b/products/stratos/modules/integration/test-integration/src/test/resources/common/jndi.properties
@@ -0,0 +1,22 @@
+#
+# 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.
+#
+
+connectionfactoryName=TopicConnectionFactory
+java.naming.provider.url=tcp://localhost:ACTIVEMQ_DYNAMIC_PORT
+java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory
\ No newline at end of file