package org.infinispan.server.hotrod;
import static org.infinispan.server.core.test.ServerTestingUtil.killServer;
import static org.infinispan.server.hotrod.OperationStatus.ParseError;
import static org.infinispan.server.hotrod.test.HotRodTestingUtil.findNetworkInterfaces;
import static org.infinispan.server.hotrod.test.HotRodTestingUtil.getDefaultHotRodConfiguration;
import static org.infinispan.server.hotrod.test.HotRodTestingUtil.hotRodCacheConfiguration;
import static org.infinispan.server.hotrod.test.HotRodTestingUtil.k;
import static org.infinispan.server.hotrod.test.HotRodTestingUtil.killClient;
import static org.infinispan.server.hotrod.test.HotRodTestingUtil.serverPort;
import static org.infinispan.server.hotrod.test.HotRodTestingUtil.startHotRodServer;
import static org.infinispan.server.hotrod.test.HotRodTestingUtil.v;
import static org.testng.Assert.assertEquals;
import static org.testng.AssertJUnit.assertTrue;
import java.lang.reflect.Method;
import java.net.NetworkInterface;
import java.util.EnumSet;
import org.infinispan.configuration.cache.CacheMode;
import org.infinispan.configuration.cache.ConfigurationBuilder;
import org.infinispan.manager.EmbeddedCacheManager;
import org.infinispan.registry.InternalCacheRegistry;
import org.infinispan.server.hotrod.test.HotRodClient;
import org.infinispan.server.hotrod.test.TestErrorResponse;
import org.infinispan.test.MultipleCacheManagersTest;
import org.infinispan.test.fwk.TestCacheManagerFactory;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
@Test(groups = "functional", testName = "server.hotrod.HotRodSingleClusteredTest")
public class HotRodSingleClusteredNonLoopbackTest extends MultipleCacheManagersTest {
private HotRodServer hotRodServer;
private HotRodClient hotRodClient;
private String cacheName = "HotRodCache";
@Override
protected void createCacheManagers() {
EmbeddedCacheManager cm = TestCacheManagerFactory.createClusteredCacheManager(hotRodCacheConfiguration());
cacheManagers.add(cm);
ConfigurationBuilder builder = hotRodCacheConfiguration(
getDefaultClusteredCacheConfig(CacheMode.REPL_SYNC, false));
cm.defineConfiguration(cacheName, builder.build());
}
@BeforeClass(alwaysRun = true)
@Override
public void createBeforeClass() throws Throwable {
super.createBeforeClass();
NetworkInterface iface = findNetworkInterfaces(false).next();
String address = iface.getInetAddresses().nextElement().getHostAddress();
hotRodServer = startHotRodServer(cacheManagers.get(0), address, serverPort(), 0, getDefaultHotRodConfiguration());
hotRodClient = new HotRodClient(address, hotRodServer.getPort(), cacheName, 60, (byte) 20);
}
@AfterClass(alwaysRun = true)
@Override
protected void destroy() {
log.debug("Test finished, close client, server, and cache managers");
killClient(hotRodClient);
killServer(hotRodServer);
super.destroy();
}
public void testNonLoopbackPutOnProtectedCache(Method m) {
InternalCacheRegistry internalCacheRegistry =
manager(0).getGlobalComponentRegistry().getComponent(InternalCacheRegistry.class);
internalCacheRegistry.registerInternalCache("MyInternalCache",
new ConfigurationBuilder().build(),
EnumSet.of(InternalCacheRegistry.Flag.USER,
InternalCacheRegistry.Flag.PROTECTED));
TestErrorResponse resp = (TestErrorResponse) hotRodClient
.execute(0xA0, (byte) 0x01, "MyInternalCache", k(m), 0, 0, v(m), 0, (byte) 1, 0);
assertTrue(resp.msg.contains("protected caches only over loopback"));
assertEquals(resp.status, ParseError, "Status should have been 'ParseError' but instead was: " + resp.status);
hotRodClient.assertPut(m);
}
}