[infinispan-commits] Infinispan SVN: r1701 - in trunk/client/hotrod-client/src: main/java/org/infinispan/client/hotrod/impl and 2 other directories.

infinispan-commits at lists.jboss.org infinispan-commits at lists.jboss.org
Fri Apr 16 10:29:22 EDT 2010


Author: mircea.markus
Date: 2010-04-16 10:29:21 -0400 (Fri, 16 Apr 2010)
New Revision: 1701

Added:
   trunk/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/RoundRobinBalancingIntegrationTest.java
   trunk/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/RoundRobinBalancingStrategyTest.java
Modified:
   trunk/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/RemoteCache.java
   trunk/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/RemoteCacheManager.java
   trunk/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/impl/RemoteCacheImpl.java
   trunk/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/impl/RemoteCacheSupport.java
   trunk/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/impl/transport/tcp/RoundRobinBalancingStrategy.java
   trunk/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/impl/transport/tcp/TcpTransport.java
   trunk/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/ClientConnectionPoolingTest.java
   trunk/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/ForceReturnValueTest.java
   trunk/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/HotRodServerStarter.java
   trunk/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/ServerShutdownTest.java
Log:
more tests

Modified: trunk/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/RemoteCache.java
===================================================================
--- trunk/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/RemoteCache.java	2010-04-16 12:55:16 UTC (rev 1700)
+++ trunk/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/RemoteCache.java	2010-04-16 14:29:21 UTC (rev 1701)
@@ -346,4 +346,9 @@
    public ServerStatistics stats();
 
    RemoteCache<K,V> withFlags(Flag... flags);
+
+   /**
+    * Returns the {@link org.infinispan.client.hotrod.RemoteCacheManager} that created this cache.
+    */
+   public RemoteCacheManager getRemoteCacheManager();
 }

