package org.infinispan.server.memcached; import static org.infinispan.server.memcached.test.MemcachedTestingUtil.createMemcachedClient; import static org.infinispan.server.memcached.test.MemcachedTestingUtil.startMemcachedTextServer; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.infinispan.Cache; import org.infinispan.manager.EmbeddedCacheManager; import org.infinispan.server.core.test.ServerTestingUtil; import org.infinispan.server.memcached.test.MemcachedTestingUtil; import org.infinispan.test.MultipleCacheManagersTest; import org.testng.annotations.AfterClass; import net.spy.memcached.MemcachedClient; /** * // TODO: Document this * @author Galder ZamarreƱo * @since // TODO */ abstract class MemcachedMultiNodeTest extends MultipleCacheManagersTest { protected static String cacheName = "MemcachedReplSync"; protected int nodeCount = 2; protected List<MemcachedServer> servers = new ArrayList<>(nodeCount); protected List<MemcachedClient> clients = new ArrayList<>(nodeCount); protected Map<Cache<String, byte[]>, MemcachedClient> cacheClient = new HashMap<>(); protected int timeout = 60; @Override protected void createCacheManagers() throws Throwable { for (int i = 0; i < nodeCount; ++i) { cacheManagers.add(createCacheManager(i)); } waitForClusterToForm(); servers.add(startMemcachedTextServer(cacheManagers.get(0), cacheName)); servers.add(startMemcachedTextServer(cacheManagers.get(1), servers.get(0).getPort() + 50, cacheName)); servers.forEach(s -> { MemcachedClient client = null; try { client = createMemcachedClient(60000, s.getPort()); } catch (IOException e) { throw new AssertionError(e); } clients.add(client); Cache<String, byte[]> cache = s.getCacheManager().getCache(cacheName); cacheClient.put(cache, client); }); } protected abstract EmbeddedCacheManager createCacheManager(int index); @AfterClass(alwaysRun = true) @Override public void destroy() { super.destroy(); log.debug("Test finished, close Hot Rod server"); clients.forEach(MemcachedTestingUtil::killMemcachedClient); servers.forEach(ServerTestingUtil::killServer); } }