Package org.apache.geronimo.messaging.cluster

Source Code of org.apache.geronimo.messaging.cluster.ClusterHBTest

/**
*
* Copyright 2004 The Apache Software Foundation
*
*  Licensed 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.geronimo.messaging.cluster;

import java.net.InetAddress;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.apache.geronimo.gbean.GBeanLifecycleController;
import org.apache.geronimo.messaging.MockNode;
import org.apache.geronimo.messaging.NodeInfo;
import org.apache.geronimo.pool.ClockPool;

import junit.framework.TestCase;

/**
*
* @version $Rev: 46019 $ $Date: 2004-09-14 04:56:06 -0500 (Tue, 14 Sep 2004) $
*/
public class ClusterHBTest
    extends TestCase
{

    private ClockPool cp;
    private long delay;
    private int nbMissed;
   
    private MockNode node1;
    private ClusterHBSender sender1;

    private MockNode node2;
    private ClusterHBSender sender2;
   
    private MockCluster cluster;
   
    private ClusterHBReceiver receiver;
   
    protected void setUp() throws Exception {
        cp = new ClockPool();
        cp.setPoolName("CP");
        cp.doStart();

        delay = 500;
        nbMissed = 2;

        InetAddress groupAddress = InetAddress.getByName("235.0.0.1");
        int port = 6667;

        InetAddress localhost = InetAddress.getLocalHost();
       
        ClusterInfo clusterInfo = new ClusterInfo(groupAddress, port);
        node1 = new MockNode();
        node1.setNodeInfo(new NodeInfo("node1", localhost, 1234));
        sender1 =
            new ClusterHBSender(node1, new MockCluster(clusterInfo), cp, delay,
                new MyMockController());
       
        node2 = new MockNode();
        node2.setNodeInfo(new NodeInfo("node2", localhost, 1234));
        sender2 =
            new ClusterHBSender(node2, new MockCluster(clusterInfo), cp, delay,
                new MyMockController());
       
        cluster = new MockCluster(clusterInfo);
        receiver = new ClusterHBReceiver(cluster, cp, nbMissed);
    }

    protected void tearDown() throws Exception {
        receiver.doStop();
        cp.doStop();
    }
   
    public void testRegister() throws Exception {
        sender1.doStart();
        receiver.doStart();

        Thread.sleep(delay * 2);
        assertEquals(1, cluster.nodes.size());
        assertEquals(node1.getNodeInfo(), cluster.nodes.get(0));

        sender2.doStart();

        Thread.sleep(delay * 2);
        assertEquals(2, cluster.nodes.size());
        assertEquals(node2.getNodeInfo(), cluster.nodes.get(1));

        sender2.doStop();
        sender1.doStop();
    }
   
    public void testUnregister() throws Exception {
        sender1.doStart();
        sender2.doStart();
        receiver.doStart();

        Thread.sleep(delay * 2);

        assertEquals(2, cluster.nodes.size());

        sender1.doStop();

        Thread.sleep(delay * (nbMissed + 1) );
        assertEquals(1, cluster.nodes.size());
       
        sender2.doStop();
       
        Thread.sleep(delay * (nbMissed + 1) );
        assertEquals(0, cluster.nodes.size());
    }
   
    private class MyMockController implements GBeanLifecycleController {
        public int getState() {
            return 0;
        }
        public void start() throws Exception {
        }
        public void stop() throws Exception {
        }
        public void fail() {
        }
    }
   
    private class MockCluster implements Cluster {
        private List nodes = Collections.synchronizedList(new ArrayList());
        private final ClusterInfo info;
        private MockCluster(ClusterInfo anInfo) {
            info = anInfo;
        }
        public Set getMembers() {
            return new HashSet(nodes);
        }
        public void addMember(NodeInfo aNode) {
            nodes.add(aNode);
        }
        public void removeMember(NodeInfo aNode) {
            nodes.remove(aNode);
        }
        public void addListener(ClusterEventListener aListener) {
        }
        public void removeListener(ClusterEventListener aListener) {
        }
        public ClusterInfo getClusterInfo() {
            return info;
        }
    }
   
}
TOP

Related Classes of org.apache.geronimo.messaging.cluster.ClusterHBTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.