Modified: trunk/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/RemoteCacheManager.java
===================================================================
--- trunk/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/RemoteCacheManager.java	2010-04-16 12:55:16 UTC (rev 1700)
+++ trunk/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/RemoteCacheManager.java	2010-04-16 14:29:21 UTC (rev 1701)
@@ -107,6 +107,23 @@
    }
 
    /**
+    * The given string should have the following structure: "host1:port2;host:port2...". Every host:port defines a
+    * server.
+    */
+   public RemoteCacheManager(String servers, boolean start) {
+      props = new Properties();
+      props.put(TransportFactory.CONF_HOTROD_SERVERS, servers);
+      if (start) start();
+   }
+
+   /**
+    * Same as {@link #RemoteCacheManager(String, boolean)}, with start=true.
+    */
+   public RemoteCacheManager(String servers) {
+      this(servers, true);
+   }
+
+   /**
     * Same as {@link #RemoteCacheManager(java.util.Properties)}, but it will try to lookup the config properties in
     * supplied URL.
     *
@@ -149,7 +166,8 @@
          log.info("'transport-factory' factory not specified, using " + factory);
       }
       transportFactory = (TransportFactory) VHelper.newInstance(factory);
-      transportFactory.start(props, getStaticConfiguredServers(props));
+      String servers = props.getProperty(CONF_HOTROD_SERVERS);
+      transportFactory.start(props, getStaticConfiguredServers(servers));
       hotrodMarshaller = props.getProperty("marshaller");
       if (hotrodMarshaller == null) {
          hotrodMarshaller = SerializationMarshaller.class.getName();
@@ -183,12 +201,11 @@
    private <K, V> RemoteCache<K, V> createRemoteCache(String cacheName) {
       HotrodMarshaller marshaller = (HotrodMarshaller) VHelper.newInstance(hotrodMarshaller);
       HotrodOperations hotrodOperations = new HotrodOperationsImpl(cacheName, transportFactory);
-      return new RemoteCacheImpl<K, V>(hotrodOperations, marshaller, cacheName);
+      return new RemoteCacheImpl<K, V>(hotrodOperations, marshaller, cacheName, this);
    }
 
-   private Set<InetSocketAddress> getStaticConfiguredServers(Properties props) {
+   private Set<InetSocketAddress> getStaticConfiguredServers(String servers) {
       Set<InetSocketAddress> serverAddresses = new HashSet<InetSocketAddress>();
-      String servers = props.getProperty(CONF_HOTROD_SERVERS);
       if (servers == null) {
          servers = System.getProperty(OVERRIDE_HOTROD_SERVERS);
          if (servers != null) {

Modified: trunk/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/impl/RemoteCacheImpl.java
===================================================================
--- trunk/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/impl/RemoteCacheImpl.java	2010-04-16 12:55:16 UTC (rev 1700)
+++ trunk/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/impl/RemoteCacheImpl.java	2010-04-16 14:29:21 UTC (rev 1701)
@@ -2,9 +2,11 @@
 
 import org.infinispan.client.hotrod.Flag;
 import org.infinispan.client.hotrod.RemoteCache;
+import org.infinispan.client.hotrod.RemoteCacheManager;
 import org.infinispan.client.hotrod.ServerStatistics;
 import org.infinispan.client.hotrod.Version;
 import org.infinispan.client.hotrod.VersionedValue;
+import org.infinispan.manager.CacheManager;
 import org.infinispan.util.concurrent.NotifyingFuture;
 
 import java.util.Map;
@@ -22,14 +24,21 @@
    private HotrodOperations operations;
    private HotrodMarshaller marshaller;
    private String name;
+   private RemoteCacheManager remoteCacheManager;
 
 
-   public RemoteCacheImpl(HotrodOperations operations, HotrodMarshaller marshaller, String name) {
+   public RemoteCacheImpl(HotrodOperations operations, HotrodMarshaller marshaller, String name, RemoteCacheManager rcm) {
       this.operations = operations;
       this.marshaller = marshaller;
       this.name = name;
+      this.remoteCacheManager = rcm;
    }
 
+   public RemoteCacheManager getRemoteCacheManager() {
+      return remoteCacheManager;
+   }
+
+
    @Override
    public boolean remove(K key, long version) {
       VersionedOperationResponse response = operations.removeIfUnmodified(obj2bytes(key), version, flags());

Modified: trunk/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/impl/RemoteCacheSupport.java
===================================================================
--- trunk/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/impl/RemoteCacheSupport.java	2010-04-16 12:55:16 UTC (rev 1700)
+++ trunk/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/impl/RemoteCacheSupport.java	2010-04-16 14:29:21 UTC (rev 1701)
@@ -38,7 +38,7 @@
 
    @Override
    public CacheManager getCacheManager() {
-      throw new UnsupportedOperationException();
+      throw new UnsupportedOperationException("Use getRemoteCacheManager() instead.");
    }
 
    @Override

Modified: trunk/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/impl/transport/tcp/RoundRobinBalancingStrategy.java
===================================================================
--- trunk/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/impl/transport/tcp/RoundRobinBalancingStrategy.java	2010-04-16 12:55:16 UTC (rev 1700)
+++ trunk/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/impl/transport/tcp/RoundRobinBalancingStrategy.java	2010-04-16 14:29:21 UTC (rev 1701)
@@ -5,6 +5,7 @@
 import org.infinispan.util.logging.LogFactory;
 
 import java.net.InetSocketAddress;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.locks.Lock;
@@ -27,7 +28,7 @@
    private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
    private final Lock readLock = readWriteLock.readLock();
    private final Lock writeLock = readWriteLock.writeLock();
-   private final AtomicInteger index = new AtomicInteger();
+   private final AtomicInteger index = new AtomicInteger(0);
 
    private InetSocketAddress[] servers;
 
@@ -36,6 +37,10 @@
       writeLock.lock();
       try {
          this.servers = servers.toArray(new InetSocketAddress[servers.size()]);
+         index.set(0);
+         if (log.isTraceEnabled()) {
+            log.trace("New server list is: " + Arrays.toString(this.servers) + ". Resetting index to 0");
+         }
       } finally {
          writeLock.unlock();
       }
@@ -48,7 +53,7 @@
    public InetSocketAddress nextServer() {
       readLock.lock();
       try {
-         int pos = index.incrementAndGet() % servers.length;
+         int pos = index.getAndIncrement() % servers.length;
          InetSocketAddress server = servers[pos];
          if (log.isTraceEnabled()) {
             log.trace("Retuning server: " + server);

Modified: trunk/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/impl/transport/tcp/TcpTransport.java
===================================================================
--- trunk/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/impl/transport/tcp/TcpTransport.java	2010-04-16 12:55:16 UTC (rev 1700)
+++ trunk/client/hotrod-client/src/main/java/org/infinispan/client/hotrod/impl/transport/tcp/TcpTransport.java	2010-04-16 14:29:21 UTC (rev 1701)
@@ -174,7 +174,7 @@
       return "TcpTransport{" +
             "socket=" + socket +
             ", serverAddress=" + serverAddress +
-            "} " + super.toString();
+            "} ";
    }
 
    @Override

Modified: trunk/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/ClientConnectionPoolingTest.java
===================================================================
--- trunk/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/ClientConnectionPoolingTest.java	2010-04-16 12:55:16 UTC (rev 1700)
+++ trunk/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/ClientConnectionPoolingTest.java	2010-04-16 14:29:21 UTC (rev 1701)
@@ -1,13 +1,21 @@
 package org.infinispan.client.hotrod;
 
+import org.infinispan.test.MultipleCacheManagersTest;
+
 /**
  * // TODO: Document this
  *
  * @author Mircea.Markus at jboss.com
  * @since 4.1
  */
