You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by re...@apache.org on 2015/06/30 07:54:21 UTC

[3/5] stratos git commit: writing test for autoscaling policy removal in autoscaler by abstracting out the methods

writing test for autoscaling policy removal in autoscaler by abstracting out the methods


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

Branch: refs/heads/master
Commit: 729ef7abb623752137c05a4f5a0e38e57f6d55ca
Parents: b7897af
Author: reka <rt...@gmail.com>
Authored: Fri Jun 26 16:37:04 2015 +0530
Committer: reka <rt...@gmail.com>
Committed: Tue Jun 30 11:23:49 2015 +0530

----------------------------------------------------------------------
 .../applications/topic/ApplicationBuilder.java  |   3 +
 .../autoscaler/context/AutoscalerContext.java   |  19 +--
 .../internal/AutoscalerServiceComponent.java    |   4 +
 .../services/impl/AutoscalerServiceImpl.java    | 128 +++++--------------
 .../stratos/autoscaler/util/AutoscalerUtil.java |  82 +++++++++++-
 .../stratos/autoscaler/AutoscalerUtilTest.java  |  65 ++++++++++
 6 files changed, 187 insertions(+), 114 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/729ef7ab/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java
index 1aafd00..44a6786 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java
@@ -31,6 +31,7 @@ import org.apache.stratos.autoscaler.event.publisher.ClusterStatusEventPublisher
 import org.apache.stratos.autoscaler.monitor.Monitor;
 import org.apache.stratos.autoscaler.monitor.component.ApplicationMonitor;
 import org.apache.stratos.autoscaler.monitor.component.GroupMonitor;
+import org.apache.stratos.autoscaler.registry.RegistryManager;
 import org.apache.stratos.messaging.domain.application.*;
 import org.apache.stratos.messaging.domain.instance.ApplicationInstance;
 import org.apache.stratos.messaging.domain.instance.ClusterInstance;
@@ -246,6 +247,7 @@ public class ApplicationBuilder {
             }
 
             AutoscalerContext.getInstance().removeApplicationContext(appId);
