[infinispan-commits] Infinispan SVN: r1738 - trunk/server/hotrod/src/test/scala/org/infinispan/server/hotrod.

infinispan-commits at lists.jboss.org infinispan-commits at lists.jboss.org
Wed May 5 09:02:55 EDT 2010


Author: galder.zamarreno at jboss.com
Date: 2010-05-05 09:02:55 -0400 (Wed, 05 May 2010)
New Revision: 1738

Added:
   trunk/server/hotrod/src/test/scala/org/infinispan/server/hotrod/HotRodDistributionTest.scala
   trunk/server/hotrod/src/test/scala/org/infinispan/server/hotrod/HotRodMultiNodeTest.scala
Log:
[ISPN-411] (Implement hash distribution headers in Hot Rod) Forgot to add test classes.

Added: trunk/server/hotrod/src/test/scala/org/infinispan/server/hotrod/HotRodDistributionTest.scala
===================================================================
--- trunk/server/hotrod/src/test/scala/org/infinispan/server/hotrod/HotRodDistributionTest.scala	                        (rev 0)
+++ trunk/server/hotrod/src/test/scala/org/infinispan/server/hotrod/HotRodDistributionTest.scala	2010-05-05 13:02:55 UTC (rev 1738)
@@ -0,0 +1,116 @@
+package org.infinispan.server.hotrod
+
+import org.testng.annotations.Test
+import org.infinispan.config.Configuration.CacheMode
+import org.infinispan.config.Configuration
+import java.lang.reflect.Method
+import org.infinispan.server.hotrod.OperationStatus._
+import test.HotRodClient
+import test.HotRodTestingUtil._
+import org.testng.Assert._
+import collection.mutable.ListBuffer
+import org.infinispan.server.core.Logging
+import org.infinispan.distribution.UnionConsistentHash
+import org.infinispan.test.TestingUtil
+
+/**
+ * // TODO: Document this
+ * @author Galder Zamarreño
+ * @since // TODO
+ */
+ at Test(groups = Array("functional"), testName = "server.hotrod.HotRodDistributionTest")
+class HotRodDistributionTest extends HotRodMultiNodeTest {
+
+   import HotRodServer._
+
+   override protected def cacheName: String = "hotRodDistSync"
+
+   override protected def createCacheConfig: Configuration = getDefaultClusteredConfig(CacheMode.DIST_SYNC)
+
+   def testDistributedPutWithTopologyChanges(m: Method) {
+      var resp = clients.head.put(k(m) , 0, 0, v(m), 1, 0)
+      assertStatus(resp.status, Success)
+      assertEquals(resp.topologyResponse, None)
+      assertSuccess(clients.tail.head.get(k(m), 0), v(m))
+      resp = clients.head.put(k(m) , 0, 0, v(m, "v1-"), 2, 0)
+      assertStatus(resp.status, Success)
+      assertTopologyReceived(resp.topologyResponse.get, servers)
+      resp = clients.tail.head.put(k(m) , 0, 0, v(m, "v2-"), 2, 1)
+      assertStatus(resp.status, Success)
+      assertTopologyReceived(resp.topologyResponse.get, servers)
+      resp = clients.head.put(k(m) , 0, 0, v(m, "v3-"), 2, 2)
+      assertStatus(resp.status, Success)
+      assertEquals(resp.topologyResponse, None)
+      assertSuccess(clients.tail.head.get(k(m), 0), v(m, "v3-"))
+
+      resp = clients.head.put(k(m) , 0, 0, v(m, "v4-"), 3, 0)
+      assertStatus(resp.status, Success)
+      var expectedHashIds = generateExpectedHashIds
+      assertHashTopologyReceived(resp.topologyResponse.get, servers, expectedHashIds)
+      assertSuccess(clients.tail.head.get(k(m), 0), v(m, "v4-"))
+      resp = clients.tail.head.put(k(m) , 0, 0, v(m, "v5-"), 3, 1)
+      assertStatus(resp.status, Success)
+      expectedHashIds = generateExpectedHashIds
+      assertHashTopologyReceived(resp.topologyResponse.get, servers, expectedHashIds)
+      assertSuccess(clients.tail.head.get(k(m), 0), v(m, "v5-"))
+
+      var cm = addClusterEnabledCacheManager()
+      cm.defineConfiguration(cacheName, createCacheConfig)
+      cm.defineConfiguration(TopologyCacheName, createTopologyCacheConfig)
+      val newServer = startHotRodServer(cm, servers.tail.head.getPort + 25)
+      val newClient = new HotRodClient("127.0.0.1", newServer.getPort, cacheName, 60)
+      try {
+         log.trace("New client started, modify key to be v6-*", null)
+         resp = newClient.put(k(m) , 0, 0, v(m, "v6-"), 3, 2)
+         // resp = clients.tail.head.put(k(m) , 0, 0, v(m, "v6-"), 3, 2)
+         assertStatus(resp.status, Success)
+         val hashTopologyResp = resp.topologyResponse.get.asInstanceOf[HashDistAwareResponse]
+         assertEquals(hashTopologyResp.view.topologyId, 3)
+         assertEquals(hashTopologyResp.view.members.size, 3)
+         val consistentHash = cacheManagers.get(2).getCache(cacheName).getAdvancedCache.getDistributionManager.getConsistentHash
+         assertAddressEquals(hashTopologyResp.view.members.head, servers.head.getAddress,
+            Map(cacheName -> consistentHash.getHashId(servers.head.getAddress.clusterAddress)))
+         assertAddressEquals(hashTopologyResp.view.members.tail.head, servers.tail.head.getAddress,
+            Map(cacheName -> consistentHash.getHashId(servers.tail.head.getAddress.clusterAddress)))
+         assertAddressEquals(hashTopologyResp.view.members.tail.tail.head, newServer.getAddress,
+            Map(cacheName -> consistentHash.getHashId(newServer.getAddress.clusterAddress)))
+         assertEquals(hashTopologyResp.numOwners, 2)
+         assertEquals(hashTopologyResp.hashFunction, 1)
+         assertEquals(hashTopologyResp.hashSpace, 10240)
+         log.trace("Get key and verify that's v6-*", null)
+         assertSuccess(clients.tail.head.get(k(m), 0), v(m, "v6-"))
+      } finally {
+         newClient.stop
+         newServer.stop
+         cm.stop
+      }
+
+      resp = clients.tail.head.put(k(m) , 0, 0, v(m, "v7-"), 3, 3)
+      assertStatus(resp.status, Success)
+      val hashTopologyResp = resp.topologyResponse.get.asInstanceOf[HashDistAwareResponse]
+      assertEquals(hashTopologyResp.view.topologyId, 4)
+      assertEquals(hashTopologyResp.view.members.size, 2)
+      val consistentHash = cacheManagers.get(1).getCache(cacheName).getAdvancedCache.getDistributionManager.getConsistentHash
+      assertAddressEquals(hashTopologyResp.view.members.head, servers.head.getAddress,
+         Map(cacheName -> consistentHash.getHashId(servers.head.getAddress.clusterAddress)))
+      assertAddressEquals(hashTopologyResp.view.members.tail.head, servers.tail.head.getAddress,
+         Map(cacheName -> consistentHash.getHashId(servers.tail.head.getAddress.clusterAddress)))
+      assertEquals(hashTopologyResp.numOwners, 2)
+      assertEquals(hashTopologyResp.hashFunction, 1)
+      assertEquals(hashTopologyResp.hashSpace, 10240)
+      assertSuccess(clients.tail.head.get(k(m), 0), v(m, "v7-"))
+   }
+
+   private def generateExpectedHashIds: List[Map[String, Int]] = {
+      val listBuffer = new ListBuffer[Map[String, Int]]
+      val consistentHash = cacheManagers.get(0).getCache(cacheName).getAdvancedCache.getDistributionManager.getConsistentHash
+      var i = 0
+      while (consistentHash.isInstanceOf[UnionConsistentHash] && i < 10) {
+         TestingUtil.sleepThread(1000)
+         i += 1
+      }
+      listBuffer += Map(cacheName -> consistentHash.getHashId(servers.head.getAddress.clusterAddress))
+      listBuffer += Map(cacheName -> consistentHash.getHashId(servers.tail.head.getAddress.clusterAddress))
+      listBuffer.toList
+   }
+}
\ No newline at end of file

