[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