package org.infinispan.server.hotrod; import static org.infinispan.server.hotrod.OperationStatus.Success; import static org.infinispan.server.hotrod.test.HotRodTestingUtil.assertStatus; import static org.infinispan.server.hotrod.test.HotRodTestingUtil.hotRodCacheConfiguration; import static org.infinispan.server.hotrod.test.HotRodTestingUtil.serverPort; import static org.infinispan.server.hotrod.test.HotRodTestingUtil.startHotRodServer; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertTrue; import java.util.Set; import java.util.stream.Collectors; import org.infinispan.configuration.cache.CacheMode; import org.infinispan.configuration.cache.ConfigurationBuilder; import org.infinispan.manager.EmbeddedCacheManager; import org.infinispan.server.hotrod.test.AbstractTestTopologyAwareResponse; import org.infinispan.server.hotrod.test.TestResponse; import org.testng.annotations.Test; /** * Tests Hot Rod instances that are behind a proxy. * * @author Galder ZamarreƱo * @since 4.1 */ @Test(groups = "functional", testName = "server.hotrod.HotRodProxyTest") public class HotRodProxyTest extends HotRodMultiNodeTest { private String proxyHost1 = "1.2.3.4"; private String proxyHost2 = "2.3.4.5"; private int proxyPort1 = 8123; private int proxyPort2 = 9123; @Override protected String cacheName() { return "hotRodProxy"; } @Override protected ConfigurationBuilder createCacheConfig() { ConfigurationBuilder config = hotRodCacheConfiguration(getDefaultClusteredCacheConfig(CacheMode.REPL_SYNC, false)); config.clustering().stateTransfer().fetchInMemoryState(true); return config; } @Override protected HotRodServer startTestHotRodServer(EmbeddedCacheManager cacheManager, int port) { if (port == serverPort()) return startHotRodServer(cacheManager, proxyHost1, proxyPort1); else return startHotRodServer(cacheManager, port, proxyHost2, proxyPort2); } public void testTopologyWithProxiesReturned() { TestResponse resp = clients().get(0).ping((byte) 2, 0); assertStatus(resp, Success); AbstractTestTopologyAwareResponse topoResp = resp.asTopologyAwareResponse(); assertEquals(topoResp.topologyId, currentServerTopologyId()); assertEquals(topoResp.members.size(), 2); Set<ServerAddress> serverAddresses = servers().stream() .map(HotRodServer::getAddress) .collect(Collectors.toSet()); topoResp.members.forEach(member -> assertTrue(serverAddresses.contains(member))); } }