Repository: stratos
Updated Branches:
  refs/heads/tenant-isolation 01eafd733 -> eea557e58


Adding GroupTerminationBehaviorTest class


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

Branch: refs/heads/tenant-isolation
Commit: 68a483abaab33a8b09e38d8e52d5908d6e352eda
Parents: 01eafd7
Author: Gayan Gunarathne <[email protected]>
Authored: Sun Aug 16 16:57:16 2015 +0530
Committer: Gayan Gunarathne <[email protected]>
Committed: Sun Aug 16 16:57:16 2015 +0530

----------------------------------------------------------------------
 .../integration/tests/TopologyHandler.java      | 112 +++++-
 .../GroupTerminationBehaviorTest.java           | 351 +++++++++++++++++++
 2 files changed, 456 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/68a483ab/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/TopologyHandler.java
----------------------------------------------------------------------
diff --git 
a/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/TopologyHandler.java
 
b/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/TopologyHandler.java
index e6764dc..0a0d80b 100644
--- 
a/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/TopologyHandler.java
+++ 
b/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/TopologyHandler.java
@@ -33,9 +33,8 @@ 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.event.Event;
-import 
org.apache.stratos.messaging.event.application.GroupInstanceCreatedEvent;
-import org.apache.stratos.messaging.event.topology.ClusterInstanceCreatedEvent;
-import org.apache.stratos.messaging.event.topology.MemberTerminatedEvent;
+import org.apache.stratos.messaging.event.application.*;
+import org.apache.stratos.messaging.event.topology.*;
 import org.apache.stratos.messaging.listener.application.*;
 import org.apache.stratos.messaging.listener.topology.*;
 import 
