package org.infinispan.client.hotrod.test; import static org.infinispan.client.hotrod.test.HotRodClientTestingUtil.killServers; import static org.infinispan.test.TestingUtil.blockUntilCacheStatusAchieved; import static org.infinispan.test.TestingUtil.blockUntilViewReceived; import static org.infinispan.test.TestingUtil.killCacheManagers; import java.util.ArrayList; import java.util.List; import org.infinispan.client.hotrod.RemoteCacheManager; import org.infinispan.configuration.cache.ConfigurationBuilder; import org.infinispan.lifecycle.ComponentStatus; import org.infinispan.manager.EmbeddedCacheManager; import org.infinispan.server.hotrod.HotRodServer; import org.infinispan.server.hotrod.configuration.HotRodServerConfigurationBuilder; import org.infinispan.server.hotrod.test.HotRodTestingUtil; import org.infinispan.test.MultipleCacheManagersTest; import org.testng.annotations.AfterClass; import org.testng.annotations.AfterMethod; /** * Base test class for Hot Rod tests. * * @author Galder ZamarreƱo * @since 5.0 */ public abstract class MultiHotRodServersTest extends MultipleCacheManagersTest { protected List<HotRodServer> servers = new ArrayList<HotRodServer>(); protected List<RemoteCacheManager> clients = new ArrayList<RemoteCacheManager>(); protected void createHotRodServers(int num, ConfigurationBuilder defaultBuilder) { // Start Hot Rod servers for (int i = 0; i < num; i++) addHotRodServer(defaultBuilder); // Verify that default caches should be started for (int i = 0; i < num; i++) assert manager(i).getCache() != null; // Block until views have been received blockUntilViewReceived(manager(0).getCache(), num); // Verify that caches running for (int i = 0; i < num; i++) { blockUntilCacheStatusAchieved( manager(i).getCache(), ComponentStatus.RUNNING, 10000); } for (int i = 0; i < num; i++) { clients.add(createClient(i)); } } protected RemoteCacheManager createClient(int i) { return new InternalRemoteCacheManager(createHotRodClientConfigurationBuilder(server(i).getPort()).build()); } protected org.infinispan.client.hotrod.configuration.ConfigurationBuilder createHotRodClientConfigurationBuilder(int serverPort) { org.infinispan.client.hotrod.configuration.ConfigurationBuilder clientBuilder = new org.infinispan.client.hotrod.configuration.ConfigurationBuilder(); clientBuilder.addServer() .host("localhost") .port(serverPort) .maxRetries(maxRetries()); return clientBuilder; } protected int maxRetries() { return 0; } @AfterMethod(alwaysRun = true) protected void clearContent() throws Throwable { // Do not clear content to allow servers // to stop gracefully and catch any issues there. } @AfterClass(alwaysRun = true) @Override protected void destroy() { // Correct order is to stop servers first try { for (HotRodServer server : servers) HotRodClientTestingUtil.killServers(server); } finally { // And then the caches and cache managers super.destroy(); } } protected HotRodServer addHotRodServer(ConfigurationBuilder builder) { EmbeddedCacheManager cm = addClusterEnabledCacheManager(builder); HotRodServer server = HotRodClientTestingUtil.startHotRodServer(cm); servers.add(server); return server; } protected HotRodServer addHotRodServer(ConfigurationBuilder builder, int port) { EmbeddedCacheManager cm = addClusterEnabledCacheManager(builder); HotRodServer server = HotRodTestingUtil.startHotRodServer( cm, port, new HotRodServerConfigurationBuilder()); servers.add(server); return server; } protected HotRodServer server(int i) { return servers.get(i); } protected void killServer(int i) { HotRodServer server = servers.get(i); killServers(server); servers.remove(i); killCacheManagers(cacheManagers.get(i)); cacheManagers.remove(i); } protected RemoteCacheManager client(int i) { return clients.get(i); } protected void defineInAll(String cacheName, ConfigurationBuilder builder) { for (HotRodServer server : servers) { server.getCacheManager().defineConfiguration(cacheName, builder.build()); server.getCacheManager().getCache(cacheName); } } }