Package org.goldenorb.server

Source Code of org.goldenorb.server.TestLeaderGroupMemberMonitor

package org.goldenorb.server;

import java.util.Map;
import java.util.Set;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.CyclicBarrier;

import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.ZooKeeper;
import org.goldenorb.client.OrbTrackerMemberData;
import org.goldenorb.conf.OrbConfiguration;
import org.goldenorb.jet.OrbTrackerMember;
import org.goldenorb.zookeeper.OrbZKFailure;
import org.goldenorb.zookeeper.ZookeeperUtils;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

import static org.junit.Assert.assertTrue;

public class TestLeaderGroupMemberMonitor {
 
  private static ZooKeeper zk;
  private static String leaderGroupPath;
 
  /**
   * Sets up zookeeper and nodes for testing.
   *
   * @throws Exception
   */
  @BeforeClass
  public static void setUpBeforeClass() throws Exception {
    OrbConfiguration orbConf = new OrbConfiguration(true);
    orbConf.setOrbZooKeeperQuorum("localhost:21810");
    zk = ZookeeperUtils.connect(orbConf.getOrbZooKeeperQuorum());
    ZookeeperUtils.tryToCreateNode(zk, "/GoldenOrb");
    ZookeeperUtils.tryToCreateNode(zk, "/GoldenOrb/Test");
    ZookeeperUtils.tryToCreateNode(zk, "/GoldenOrb/Test/OrbTrackerLeaderGroup");
    leaderGroupPath = "/GoldenOrb/Test/OrbTrackerLeaderGroup";
  }
 
  /**
   * Remove nodes used for testing
   *
   * @throws Exception
   */
  @AfterClass
  public static void tearDownAfterClass() throws Exception {
    ZookeeperUtils.recursiveDelete(zk, "/GolenOrb");
  }
 
  /**
   * Test a single change to a member node
   *
   * @throws OrbZKFailure
   * @throws InterruptedException
   */
  @Test
  public void testSingleMemberDataChange() throws OrbZKFailure, InterruptedException {
    CountDownLatch cdlatch = new CountDownLatch(1);
    TServer server = new TServer(cdlatch);
    OrbTrackerMember otm = new OrbTrackerMember();
    otm.setAvailablePartitions(1);
    otm.setHostname("TEST");
    otm.setInUsePartitions(1);
    otm.setLeader(true);
    otm.setPartitionCapacity(1);
    otm.setPort(1);
    otm.setReservedPartitions(1);
    String path = ZookeeperUtils.tryToCreateNode(zk, leaderGroupPath + "/member", otm,
      CreateMode.EPHEMERAL_SEQUENTIAL);
    new LeaderGroupMemberMonitor(path, zk, path.split("/")[3], server);
    cdlatch.await();
    Map<String,OrbTrackerMemberData> map = server.getMemberData();
    assertTrue(map.size() == 1);
    Set<String> keys = map.keySet();
    assertTrue(keys.size() == 1);
    String nodeName = "";
    for (String key : keys) {
      nodeName = key;
    }
    assertTrue(nodeName.equals(path.split("/")[3]));
    assertTrue(map.get(nodeName).getAvailablePartitions() == otm.getAvailablePartitions());
    assertTrue(map.get(nodeName).getPort() == otm.getPort());
    otm.setAvailablePartitions(9);
    cdlatch = new CountDownLatch(1);
    server.setLatcher(cdlatch);
    ZookeeperUtils.setNodeData(zk, path, otm);
    cdlatch.await();
    map = server.getMemberData();
    assertTrue(map.size() == 1);
    keys = map.keySet();
    assertTrue(keys.size() == 1);
    nodeName = "";
    for (String key : keys) {
      nodeName = key;
    }
    assertTrue(nodeName.equals(path.split("/")[3]));
    assertTrue(map.get(nodeName).getAvailablePartitions() == otm.getAvailablePartitions());
  }
 
  /**
   * Test multiple changes to a single member node
   *
   * @throws OrbZKFailure
   * @throws InterruptedException
   */
  public void testMulitpleChanges() throws OrbZKFailure, InterruptedException {
    CountDownLatch cdlatch = new CountDownLatch(1);
    TServer server = new TServer(cdlatch);
    OrbTrackerMember otm = new OrbTrackerMember();
    otm.setAvailablePartitions(1);
    otm.setHostname("TEST");
    otm.setInUsePartitions(1);
    otm.setLeader(true);
    otm.setPartitionCapacity(1);
    otm.setPort(1);
    otm.setReservedPartitions(1);
    String path = ZookeeperUtils.tryToCreateNode(zk, leaderGroupPath + "/member", otm,
      CreateMode.EPHEMERAL_SEQUENTIAL);
    new LeaderGroupMemberMonitor(path, zk, path.split("/")[3], server);
    cdlatch.await();
    Map<String,OrbTrackerMemberData> map = server.getMemberData();
    assertTrue(map.size() == 1);
    Set<String> keys = map.keySet();
    assertTrue(keys.size() == 1);
    String nodeName = "";
    for (String key : keys) {
      nodeName = key;
    }
    assertTrue(nodeName.equals(path.split("/")[3]));
    assertTrue(map.get(nodeName).getAvailablePartitions() == otm.getAvailablePartitions());
    assertTrue(map.get(nodeName).getPort() == otm.getPort());
    otm.setAvailablePartitions(9);
    cdlatch = new CountDownLatch(1);
    server.setLatcher(cdlatch);
    ZookeeperUtils.setNodeData(zk, path, otm);
    cdlatch.await();
    map = server.getMemberData();
    assertTrue(map.size() == 1);
    keys = map.keySet();
    assertTrue(keys.size() == 1);
    nodeName = "";
    for (String key : keys) {
      nodeName = key;
    }
    assertTrue(nodeName.equals(path.split("/")[3]));
    assertTrue(map.get(nodeName).getAvailablePartitions() == otm.getAvailablePartitions());
    cdlatch = new CountDownLatch(1);
    server.setLatcher(cdlatch);
    otm.setHostname("Hostname");
    ZookeeperUtils.setNodeData(zk, path, otm);
    cdlatch.await();
    map = server.getMemberData();
    assertTrue(map.size() == 1);
    keys = map.keySet();
    assertTrue(keys.size() == 1);
    nodeName = "";
    for (String key : keys) {
      nodeName = key;
    }
    assertTrue(nodeName.equals(path.split("/")[3]));
    assertTrue(map.get(nodeName).getHostname() == otm.getHostname());
    cdlatch = new CountDownLatch(1);
    server.setLatcher(cdlatch);
    otm.setHostname("Host");
    ZookeeperUtils.setNodeData(zk, path, otm);
    cdlatch.await();
    map = server.getMemberData();
    assertTrue(map.size() == 1);
    keys = map.keySet();
    assertTrue(keys.size() == 1);
    nodeName = "";
    for (String key : keys) {
      nodeName = key;
    }
    assertTrue(nodeName.equals(path.split("/")[3]));
    assertTrue(map.get(nodeName).getHostname() == otm.getHostname());
  }
 
}
TOP

Related Classes of org.goldenorb.server.TestLeaderGroupMemberMonitor

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.