org.apache.stratos.messaging.message.receiver.application.ApplicationManager;
@@ -69,8 +68,10 @@ public class TopologyHandler {
     public static TopologyHandler topologyHandler;
     private Map<String, Map<String, Long>> terminatedNodes = new 
ConcurrentHashMap<String, Map<String, Long>>();
     private Map<String, Long> terminatedMembers = new 
ConcurrentHashMap<String, Long>();
-    private Map<String, Map<String, Long>> createdNodes = new 
ConcurrentHashMap<String, Map<String, Long>>();
-    private Map<String, Map<String, Long>> activeNodes = new 
ConcurrentHashMap<String, Map<String, Long>>();
+    private Map<String, Long> terminatingMembers = new 
ConcurrentHashMap<String, Long>();
+    private Map<String, Long> createdMembers = new ConcurrentHashMap<String, 
Long>();
+    private Map<String, Long> inActiveMembers = new ConcurrentHashMap<String, 
Long>();
+    private Map<String, Long> activateddMembers = new 
ConcurrentHashMap<String, Long>();
 
     private TopologyHandler() {
         // Set jndi.properties.dir system property for initializing event 
receivers
@@ -81,6 +82,7 @@ public class TopologyHandler {
         assertApplicationTopologyInitialized();
         assertTopologyInitialized();
         addTopologyEventListeners();
+        addApplicationEventListeners();
     }
 
     public static TopologyHandler getInstance() {
@@ -532,22 +534,118 @@ public class TopologyHandler {
         applicationsEventReceiver.addEventListener(new 
GroupInstanceActivatedEventListener() {
             @Override
             protected void onEvent(Event event) {
-
+                GroupInstanceActivatedEvent event1 = 
(GroupInstanceActivatedEvent) event;
+                String appId = event1.getAppId();
+                String groupId = event1.getGroupId();
+                String instanceId = event1.getInstanceId();
+                String id = generateId(appId, groupId, instanceId);
+                getActivateddMembers().put(id, System.currentTimeMillis());
             }
         });
 
         applicationsEventReceiver.addEventListener(new 
GroupInstanceInactivateEventListener() {
             @Override
             protected void onEvent(Event event) {
-
+                GroupInstanceInactivatedEvent event1 = 
(GroupInstanceInactivatedEvent) event;
+                String appId = event1.getAppId();
+                String groupId = event1.getGroupId();
+                String instanceId = event1.getInstanceId();
+                String id = generateId(appId, groupId, instanceId);
+                getInActiveMembers().put(id, System.currentTimeMillis());
             }
         });
 
         applicationsEventReceiver.addEventListener(new 
GroupInstanceTerminatedEventListener() {
             @Override
             protected void onEvent(Event event) {
+                GroupInstanceTerminatedEvent event1 = 
(GroupInstanceTerminatedEvent) event;
+                String appId = event1.getAppId();
+                String groupId = event1.getGroupId();
+                String instanceId = event1.getInstanceId();
+                String id = generateId(appId, groupId, instanceId);
+                getTerminatedMembers().put(id, System.currentTimeMillis());
+            }
+        });
 
+        applicationsEventReceiver.addEventListener(new 
GroupInstanceTerminatingEventListener() {
+            @Override
+            protected void onEvent(Event event) {
+                GroupInstanceTerminatingEvent event1 = 
(GroupInstanceTerminatingEvent) event;
+                String appId = event1.getAppId();
+                String groupId = event1.getGroupId();
+                String instanceId = event1.getInstanceId();
+                String id = generateId(appId, groupId, instanceId);
+                getTerminatingMembers().put(id, System.currentTimeMillis());
             }
         });
     }
+
+    public String generateId(String appId, String groupId, String instanceId) {
+        return appId + "-" + groupId + "-" + instanceId;
+    }
+
+    public String getClusterIdFromAlias(String applicationId, String alias) {
+        Application application = 
ApplicationManager.getApplications().getApplication(applicationId);
+        assertNotNull(application);
+
+        ClusterDataHolder dataHolder = 
application.getClusterDataHolderRecursivelyByAlias(alias);
+        assertNotNull(dataHolder);
+
+        return dataHolder.getClusterId();
+    }
+
+
+    public void removeMembersFromMaps(String 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)) {
+                getTerminatedMembers().remove(entry.getKey());
+            }
+        }
+    }
+
+    public Map<String, Long> getTerminatedMembers() {
+        return terminatedMembers;
+    }
+
+    public void setTerminatedMembers(Map<String, Long> terminatedMembers) {
+        this.terminatedMembers = terminatedMembers;
+    }
+
+    public Map<String, Long> getTerminatingMembers() {
+        return terminatingMembers;
+    }
+
+    public void setTerminatingMembers(Map<String, Long> terminatingMembers) {
+        this.terminatingMembers = terminatingMembers;
+    }
+
+    public Map<String, Long> getCreatedMembers() {
+        return createdMembers;
+    }
+
+    public void setCreatedMembers(Map<String, Long> createdMembers) {
+        this.createdMembers = createdMembers;
+    }
+
+    public Map<String, Long> getInActiveMembers() {
+        return inActiveMembers;
+    }
+
+    public void setInActiveMembers(Map<String, Long> inActiveMembers) {
+        this.inActiveMembers = inActiveMembers;
+    }
+
+    public Map<String, Long> getActivateddMembers() {
+        return activateddMembers;
+    }
+
+    public void setActivateddMembers(Map<String, Long> activateddMembers) {
+        this.activateddMembers = activateddMembers;
+    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/68a483ab/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/application/GroupTerminationBehaviorTest.java
----------------------------------------------------------------------
diff --git 
a/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/application/GroupTerminationBehaviorTest.java
 
b/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/application/GroupTerminationBehaviorTest.java
index b86d674..a62abc5 100644
--- 
a/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/application/GroupTerminationBehaviorTest.java
+++ 
b/products/stratos/modules/integration/src/test/java/org/apache/stratos/integration/tests/application/GroupTerminationBehaviorTest.java
@@ -18,10 +18,361 @@
  */
 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.cartridge.CartridgeGroupBean;
+import org.apache.stratos.common.beans.policy.deployment.ApplicationPolicyBean;
+import org.apache.stratos.integration.tests.RestConstants;
 import org.apache.stratos.integration.tests.StratosTestServerManager;
+import org.apache.stratos.integration.tests.TopologyHandler;
+import org.apache.stratos.messaging.domain.application.Application;
+import org.apache.stratos.messaging.domain.application.ApplicationStatus;
+import org.apache.stratos.messaging.domain.application.Group;
+import 
org.apache.stratos.messaging.message.receiver.application.ApplicationManager;
+import org.testng.annotations.Test;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import static junit.framework.Assert.*;
 
 /**
  * Handling the termination behavior of the group
  */
 public class GroupTerminationBehaviorTest extends StratosTestServerManager {
+    private static final Log log = 
LogFactory.getLog(GroupTerminationBehaviorTest.class);
+    private static final String RESOURCES_PATH = 
"/group-termination-behavior-test";
+    private static final int GROUP_INACTIVE_TIMEOUT = 300000;
+
+    @Test
+    public void testTerminationBehavior() {
+        try {
+            log.info("-------------------------------Started application 
termination behavior test case-------------------------------");
+
+            String autoscalingPolicyId = 
"autoscaling-policy-group-termination-behavior-test";
+            TopologyHandler topologyHandler = TopologyHandler.getInstance();
+
+            boolean addedScalingPolicy = 
restClientTenant1.addEntity(RESOURCES_PATH + 
RestConstants.AUTOSCALING_POLICIES_PATH
+                            + "/" + autoscalingPolicyId + ".json",
+                    RestConstants.AUTOSCALING_POLICIES, 
RestConstants.AUTOSCALING_POLICIES_NAME);
+            assertTrue(addedScalingPolicy);
+
+            boolean addedC1 = restClientTenant1.addEntity(RESOURCES_PATH + 
RestConstants.CARTRIDGES_PATH + "/" + "c1-group-termination-behavior-test.json",
+                    RestConstants.CARTRIDGES, RestConstants.CARTRIDGES_NAME);
+            assertTrue(addedC1);
+
+            boolean addedC2 = restClientTenant1.addEntity(RESOURCES_PATH + 
RestConstants.CARTRIDGES_PATH + "/" + "c2-group-termination-behavior-test.json",
+                    RestConstants.CARTRIDGES, RestConstants.CARTRIDGES_NAME);
+            assertTrue(addedC2);
+
+            boolean addedC3 = restClientTenant1.addEntity(RESOURCES_PATH + 
RestConstants.CARTRIDGES_PATH + "/" + "c3-group-termination-behavior-test.json",
+                    RestConstants.CARTRIDGES, RestConstants.CARTRIDGES_NAME);
+            assertTrue(addedC3);
+
+            boolean addedC4 = restClientTenant1.addEntity(RESOURCES_PATH + 
RestConstants.CARTRIDGES_PATH + "/" + "c4-group-termination-behavior-test.json",
+                    RestConstants.CARTRIDGES, RestConstants.CARTRIDGES_NAME);
+            assertTrue(addedC4);
+
+            boolean addedG1 = restClientTenant1.addEntity(RESOURCES_PATH + 
RestConstants.CARTRIDGE_GROUPS_PATH +
+                            "/" + 
"cartridge-groups-group-termination-behavior-test.json", 
RestConstants.CARTRIDGE_GROUPS,
+                    RestConstants.CARTRIDGE_GROUPS_NAME);
+            assertTrue(addedG1);
+
+            CartridgeGroupBean beanG1 = (CartridgeGroupBean) restClientTenant1.
+                    getEntity(RestConstants.CARTRIDGE_GROUPS, 
"g-sc-G4-group-termination-behavior-test",
+                            CartridgeGroupBean.class, 
RestConstants.CARTRIDGE_GROUPS_NAME);
+            assertEquals(beanG1.getName(), 
"g-sc-G4-group-termination-behavior-test");
+
+            boolean addedN1 = restClientTenant1.addEntity(RESOURCES_PATH + 
RestConstants.NETWORK_PARTITIONS_PATH + "/" +
+                            
"network-partition-group-termination-behavior-test-1.json",
+                    RestConstants.NETWORK_PARTITIONS, 
RestConstants.NETWORK_PARTITIONS_NAME);
+            assertTrue(addedN1);
+
+            boolean addedDep = restClientTenant1.addEntity(RESOURCES_PATH + 
RestConstants.DEPLOYMENT_POLICIES_PATH + "/" +
+                            
"deployment-policy-group-termination-behavior-test.json",
+                    RestConstants.DEPLOYMENT_POLICIES, 
RestConstants.DEPLOYMENT_POLICIES_NAME);
+            assertTrue(addedDep);
+
+            boolean added = restClientTenant1.addEntity(RESOURCES_PATH + 
RestConstants.APPLICATIONS_PATH + "/" +
+                            "group-termination-behavior-test.json", 
RestConstants.APPLICATIONS,
+                    RestConstants.APPLICATIONS_NAME);
+            assertTrue(added);
+
+            ApplicationBean bean = (ApplicationBean) 
restClientTenant1.getEntity(RestConstants.APPLICATIONS,
+                    "group-termination-behavior-test", ApplicationBean.class, 
RestConstants.APPLICATIONS_NAME);
+            assertEquals(bean.getApplicationId(), 
"group-termination-behavior-test");
+
+            boolean addAppPolicy = restClientTenant1.addEntity(RESOURCES_PATH 
+ RestConstants.APPLICATION_POLICIES_PATH + "/" +
+                            
"application-policy-group-termination-behavior-test.json", 
RestConstants.APPLICATION_POLICIES,
+                    RestConstants.APPLICATION_POLICIES_NAME);
+            assertTrue(addAppPolicy);
+
+            ApplicationPolicyBean policyBean = (ApplicationPolicyBean) 
restClientTenant1.getEntity(
+                    RestConstants.APPLICATION_POLICIES,
+                    "application-policy-group-termination-behavior-test", 
ApplicationPolicyBean.class,
+                    RestConstants.APPLICATION_POLICIES_NAME);
+
+            //deploy the application
+            String resourcePath = RestConstants.APPLICATIONS + "/" + 
"group-termination-behavior-test" +
+                    RestConstants.APPLICATIONS_DEPLOY + "/" + 
"application-policy-group-termination-behavior-test";
+            boolean deployed = restClientTenant1.deployEntity(resourcePath,
+                    RestConstants.APPLICATIONS_NAME);
+            assertTrue(deployed);
+
+            //Application active handling
+            topologyHandler.assertApplicationStatus(bean.getApplicationId(),
+                    ApplicationStatus.Active,tenant1Id);
+            String groupId = 
topologyHandler.generateId(bean.getApplicationId(),
+                    "g-G1-1x0-group-termination-behavior-test", 
bean.getApplicationId() + "-1");
+
+            String clusterIdC3 = topologyHandler.
+                    getClusterIdFromAlias(bean.getApplicationId(),
+                            "c3-1x0-group-termination-behavior-test");
+
+            String clusterIdC4 = topologyHandler.
+                    getClusterIdFromAlias(bean.getApplicationId(),
+                            "c4-1x0-group-termination-behavior-test");
+
+            String clusterIdC2 = topologyHandler.
+                    getClusterIdFromAlias(bean.getApplicationId(),
+                            "c2-1x0-group-termination-behavior-test");
+
+            assertCreationOfNodes(groupId, clusterIdC2);
+            assertCreationOfNodes(clusterIdC3, clusterIdC4);
+
+            //Group active handling
+            
topologyHandler.assertGroupActivation(bean.getApplicationId(),tenant1Id);
+
+            //Cluster active handling
+            
topologyHandler.assertClusterActivation(bean.getApplicationId(),tenant1Id);
+
+            List<String> clusterIds = new ArrayList<String>();
+            clusterIds.add(clusterIdC3);
+            clusterIds.add(clusterIdC4);
+            clusterIds.add(clusterIdC2);
+
+            assertGroupInactive(groupId, clusterIdC3);
+
+            assertTerminatingOfNodes(groupId, clusterIds);
+
+            assertTerminationOfNodes(groupId, clusterIds);
+
+            //Application active handling
+            topologyHandler.assertApplicationStatus(bean.getApplicationId(),
+                    ApplicationStatus.Active,tenant1Id);
+
+            assertCreationOfNodes(groupId, clusterIdC2);
+            assertCreationOfNodes(clusterIdC3, clusterIdC4);
+
+            //Group active handling
+            
topologyHandler.assertGroupActivation(bean.getApplicationId(),tenant1Id);
+
+            //Cluster active handling
+            
topologyHandler.assertClusterActivation(bean.getApplicationId(),tenant1Id);
+
+            boolean removedGroup = 
restClientTenant1.removeEntity(RestConstants.CARTRIDGE_GROUPS,
+                    "g-sc-G4-group-termination-behavior-test",
+                    RestConstants.CARTRIDGE_GROUPS_NAME);
+            assertFalse(removedGroup);
+
+            boolean removedAuto = 
restClientTenant1.removeEntity(RestConstants.AUTOSCALING_POLICIES,
+                    autoscalingPolicyId, 
RestConstants.AUTOSCALING_POLICIES_NAME);
+            assertFalse(removedAuto);
+
+            boolean removedNet = 
restClientTenant1.removeEntity(RestConstants.NETWORK_PARTITIONS,
+                    "network-partition-group-termination-behavior-test-1",
+                    RestConstants.NETWORK_PARTITIONS_NAME);
+            //Trying to remove the used network partition
+            assertFalse(removedNet);
+
+            boolean removedDep = 
restClientTenant1.removeEntity(RestConstants.DEPLOYMENT_POLICIES,
+                    "deployment-policy-group-termination-behavior-test", 
RestConstants.DEPLOYMENT_POLICIES_NAME);
+            assertFalse(removedDep);
+
+            //Un-deploying the application
+            String resourcePathUndeploy = RestConstants.APPLICATIONS + "/" + 
"group-termination-behavior-test" +
+                    RestConstants.APPLICATIONS_UNDEPLOY;
+
+            boolean unDeployed = 
restClientTenant1.undeployEntity(resourcePathUndeploy,
+                    RestConstants.APPLICATIONS_NAME);
+            assertTrue(unDeployed);
+
+            boolean undeploy = 
topologyHandler.assertApplicationUndeploy("group-termination-behavior-test",tenant1Id);
+            if (!undeploy) {
+                //Need to forcefully undeploy the application
+                log.info("Force undeployment is going to start for the 
[application] " + "group-termination-behavior-test");
+
+                restClientTenant1.undeployEntity(RestConstants.APPLICATIONS + 
"/" + "group-termination-behavior-test" +
+                        RestConstants.APPLICATIONS_UNDEPLOY + "?force=true", 
RestConstants.APPLICATIONS);
+
+                boolean forceUndeployed = 
topologyHandler.assertApplicationUndeploy("group-termination-behavior-test",tenant1Id);
+                assertTrue(String.format("Forceful undeployment failed for the 
application %s",
+                        "group-termination-behavior-test"), forceUndeployed);
+
+            }
+
+            boolean removed = 
restClientTenant1.removeEntity(RestConstants.APPLICATIONS, 
"group-termination-behavior-test",
+                    RestConstants.APPLICATIONS_NAME);
+            assertTrue(removed);
+
+            ApplicationBean beanRemoved = (ApplicationBean) 
restClientTenant1.getEntity(RestConstants.APPLICATIONS,
+                    "group-termination-behavior-test", ApplicationBean.class, 
RestConstants.APPLICATIONS_NAME);
+            assertNull(beanRemoved);
+
+            removedGroup = 
restClientTenant1.removeEntity(RestConstants.CARTRIDGE_GROUPS,
+                    "g-sc-G4-group-termination-behavior-test",
+                    RestConstants.CARTRIDGE_GROUPS_NAME);
+            assertTrue(removedGroup);
+
+            boolean removedC1 = 
restClientTenant1.removeEntity(RestConstants.CARTRIDGES, 
"c1-group-termination-behavior-test",
+                    RestConstants.CARTRIDGES_NAME);
+            assertTrue(removedC1);
+
+            boolean removedC2 = 
restClientTenant1.removeEntity(RestConstants.CARTRIDGES, 
"c2-group-termination-behavior-test",
+                    RestConstants.CARTRIDGES_NAME);
+            assertTrue(removedC2);
+
+            boolean removedC3 = 
restClientTenant1.removeEntity(RestConstants.CARTRIDGES, 
"c3-group-termination-behavior-test",
+                    RestConstants.CARTRIDGES_NAME);
+            assertTrue(removedC3);
+
+            boolean removedC4 = 
restClientTenant1.removeEntity(RestConstants.CARTRIDGES, 
"c4-group-termination-behavior-test",
+                    RestConstants.CARTRIDGES_NAME);
+            assertTrue(removedC4);
+
+            removedAuto = 
restClientTenant1.removeEntity(RestConstants.AUTOSCALING_POLICIES,
+                    autoscalingPolicyId, 
RestConstants.AUTOSCALING_POLICIES_NAME);
+            assertTrue(removedAuto);
+
+            removedDep = 
restClientTenant1.removeEntity(RestConstants.DEPLOYMENT_POLICIES,
+                    "deployment-policy-group-termination-behavior-test", 
RestConstants.DEPLOYMENT_POLICIES_NAME);
+            assertTrue(removedDep);
+
+            removedNet = 
restClientTenant1.removeEntity(RestConstants.NETWORK_PARTITIONS,
+                    "network-partition-group-termination-behavior-test-1", 
RestConstants.NETWORK_PARTITIONS_NAME);
+            assertFalse(removedNet);
+
+            boolean removeAppPolicy = 
restClientTenant1.removeEntity(RestConstants.APPLICATION_POLICIES,
+                    "application-policy-group-termination-behavior-test", 
RestConstants.APPLICATION_POLICIES_NAME);
+            assertTrue(removeAppPolicy);
+
+            removedNet = 
restClientTenant1.removeEntity(RestConstants.NETWORK_PARTITIONS,
+                    "network-partition-group-termination-behavior-test-1", 
RestConstants.NETWORK_PARTITIONS_NAME);
+            assertTrue(removedNet);
+
+            log.info("-------------------------------Ended application 
termination behavior test case-------------------------------");
+
+        } catch (Exception e) {
+            log.error("An error occurred while handling  application 
termination behavior", e);
+            assertTrue("An error occurred while handling  application 
termination behavior", false);
+        }
+    }
+
+    private void assertGroupInactive(String groupId, String clusterId) {
+        long startTime = System.currentTimeMillis();
+        Map<String, Long> inActiveMap = 
TopologyHandler.getInstance().getInActiveMembers();
+
+        while(!inActiveMap.containsKey(clusterId)) {
+            try {
+                Thread.sleep(1000);
+            } catch (InterruptedException ignore) {
+            }
+            inActiveMap = TopologyHandler.getInstance().getInActiveMembers();
+            if ((System.currentTimeMillis() - startTime) > 
GROUP_INACTIVE_TIMEOUT) {
+                break;
+            }
+        }
+        assertTrue(inActiveMap.containsKey(clusterId));
+
+        while(!inActiveMap.containsKey(groupId)) {
+            try {
+                Thread.sleep(1000);
+            } catch (InterruptedException ignore) {
+            }
+            inActiveMap = TopologyHandler.getInstance().getInActiveMembers();
+            if ((System.currentTimeMillis() - startTime) > 
GROUP_INACTIVE_TIMEOUT) {
+                break;
+            }
+        }
+        assertTrue(inActiveMap.containsKey(groupId));
+
+    }
+
+    private void assertTerminatingOfNodes(String groupId, List<String> 
clusterIds) {
+        Map<String, Long> terminatingMembers = 
TopologyHandler.getInstance().getTerminatingMembers();
+        for(String clusterId : clusterIds) {
+            long startTime = System.currentTimeMillis();
+            while(!terminatingMembers.containsKey(clusterId)) {
+                try {
+                    Thread.sleep(1000);
+                } catch (InterruptedException ignore) {
+                }
+                terminatingMembers = 
TopologyHandler.getInstance().getTerminatingMembers();
+                if ((System.currentTimeMillis() - startTime) > 
GROUP_INACTIVE_TIMEOUT) {
+                    break;
+                }
+            }
+            assertTrue(terminatingMembers.containsKey(groupId));
+        }
+        long startTime = System.currentTimeMillis();
+        while(!terminatingMembers.containsKey(groupId)) {
+            try {
+                Thread.sleep(1000);
+            } catch (InterruptedException ignore) {
+            }
+            terminatingMembers = 
TopologyHandler.getInstance().getTerminatingMembers();
+            if ((System.currentTimeMillis() - startTime) > 
GROUP_INACTIVE_TIMEOUT) {
+                break;
+            }
+        }
+        assertTrue(terminatingMembers.containsKey(groupId));
+
+    }
+
+    private void assertTerminationOfNodes(String groupId, List<String> 
clusterIds) {
+        long startTime = System.currentTimeMillis();
+        Map<String, Long> terminatedMembers = 
TopologyHandler.getInstance().getTerminatedMembers();
+
+        for(String clusterId : clusterIds) {
+            while(!terminatedMembers.containsKey(clusterId)) {
+                try {
+                    Thread.sleep(1000);
+                } catch (InterruptedException ignore) {
+                }
+                terminatedMembers = 
TopologyHandler.getInstance().getTerminatedMembers();
+                if ((System.currentTimeMillis() - startTime) > 
GROUP_INACTIVE_TIMEOUT) {
+                    break;
+                }
+            }
+            assertTrue(terminatedMembers.containsKey(clusterId));
+        }
+
+        while(!terminatedMembers.containsKey(groupId)) {
+            try {
+                Thread.sleep(1000);
+            } catch (InterruptedException ignore) {
+            }
+            terminatedMembers = 
TopologyHandler.getInstance().getTerminatedMembers();
+            if ((System.currentTimeMillis() - startTime) > 
GROUP_INACTIVE_TIMEOUT) {
+                break;
+            }
+        }
+
+        assertTrue(terminatedMembers.containsKey(groupId));
+    }
+
+    private void assertCreationOfNodes(String firstNodeId, String 
secondNodeId) {
+        //group1 started first, then cluster started later
+
+        Map<String, Long> activeMembers = 
TopologyHandler.getInstance().getActivateddMembers();
+        Map<String, Long> createdMembers = 
TopologyHandler.getInstance().getCreatedMembers();
+        //Active member should be available at the time cluster is started to 
create.
+        assertTrue(activeMembers.containsKey(firstNodeId));
+        assertTrue(createdMembers.containsKey(secondNodeId));
+
+        assertTrue(createdMembers.get(secondNodeId) > 
activeMembers.get(firstNodeId));
+    }
 }
+

Reply via email to