-public class ClientConnectionPoolingTest {
+public class ClientConnectionPoolingTest extends MultipleCacheManagersTest {
 
+
+   @Override
+   protected void createCacheManagers() throws Throwable {
+      // TODO: Customise this generated block
+   }
+
    /**
     * What happens if a server goes down and after that, we try to create a connection to that server.
     */

Modified: trunk/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/ForceReturnValueTest.java
===================================================================
--- trunk/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/ForceReturnValueTest.java	2010-04-16 12:55:16 UTC (rev 1700)
+++ trunk/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/ForceReturnValueTest.java	2010-04-16 14:29:21 UTC (rev 1701)
@@ -1,33 +1,21 @@
 package org.infinispan.client.hotrod;
 
 import org.infinispan.Cache;
-import org.infinispan.client.hotrod.impl.SerializationMarshaller;
-import org.infinispan.config.Configuration;
 import org.infinispan.manager.CacheManager;
-import org.infinispan.server.core.CacheValue;
-import org.infinispan.server.hotrod.CacheKey;
 import org.infinispan.server.hotrod.HotRodServer;
-import org.infinispan.server.hotrod.test.HotRodTestingUtil;
 import org.infinispan.test.SingleCacheManagerTest;
 import org.infinispan.test.fwk.TestCacheManagerFactory;
-import org.infinispan.util.logging.Log;
-import org.infinispan.util.logging.LogFactory;
 import org.testng.annotations.AfterClass;
 import org.testng.annotations.Test;
 
-import java.util.Arrays;
-
-import static junit.framework.Assert.assertEquals;
-
 /**
  * // TODO: Document this
  *
  * @author Mircea.Markus at jboss.com
  * @since 4.1
  */
- at Test(testName = "client.hotrod.ForceReturnValueTest", groups = "functional", enabled = false, description = "TODO To be re-enabled when we have a multithreaded HotRod server impl")
+ at Test(testName = "client.hotrod.ForceReturnValueTest", groups = "functional")
 public class ForceReturnValueTest extends SingleCacheManagerTest {
-   private Cache cache;
 
    RemoteCache remoteCache;
    

Modified: trunk/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/HotRodServerStarter.java
===================================================================
--- trunk/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/HotRodServerStarter.java	2010-04-16 12:55:16 UTC (rev 1700)
+++ trunk/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/HotRodServerStarter.java	2010-04-16 14:29:21 UTC (rev 1701)
@@ -13,20 +13,13 @@
  * @since 4.1
  */
 public class HotRodServerStarter {
-   private static ThreadLocal<Integer> ports = new ThreadLocal<Integer>() {
 
-      /**
-       * This needs to be different than the one used in the server tests in order to make sure that there's no clash.
-       */
-      private AtomicInteger uniquePort = new AtomicInteger(11312);
+   /**
+    * This needs to be different than the one used in the server tests in order to make sure that there's no clash.
+    */
+   private static final AtomicInteger uniquePort = new AtomicInteger(11312);
 
-      @Override
-      protected Integer initialValue() {
-         return uniquePort.addAndGet(100);
-      }
-   };
-
    public static HotRodServer startHotRodServer(CacheManager cacheManager) {
-      return HotRodTestingUtil.startHotRodServer(cacheManager, ports.get());
+      return HotRodTestingUtil.startHotRodServer(cacheManager, uniquePort.incrementAndGet());
    }
 }

Added: trunk/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/RoundRobinBalancingIntegrationTest.java
===================================================================
--- trunk/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/RoundRobinBalancingIntegrationTest.java	                        (rev 0)
+++ trunk/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/RoundRobinBalancingIntegrationTest.java	2010-04-16 14:29:21 UTC (rev 1701)
@@ -0,0 +1,235 @@
+package org.infinispan.client.hotrod;
+
+import org.infinispan.Cache;
+import org.infinispan.client.hotrod.exceptions.TransportException;
+import org.infinispan.client.hotrod.impl.transport.tcp.RoundRobinBalancingStrategy;
+import org.infinispan.client.hotrod.impl.transport.tcp.TcpTransportFactory;
+import org.infinispan.server.hotrod.HotRodServer;
+import org.infinispan.test.MultipleCacheManagersTest;
+import org.infinispan.test.TestingUtil;
+import org.infinispan.test.fwk.TestCacheManagerFactory;
+import org.infinispan.util.logging.Log;
+import org.infinispan.util.logging.LogFactory;
+import org.testng.annotations.AfterTest;
+import org.testng.annotations.Test;
+
+import java.net.InetSocketAddress;
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.testng.AssertJUnit.assertEquals;
+
+/**
+ * // TODO: Document this
+ *
+ * @author Mircea.Markus at jboss.com
+ * @since 4.1
+ */
+ at Test(testName = "client.hotrod.RoundRobinBalancingTest")
+public class RoundRobinBalancingIntegrationTest extends MultipleCacheManagersTest {
+
+   private static Log log = LogFactory.getLog(RoundRobinBalancingIntegrationTest.class);
+
+   Cache c1;
+   Cache c2;
+   Cache c3;
+   private HotRodServer hotRodServer1;
+   private HotRodServer hotRodServer2;
+   private HotRodServer hotRodServer3;
+
+   RemoteCache<String, String> remoteCache;
+   private Cache c4;
+   private HotRodServer hotRodServer4;
+
+   @Override
+   protected void assertSupportedConfig() {
+      return;
+   }
+
+   @Override
+   protected void createCacheManagers() throws Throwable {
+      c1 = TestCacheManagerFactory.createLocalCacheManager().getCache();
+      c2 = TestCacheManagerFactory.createLocalCacheManager().getCache();
+      c3 = TestCacheManagerFactory.createLocalCacheManager().getCache();
+      registerCacheManager(c1.getCacheManager(), c2.getCacheManager(), c3.getCacheManager());
+
+      hotRodServer1 = HotRodServerStarter.startHotRodServer(c1.getCacheManager());
+      hotRodServer2 = HotRodServerStarter.startHotRodServer(c2.getCacheManager());
+      hotRodServer3 = HotRodServerStarter.startHotRodServer(c3.getCacheManager());
+
+      log.trace("Server 1 port: " + hotRodServer1.getPort());
+      log.trace("Server 2 port: " + hotRodServer2.getPort());
+      log.trace("Server 3 port: " + hotRodServer3.getPort());
+      String servers = getServersString(hotRodServer1, hotRodServer2, hotRodServer3);
+      log.trace("Server list is: " + servers);
+      RemoteCacheManager remoteCacheManager = new RemoteCacheManager(servers);
+      remoteCache = remoteCacheManager.getCache();
+   }
+
+   @AfterTest(alwaysRun = true)
+   public void tearDown() {
+      hotRodServer1.stop();
+      hotRodServer2.stop();
+      hotRodServer3.stop();
+      hotRodServer4.stop();
+
+
+      c1.getCacheManager().stop();
+      c2.getCacheManager().stop();
+      c3.getCacheManager().stop();
+      c4.getCacheManager().stop();
+   }
+
+   public void testRoundRubinLoadBalancing() {
+      remoteCache.put("k1", "v1");
+      remoteCache.put("k2", "v2");
+      remoteCache.put("k3", "v3");
+
+      assertEquals(1, c1.size());
+      assertEquals(1, c2.size());
+      assertEquals(1, c3.size());
+
+      assertEquals("v1", remoteCache.get("k1"));
+      assertEquals("v2", remoteCache.get("k2"));
+      assertEquals("v3", remoteCache.get("k3"));
+
+      remoteCache.put("k4", "v1");
+      remoteCache.put("k5", "v2");
+      remoteCache.put("k6", "v3");
+      remoteCache.put("k7", "v1");
+      remoteCache.put("k8", "v2");
+      remoteCache.put("k9", "v3");
+
+      assertEquals(3, c1.size());
+      assertEquals(3, c2.size());
+      assertEquals(3, c3.size());
+   }
+
+   @Test(dependsOnMethods = "testRoundRubinLoadBalancing")
+   public void testAddNewHotrodServer() {
+      c4 = TestCacheManagerFactory.createLocalCacheManager().getCache();
+      hotRodServer4 = HotRodServerStarter.startHotRodServer(c4.getCacheManager());
+      registerCacheManager(c4.getCacheManager());
+
+      List<InetSocketAddress> serverAddresses = new ArrayList<InetSocketAddress>();
+      serverAddresses.add(new InetSocketAddress("localhost", hotRodServer1.getPort()));
+      serverAddresses.add(new InetSocketAddress("localhost", hotRodServer2.getPort()));
+      serverAddresses.add(new InetSocketAddress("localhost", hotRodServer3.getPort()));
+      serverAddresses.add(new InetSocketAddress("localhost", hotRodServer4.getPort()));
+
+      RoundRobinBalancingStrategy balancer = getBalancer();
+      balancer.setServers(serverAddresses);
+
+      remoteCache.put("k1", "v1");
+      remoteCache.put("k2", "v2");
+      remoteCache.put("k3", "v3");
+      remoteCache.put("k4", "v4");
+
+      assertEquals(1, c1.size());
+      assertEquals(1, c2.size());
+      assertEquals(1, c3.size());
+      assertEquals(1, c4.size());
+
+      assertEquals("v1", remoteCache.get("k1"));
+      assertEquals("v2", remoteCache.get("k2"));
+      assertEquals("v3", remoteCache.get("k3"));
+      assertEquals("v4", remoteCache.get("k4"));
+
+      remoteCache.put("k5", "v2");
+      remoteCache.put("k6", "v3");
+      remoteCache.put("k7", "v1");
+      remoteCache.put("k8", "v2");
+      remoteCache.put("k9", "v3");
+      remoteCache.put("k10", "v3");
+      remoteCache.put("k11", "v3");
+      remoteCache.put("k12", "v3");
+
+      assertEquals(3, c1.size());
+      assertEquals(3, c2.size());
+      assertEquals(3, c3.size());
+      assertEquals(3, c4.size());
+   }
+
+   @Test(dependsOnMethods = "testAddNewHotrodServer")
+   public void testStopServer() {
+      remoteCache.put("k1", "v1");
+      remoteCache.put("k2", "v2");
+      remoteCache.put("k3", "v3");
+      remoteCache.put("k4", "v4");
+
+      assertEquals(1, c1.size());
+      assertEquals(1, c2.size());
+      assertEquals(1, c3.size());
+      assertEquals(1, c4.size());
+
+      assertEquals("v1", remoteCache.get("k1"));
+      assertEquals("v2", remoteCache.get("k2"));
+      assertEquals("v3", remoteCache.get("k3"));
+      assertEquals("v4", remoteCache.get("k4"));
+
+      hotRodServer4.stop();
+
+      try {
+         remoteCache.put("k5", "v1");
+         remoteCache.put("k6", "v2");
+         remoteCache.put("k7", "v3");
+         remoteCache.put("k8", "v4");
+         assert false : "exception expected as balancer is still redirecting to failed node";
+      } catch (TransportException e) {
+         //expected
+      }
+   }
+
+   @Test(dependsOnMethods = "testStopServer")
+   public void testRemoveServers() {
+      List<InetSocketAddress> serverAddresses = new ArrayList<InetSocketAddress>();
+      serverAddresses.add(new InetSocketAddress("localhost", hotRodServer1.getPort()));
+      serverAddresses.add(new InetSocketAddress("localhost", hotRodServer2.getPort()));
+
+      RoundRobinBalancingStrategy balancer = getBalancer();
+      balancer.setServers(serverAddresses);
+
+      remoteCache.put("k1", "v1");
+      remoteCache.put("k2", "v2");
+      remoteCache.put("k3", "v3");
+      remoteCache.put("k4", "v4");
+
+      assertEquals(2, c1.size());
+      assertEquals(2, c2.size());
+      assertEquals(0, c3.size());
+      assertEquals(0, c4.size());
+
+      assertEquals("v1", remoteCache.get("k1"));
+      assertEquals("v2", remoteCache.get("k2"));
+      assertEquals("v3", remoteCache.get("k3"));
+      assertEquals("v4", remoteCache.get("k4"));
+
+      remoteCache.put("k5", "v2");
+      remoteCache.put("k6", "v3");
+      remoteCache.put("k7", "v1");
+      remoteCache.put("k8", "v2");
+      remoteCache.put("k9", "v3");
+      remoteCache.put("k10", "v3");
+      remoteCache.put("k11", "v3");
+      remoteCache.put("k12", "v3");
+
+      assertEquals(6, c1.size());
+      assertEquals(6, c2.size());
+      assertEquals(0, c3.size());
+      assertEquals(0, c4.size());
+
+   }
+
+   private RoundRobinBalancingStrategy getBalancer() {
+      TcpTransportFactory transportFactory = (TcpTransportFactory) TestingUtil.extractField(remoteCache.getRemoteCacheManager(), "transportFactory");
+      return (RoundRobinBalancingStrategy) TestingUtil.extractField(transportFactory, "balancer");
+   }
+
+   private String getServersString(HotRodServer... servers) {
+      StringBuilder builder = new StringBuilder();
+      for (HotRodServer server : servers) {
+         builder.append("localhost").append(':').append(server.getPort()).append(";");
+      }
+      return builder.toString();
+   }
+}

Added: trunk/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/RoundRobinBalancingStrategyTest.java
===================================================================
--- trunk/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/RoundRobinBalancingStrategyTest.java	                        (rev 0)
+++ trunk/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/RoundRobinBalancingStrategyTest.java	2010-04-16 14:29:21 UTC (rev 1701)
@@ -0,0 +1,120 @@
+package org.infinispan.client.hotrod;
+
+import org.infinispan.client.hotrod.impl.transport.tcp.RoundRobinBalancingStrategy;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+import java.net.InetSocketAddress;
+import java.net.SocketAddress;
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.testng.AssertJUnit.assertEquals;
+
+/**
+ * // TODO: Document this
+ *
+ * @author Mircea.Markus at jboss.com
+ * @since 4.1
+ */
+ at Test (groups = "unit", testName = "client.hotrod.RoundRobinBalancingStrategyTest")
+public class RoundRobinBalancingStrategyTest {
+
+
+   InetSocketAddress addr1 = new InetSocketAddress("localhost",1111);
+   InetSocketAddress addr2 = new InetSocketAddress("localhost",2222);
+   InetSocketAddress addr3 = new InetSocketAddress("localhost",3333);
+   InetSocketAddress addr4 = new InetSocketAddress("localhost",4444);
+   private List<InetSocketAddress> defaultServers;
+   private RoundRobinBalancingStrategy strategy;
+
+   @BeforeMethod
+   public void setUp() {
+      strategy = new RoundRobinBalancingStrategy();
+      defaultServers = new ArrayList<InetSocketAddress>();
+      defaultServers.add(addr1);
+      defaultServers.add(addr2);
+      defaultServers.add(addr3);
+      strategy.setServers(defaultServers);
+   }
+
+   public void simpleTest() {
+      assertEquals(addr1, strategy.nextServer());
+      assertEquals(addr2, strategy.nextServer());
+      assertEquals(addr3, strategy.nextServer());
+      assertEquals(addr1, strategy.nextServer());
+      assertEquals(addr2, strategy.nextServer());
+      assertEquals(addr3, strategy.nextServer());
+      assertEquals(addr1, strategy.nextServer());
+      assertEquals(addr2, strategy.nextServer());
+      assertEquals(addr3, strategy.nextServer());
+   }
+
+   public void testAddServer() {
+      List<InetSocketAddress> newServers = new ArrayList<InetSocketAddress>(defaultServers);
+      newServers.add(addr4);
+      strategy.setServers(newServers);
+      assertEquals(addr1, strategy.nextServer());
+      assertEquals(addr2, strategy.nextServer());
+      assertEquals(addr3, strategy.nextServer());
+      assertEquals(addr4, strategy.nextServer());
+      assertEquals(addr1, strategy.nextServer());
+      assertEquals(addr2, strategy.nextServer());
+      assertEquals(addr3, strategy.nextServer());
+      assertEquals(addr4, strategy.nextServer());
+      assertEquals(addr1, strategy.nextServer());
+      assertEquals(addr2, strategy.nextServer());
+      assertEquals(addr3, strategy.nextServer());
+   }
+
+   public void testRemoveServer() {
+      List<InetSocketAddress> newServers = new ArrayList<InetSocketAddress>(defaultServers);
+      newServers.remove(addr3);
+      strategy.setServers(newServers);
+      assertEquals(addr1, strategy.nextServer());
+      assertEquals(addr2, strategy.nextServer());
+      assertEquals(addr1, strategy.nextServer());
+      assertEquals(addr2, strategy.nextServer());
+      assertEquals(addr1, strategy.nextServer());
+      assertEquals(addr2, strategy.nextServer());
+   }
+
+   public void testRemoveServerAfterActivity() {
+      assertEquals(addr1, strategy.nextServer());
+      assertEquals(addr2, strategy.nextServer());
+      assertEquals(addr3, strategy.nextServer());
+      assertEquals(addr1, strategy.nextServer());
+      assertEquals(addr2, strategy.nextServer());
+      List<InetSocketAddress> newServers = new ArrayList<InetSocketAddress>(defaultServers);
+      newServers.remove(addr3);
+      strategy.setServers(newServers);
+      assertEquals(addr1, strategy.nextServer());
+      assertEquals(addr2, strategy.nextServer());
+      assertEquals(addr1, strategy.nextServer());
+      assertEquals(addr2, strategy.nextServer());
+      assertEquals(addr1, strategy.nextServer());
+      assertEquals(addr2, strategy.nextServer());
+   }
+
+   public void testAddServerAfterActivity() {
+      assertEquals(addr1, strategy.nextServer());
+      assertEquals(addr2, strategy.nextServer());
+      assertEquals(addr3, strategy.nextServer());
+      assertEquals(addr1, strategy.nextServer());
+      assertEquals(addr2, strategy.nextServer());
+      List<InetSocketAddress> newServers = new ArrayList<InetSocketAddress>(defaultServers);
+      newServers.add(addr4);
+      strategy.setServers(newServers);
+      assertEquals(addr1, strategy.nextServer());
+      assertEquals(addr2, strategy.nextServer());
+      assertEquals(addr3, strategy.nextServer());
+      assertEquals(addr4, strategy.nextServer());
+      assertEquals(addr1, strategy.nextServer());
+      assertEquals(addr2, strategy.nextServer());
+      assertEquals(addr3, strategy.nextServer());
+      assertEquals(addr4, strategy.nextServer());
+      assertEquals(addr1, strategy.nextServer());
+      assertEquals(addr2, strategy.nextServer());
+      assertEquals(addr3, strategy.nextServer());
+   }
+}

Modified: trunk/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/ServerShutdownTest.java
===================================================================
--- trunk/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/ServerShutdownTest.java	2010-04-16 12:55:16 UTC (rev 1700)
+++ trunk/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/ServerShutdownTest.java	2010-04-16 14:29:21 UTC (rev 1701)
@@ -18,7 +18,6 @@
 @Test(testName = "client.hotrod.ServerShutdownTest", groups = "functional")
 public class ServerShutdownTest {
 
-   @Test(enabled = false)
    public void testServerShutdownWithConnectedClient() {
       CacheManager cacheManager = TestCacheManagerFactory.createLocalCacheManager();
       HotRodServer hotrodServer = HotRodServerStarter.startHotRodServer(cacheManager);



More information about the infinispan-commits mailing list