+            RegistryManager.getInstance().removeApplicationContext(appId);
             ApplicationHolder.removeApplication(appId);
 
         } finally {
@@ -307,6 +309,7 @@ public class ApplicationBuilder {
                     // update application status in application context
                     applicationContext.setStatus(ApplicationContext.STATUS_CREATED);
                     AutoscalerContext.getInstance().updateApplicationContext(applicationContext);
+                    RegistryManager.getInstance().persistApplicationContext(applicationContext);
 
                     log.info("Application un-deployed successfully: [application-id] " + applicationId);
                 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/729ef7ab/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/AutoscalerContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/AutoscalerContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/AutoscalerContext.java
index 51e9d16..3a988e6 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/AutoscalerContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/AutoscalerContext.java
@@ -76,29 +76,16 @@ public class AutoscalerContext {
         // Initialize distributed object provider
         distributedObjectProvider = ServiceReferenceHolder.getInstance().getDistributedObjectProvider();
 
-        applicationContextMap = readApplicationContextsFromRegistry();
         if (applicationContextMap == null) {
             applicationContextMap = distributedObjectProvider.getMap(AS_APPLICATION_ID_TO_APPLICATION_CTX_MAP);//new ConcurrentHashMap<String, ApplicationContext>();
         }
         setClusterMonitors(distributedObjectProvider.getMap(AS_CLUSTER_ID_TO_CLUSTER_MONITOR_MAP));
         setApplicationMonitors(distributedObjectProvider.getMap(AS_APPLICATION_ID_TO_APPLICATION_MONITOR_MAP));
         pendingApplicationMonitors = distributedObjectProvider.getList(AS_PENDING_APPLICATION_MONITOR_LIST);//new ArrayList<String>();
-        applicationIdToNetworkPartitionAlgorithmContextMap = distributedObjectProvider.getMap(AS_APPLICATIOIN_ID_TO_NETWORK_PARTITION_ALGO_CTX_MAP);
+        applicationIdToNetworkPartitionAlgorithmContextMap =
+                distributedObjectProvider.getMap(AS_APPLICATIOIN_ID_TO_NETWORK_PARTITION_ALGO_CTX_MAP);
     }
 
-    private Map<String, ApplicationContext> readApplicationContextsFromRegistry() {
-        String[] resourcePaths = RegistryManager.getInstance().getApplicationContextResourcePaths();
-        if ((resourcePaths == null) || (resourcePaths.length == 0)) {
-            return null;
-        }
-
-        Map<String, ApplicationContext> applicationContextMap = distributedObjectProvider.getMap(AS_APPLICATION_ID_TO_APPLICATION_CTX_MAP);//new ConcurrentHashMap<String, ApplicationContext>();
-        for (String resourcePath : resourcePaths) {
-            ApplicationContext applicationContext = RegistryManager.getInstance().getApplicationContextByResourcePath(resourcePath);
-            applicationContextMap.put(applicationContext.getApplicationId(), applicationContext);
-        }
-        return applicationContextMap;
-    }
 
     public static AutoscalerContext getInstance() {
         if (instance == null) {
@@ -169,11 +156,9 @@ public class AutoscalerContext {
 
     public void addApplicationContext(ApplicationContext applicationContext) {
         applicationContextMap.put(applicationContext.getApplicationId(), applicationContext);
-        RegistryManager.getInstance().persistApplicationContext(applicationContext);
     }
 
     public ApplicationContext removeApplicationContext(String applicationId) {
-        RegistryManager.getInstance().removeApplicationContext(applicationId);
         return applicationContextMap.remove(applicationId);
     }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/729ef7ab/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServiceComponent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServiceComponent.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServiceComponent.java
index b5fd144..65d75b2 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServiceComponent.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServiceComponent.java
@@ -40,6 +40,7 @@ import org.apache.stratos.autoscaler.registry.RegistryManager;
 import org.apache.stratos.autoscaler.status.processor.cluster.ClusterStatusProcessorChain;
 import org.apache.stratos.autoscaler.status.processor.group.GroupStatusProcessorChain;
 import org.apache.stratos.autoscaler.util.AutoscalerConstants;
+import org.apache.stratos.autoscaler.util.AutoscalerUtil;
 import org.apache.stratos.autoscaler.util.ConfUtil;
 import org.apache.stratos.autoscaler.util.ServiceReferenceHolder;
 import org.apache.stratos.common.Component;
@@ -209,6 +210,9 @@ public class AutoscalerServiceComponent {
             AutoscalerContext.getInstance().addNetworkPartitionAlgorithmContext(algorithmContext);
         }
 
+        //Adding application context from registry
+        AutoscalerUtil.readApplicationContextsFromRegistry();
+
         //starting the processor chain
         ClusterStatusProcessorChain clusterStatusProcessorChain = new ClusterStatusProcessorChain();
         ServiceReferenceHolder.getInstance().setClusterStatusProcessorChain(clusterStatusProcessorChain);

http://git-wip-us.apache.org/repos/asf/stratos/blob/729ef7ab/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 3f2120c..963136f 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
@@ -110,7 +110,7 @@ public class AutoscalerServiceImpl implements AutoscalerService {
     @Override
     public boolean removeAutoScalingPolicy(String autoscalePolicyId) throws UnremovablePolicyException,
             PolicyDoesNotExistException {
-        if (removableAutoScalerPolicy(autoscalePolicyId)) {
+        if (AutoscalerUtil.removableAutoScalerPolicy(autoscalePolicyId)) {
             return PolicyManager.getInstance().removeAutoscalePolicy(autoscalePolicyId);
         } else {
             throw new UnremovablePolicyException("This autoscaler policy cannot be removed, " +
@@ -119,76 +119,6 @@ public class AutoscalerServiceImpl implements AutoscalerService {
         }
     }
 
-    /**
-     * Validate the Auto Scalar policy removal
-     *
-     * @param autoscalePolicyId Auto Scalar policy id boolean
-     * @return
-     */
-    private boolean removableAutoScalerPolicy(String autoscalePolicyId) {
-        Collection<ApplicationContext> applicationContexts = AutoscalerContext.getInstance().
-                getApplicationContexts();
-        for (ApplicationContext applicationContext : applicationContexts) {
-            if(applicationContext.getComponents().getCartridgeContexts() != null) {
-                for(CartridgeContext cartridgeContext : applicationContext.getComponents().
-                        getCartridgeContexts()) {
-                    if(autoscalePolicyId.equals(cartridgeContext.getSubscribableInfoContext().
-                            getAutoscalingPolicy())) {
-                        return false;
-                    }
-                }
-            }
-
-            if(applicationContext.getComponents().getGroupContexts() != null) {
-                return findAutoscalingPolicyInGroup(applicationContext.getComponents().getGroupContexts(),
-                        autoscalePolicyId);
-            }
-        }
-        return true;
-    }
-
-
-    private boolean findAutoscalingPolicyInGroup(GroupContext[] groupContexts,
-                                                 String autoscalePolicyId) {
-        for(GroupContext groupContext : groupContexts) {
-            if(groupContext.getCartridgeContexts() != null) {
-                for(CartridgeContext cartridgeContext : groupContext.getCartridgeContexts()) {
-                    if(autoscalePolicyId.equals(cartridgeContext.getSubscribableInfoContext().
-                            getAutoscalingPolicy())) {
-                        return false;
-                    }
-                }
-
-            }
-            if(groupContext.getGroupContexts() != null) {
-                return findAutoscalingPolicyInGroup(groupContext.getGroupContexts(),
-                        autoscalePolicyId);
-            }
-        }
-        return true;
-    }
-
-    /**
-     * Validate the deployment policy removal
-     *
-     * @param deploymentPolicyId
-     * @return
-     */
-    private boolean removableDeploymentPolicy(String deploymentPolicyId) {
-        boolean canRemove = true;
-        Map<String, Application> applications = ApplicationHolder.getApplications().getApplications();
-        for (Application application : applications.values()) {
-            List<String> deploymentPolicyIdsReferredInApplication = AutoscalerUtil.
-                    getDeploymentPolicyIdsReferredInApplication(application.getUniqueIdentifier());
-            for (String deploymentPolicyIdInApp : deploymentPolicyIdsReferredInApplication) {
-                if (deploymentPolicyId.equals(deploymentPolicyIdInApp)) {
-                    canRemove = false;
-                }
-            }
-        }
-        return canRemove;
-    }
-
     @Override
     public AutoscalePolicy getAutoscalingPolicy(String autoscalingPolicyId) {
         return PolicyManager.getInstance().getAutoscalePolicy(autoscalingPolicyId);
@@ -215,6 +145,8 @@ public class AutoscalerServiceImpl implements AutoscalerService {
 
         applicationContext.setStatus(ApplicationContext.STATUS_CREATED);
         AutoscalerContext.getInstance().addApplicationContext(applicationContext);
+        //Persisting the application
+        RegistryManager.getInstance().persistApplicationContext(applicationContext);
 
         if (log.isInfoEnabled()) {
             log.info(String.format("Application added successfully: [application-id] %s",
@@ -955,6 +887,9 @@ public class AutoscalerServiceImpl implements AutoscalerService {
         // validating application policy
         AutoscalerUtil.validateApplicationPolicy(applicationPolicy);
 
+        //Update application Monitor
+
+
         // updating application policy
         PolicyManager.getInstance().updateApplicationPolicy(applicationPolicy);
         return true;
@@ -1205,31 +1140,32 @@ public class AutoscalerServiceImpl implements AutoscalerService {
                 for (NetworkPartitionRef networkPartition : deploymentPolicy.getNetworkPartitionRefs()) {
                     ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext
                             = clusterMonitor.getClusterContext().getNetworkPartitionCtxt(networkPartition.getId());
-
-                    try {
-                        addNewPartitionsToClusterMonitor(clusterLevelNetworkPartitionContext, networkPartition,
-                                deploymentPolicy.getDeploymentPolicyID(), clusterMonitor.getClusterContext().getServiceId());
-                    } catch (RemoteException e) {
-
-                        String message = "Connection to cloud controller failed, Cluster monitor update failed for" +
-                                " [deployment-policy] " + deploymentPolicy.getDeploymentPolicyID();
-                        log.error(message);
-                        throw new CloudControllerConnectionException(message, e);
-                    } catch (CloudControllerServiceInvalidPartitionExceptionException e) {
-
-                        String message = "Invalid partition, Cluster monitor update failed for [deployment-policy] "
-                                + deploymentPolicy.getDeploymentPolicyID();
-                        log.error(message);
-                        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();
-                        log.error(message);
-                        throw new InvalidDeploymentPolicyException(message, e);
+                    if(clusterLevelNetworkPartitionContext != null) {
+                        try {
+                            addNewPartitionsToClusterMonitor(clusterLevelNetworkPartitionContext, networkPartition,
+                                    deploymentPolicy.getDeploymentPolicyID(), clusterMonitor.getClusterContext().getServiceId());
+                        } catch (RemoteException e) {
+
+                            String message = "Connection to cloud controller failed, Cluster monitor update failed for" +
+                                    " [deployment-policy] " + deploymentPolicy.getDeploymentPolicyID();
+                            log.error(message);
+                            throw new CloudControllerConnectionException(message, e);
+                        } catch (CloudControllerServiceInvalidPartitionExceptionException e) {
+
+                            String message = "Invalid partition, Cluster monitor update failed for [deployment-policy] "
+                                    + deploymentPolicy.getDeploymentPolicyID();
+                            log.error(message);
+                            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();
+                            log.error(message);
+                            throw new InvalidDeploymentPolicyException(message, e);
+                        }
+                        removeOldPartitionsFromClusterMonitor(clusterLevelNetworkPartitionContext, networkPartition);
                     }
-                    removeOldPartitionsFromClusterMonitor(clusterLevelNetworkPartitionContext, networkPartition);
                 }
             }
         }
@@ -1309,7 +1245,7 @@ public class AutoscalerServiceImpl implements AutoscalerService {
             log.error(message);
             throw new DeploymentPolicyNotExistsException(message);
         }
-        if (removableDeploymentPolicy(deploymentPolicyID)) {
+        if (AutoscalerUtil.removableDeploymentPolicy(deploymentPolicyID)) {
             PolicyManager.getInstance().removeDeploymentPolicy(deploymentPolicyID);
         } else {
             throw new UnremovablePolicyException("This deployment policy cannot be removed, since it is used in an " +

http://git-wip-us.apache.org/repos/asf/stratos/blob/729ef7ab/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
index 2f78fe7..db43650 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
@@ -937,7 +937,87 @@ public class AutoscalerUtil {
         }
     }
 
-    public void updateMonitors() {
+    /**
+     * Validate the Auto Scalar policy removal
+     *
+     * @param autoscalePolicyId Auto Scalar policy id boolean
+     * @return
+     */
+    public static boolean removableAutoScalerPolicy(String autoscalePolicyId) {
+        Collection<ApplicationContext> applicationContexts = AutoscalerContext.getInstance().
+                getApplicationContexts();
+        for (ApplicationContext applicationContext : applicationContexts) {
+            if(applicationContext.getComponents().getCartridgeContexts() != null) {
+                for(CartridgeContext cartridgeContext : applicationContext.getComponents().
+                        getCartridgeContexts()) {
+                    if(autoscalePolicyId.equals(cartridgeContext.getSubscribableInfoContext().
+                            getAutoscalingPolicy())) {
+                        return false;
+                    }
+                }
+            }
+
+            if(applicationContext.getComponents().getGroupContexts() != null) {
+                return findAutoscalingPolicyInGroup(applicationContext.getComponents().getGroupContexts(),
+                        autoscalePolicyId);
+            }
+        }
+        return true;
+    }
+
+    public static boolean findAutoscalingPolicyInGroup(GroupContext[] groupContexts,
+                                                String autoscalePolicyId) {
+        for(GroupContext groupContext : groupContexts) {
+            if(groupContext.getCartridgeContexts() != null) {
+                for(CartridgeContext cartridgeContext : groupContext.getCartridgeContexts()) {
+                    if(autoscalePolicyId.equals(cartridgeContext.getSubscribableInfoContext().
+                            getAutoscalingPolicy())) {
+                        return false;
+                    }
+                }
+
+            }
+            if(groupContext.getGroupContexts() != null) {
+                return findAutoscalingPolicyInGroup(groupContext.getGroupContexts(),
+                        autoscalePolicyId);
+            }
+        }
+        return true;
+    }
+
+
+    /**
+     * Validate the deployment policy removal
+     *
+     * @param deploymentPolicyId
+     * @return
+     */
+    public static boolean removableDeploymentPolicy(String deploymentPolicyId) {
+        boolean canRemove = true;
+        Map<String, Application> applications = ApplicationHolder.getApplications().getApplications();
+        for (Application application : applications.values()) {
+            List<String> deploymentPolicyIdsReferredInApplication = AutoscalerUtil.
+                    getDeploymentPolicyIdsReferredInApplication(application.getUniqueIdentifier());
+            for (String deploymentPolicyIdInApp : deploymentPolicyIdsReferredInApplication) {
+                if (deploymentPolicyId.equals(deploymentPolicyIdInApp)) {
+                    canRemove = false;
+                }
+            }
+        }
+        return canRemove;
+    }
+
+    public static void readApplicationContextsFromRegistry() {
+        String[] resourcePaths = RegistryManager.getInstance().getApplicationContextResourcePaths();
+        if ((resourcePaths == null) || (resourcePaths.length == 0)) {
+            return;
+        }
 
+        for (String resourcePath : resourcePaths) {
+            ApplicationContext applicationContext = RegistryManager.getInstance().
+                    getApplicationContextByResourcePath(resourcePath);
+            AutoscalerContext.getInstance().addApplicationContext( applicationContext);
+        }
     }
+
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/729ef7ab/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/AutoscalerUtilTest.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/AutoscalerUtilTest.java b/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/AutoscalerUtilTest.java
index 3706fd4..2f65281 100644
--- a/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/AutoscalerUtilTest.java
+++ b/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/AutoscalerUtilTest.java
@@ -19,9 +19,16 @@
 
 package org.apache.stratos.autoscaler;
 
+import org.apache.stratos.autoscaler.applications.pojo.*;
+import org.apache.stratos.autoscaler.context.AutoscalerContext;
 import org.apache.stratos.autoscaler.util.AutoscalerUtil;
+import org.apache.stratos.autoscaler.util.ServiceReferenceHolder;
+import org.apache.stratos.common.clustering.impl.HazelcastDistributedObjectProvider;
 import org.junit.Test;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import static org.junit.Assert.assertEquals;
 
 /**
@@ -68,4 +75,62 @@ public class AutoscalerUtilTest {
         tenantRange = AutoscalerUtil.findTenantRange(tenantId, null);
         assertEquals(tenantRange, "*");
     }
+
+    @Test
+    public void testRemovalOfAutoscalingPolicy() {
+        List<CartridgeContext> cartridgeContexts = new ArrayList<CartridgeContext>();
+        for(int i = 0; i < 12; i++) {
+            CartridgeContext cartridgeContext = new CartridgeContext();
+            SubscribableInfoContext subscribableContext = new SubscribableInfoContext();
+            subscribableContext.setAlias("cart-" + i);
+            subscribableContext.setDeploymentPolicy("dep-" + i);
+            subscribableContext.setAutoscalingPolicy("auto-" + i);
+            cartridgeContext.setSubscribableInfoContext(subscribableContext);
+            cartridgeContexts.add(cartridgeContext);
+        }
+        List<GroupContext> groupContextList = new ArrayList<GroupContext>();
+        for(int i = 0; i < 5; i++) {
+            GroupContext groupContext = new GroupContext();
+            groupContext.setAlias("group-" + i);
+            CartridgeContext[] cartridgeContexts1 = new CartridgeContext[2];
+            cartridgeContexts1[0] = cartridgeContexts.get(i);
+            cartridgeContexts1[1] = cartridgeContexts.get(i+5);
+
+            groupContext.setCartridgeContexts(cartridgeContexts1);
+            groupContextList.add(groupContext);
+        }
+
+        //Application-1
+        ApplicationContext applicationContext = new ApplicationContext();
+        applicationContext.setApplicationId("application-1");
+        ComponentContext componentContext = new ComponentContext();
+        CartridgeContext[] cartridgeContexts1 = new CartridgeContext[2];
+        cartridgeContexts1[0] = cartridgeContexts.get(10);
+        cartridgeContexts1[1] = cartridgeContexts.get(11);
+        componentContext.setCartridgeContexts(cartridgeContexts1);
+        GroupContext[] groupContexts = new GroupContext[groupContextList.size()];
+        componentContext.setGroupContexts(groupContextList.toArray(groupContexts));
+        applicationContext.setComponents(componentContext);
+
+        ServiceReferenceHolder holder = ServiceReferenceHolder.getInstance();
+        holder.setDistributedObjectProvider(new HazelcastDistributedObjectProvider());
+
+        AutoscalerContext.getInstance().addApplicationContext(applicationContext);
+
+
+        boolean canRemove;
+
+        canRemove = AutoscalerUtil.removableAutoScalerPolicy("test");
+        assertEquals(canRemove, true);
+
+        for(int i = 0; i < 12; i ++) {
+            canRemove = AutoscalerUtil.removableAutoScalerPolicy("auto-" + i);
+            assertEquals(canRemove, false);
+
+        }
+    }
+
+    public void testRemovalOfDeploymentPolicy() {
+
+    }
 }