Added: trunk/server/hotrod/src/test/scala/org/infinispan/server/hotrod/HotRodMultiNodeTest.scala
===================================================================
--- trunk/server/hotrod/src/test/scala/org/infinispan/server/hotrod/HotRodMultiNodeTest.scala	                        (rev 0)
+++ trunk/server/hotrod/src/test/scala/org/infinispan/server/hotrod/HotRodMultiNodeTest.scala	2010-05-05 13:02:55 UTC (rev 1738)
@@ -0,0 +1,66 @@
+package org.infinispan.server.hotrod
+
+import org.infinispan.test.MultipleCacheManagersTest
+import org.infinispan.config.Configuration
+import org.testng.annotations.{AfterMethod, AfterClass, Test}
+import test.HotRodClient
+import test.HotRodTestingUtil._
+import org.infinispan.config.Configuration.CacheMode
+import org.testng.Assert._
+
+/**
+ * // TODO: Document this
+ * @author Galder Zamarreño
+ * @since // TODO
+ */
+abstract class HotRodMultiNodeTest extends MultipleCacheManagersTest {
+   import HotRodServer._
+   private[this] var hotRodServers: List[HotRodServer] = List()
+   private[this] var hotRodClients: List[HotRodClient] = List()
+
+   @Test(enabled=false) // Disable explicitly to avoid TestNG thinking this is a test!!
+   override def createCacheManagers {
+      for (i <- 0 until 2) {
+         val cm = addClusterEnabledCacheManager()
+         cm.defineConfiguration(cacheName, createCacheConfig)
+         cm.defineConfiguration(TopologyCacheName, createTopologyCacheConfig)
+      }
+      hotRodServers = hotRodServers ::: List(startHotRodServer(cacheManagers.get(0)))
+      hotRodServers = hotRodServers ::: List(startHotRodServer(cacheManagers.get(1), hotRodServers.head.getPort + 50))
+      hotRodServers.foreach {s =>
+         hotRodClients = new HotRodClient("127.0.0.1", s.getPort, cacheName, 60) :: hotRodClients
+      }
+   }
+
+   @AfterClass(alwaysRun = true)
+   override def destroy {
+      log.debug("Test finished, close Hot Rod server", null)
+      hotRodClients.foreach(_.stop)
+      hotRodServers.foreach(_.stop)
+      super.destroy // Stop the caches last so that at stoppage time topology cache can be updated properly
+   }
+
+   @AfterMethod(alwaysRun=true)
+   override def clearContent() {
+      // Do not clear cache between methods so that topology cache does not get cleared
+   }
+
+   protected def servers = hotRodServers
+
+   protected def clients = hotRodClients
+
+   protected def cacheName: String
+
+   protected def createCacheConfig: Configuration
+
+   protected def createTopologyCacheConfig: Configuration = {
+      val topologyCacheConfig = new Configuration
+      topologyCacheConfig.setCacheMode(CacheMode.REPL_SYNC)
+      topologyCacheConfig.setSyncReplTimeout(10000) // Milliseconds
+      topologyCacheConfig.setFetchInMemoryState(true) // State transfer required
+      topologyCacheConfig.setSyncCommitPhase(true) // Only for testing, so that asserts work fine.
+      topologyCacheConfig.setSyncRollbackPhase(true) // Only for testing, so that asserts work fine.
+      topologyCacheConfig
+   }
+
+}
\ No newline at end of file



More information about the infinispan-commits mailing list