package org.infinispan.client.hotrod.event;
import static org.infinispan.client.hotrod.test.HotRodClientTestingUtil.withClientListener;
import static org.infinispan.server.hotrod.test.HotRodTestingUtil.hotRodCacheConfiguration;
import static org.testng.AssertJUnit.assertTrue;
import java.net.SocketTimeoutException;
import org.infinispan.client.hotrod.RemoteCacheManager;
import org.infinispan.client.hotrod.SocketTimeoutErrorTest.TimeoutInducingInterceptor;
import org.infinispan.client.hotrod.exceptions.HotRodClientException;
import org.infinispan.client.hotrod.test.HotRodClientTestingUtil;
import org.infinispan.client.hotrod.test.SingleHotRodServerTest;
import org.infinispan.configuration.cache.ConfigurationBuilder;
import org.infinispan.interceptors.impl.EntryWrappingInterceptor;
import org.infinispan.manager.EmbeddedCacheManager;
import org.infinispan.server.hotrod.HotRodServer;
import org.infinispan.server.hotrod.configuration.HotRodServerConfigurationBuilder;
import org.infinispan.test.fwk.TestCacheManagerFactory;
import org.testng.Assert;
import org.testng.annotations.Test;
@Test(groups = "functional", testName = "client.hotrod.event.EventSocketTimeoutTest")
public class EventSocketTimeoutTest extends SingleHotRodServerTest {
@Override
protected EmbeddedCacheManager createCacheManager() throws Exception {
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.customInterceptors().addInterceptor().interceptor(
new TimeoutInducingInterceptor()).after(EntryWrappingInterceptor.class);
return TestCacheManagerFactory.createCacheManager(hotRodCacheConfiguration(builder));
}
@Override
protected HotRodServer createHotRodServer() {
HotRodServerConfigurationBuilder builder = new HotRodServerConfigurationBuilder();
builder.workerThreads(6); // TODO: Remove workerThreads configuration when ISPN-5083 implemented
return HotRodClientTestingUtil.startHotRodServer(cacheManager, builder);
}
@Override
protected RemoteCacheManager getRemoteCacheManager() {
org.infinispan.client.hotrod.configuration.ConfigurationBuilder builder =
new org.infinispan.client.hotrod.configuration.ConfigurationBuilder();
builder.addServer().host("127.0.0.1").port(hotrodServer.getPort());
builder.socketTimeout(2000);
builder.maxRetries(0);
return new RemoteCacheManager(builder.build());
}
public void testSocketTimeoutWithEvent() {
final EventLogListener<String> l = new EventLogListener<>(remoteCacheManager.getCache());
withClientListener(l, remote -> {
l.expectNoEvents();
remote.put("uno", 1);
l.expectOnlyCreatedEvent("uno");
try {
remote.put("FailFailFail", 99);
Assert.fail("SocketTimeoutException expected");
} catch (HotRodClientException e) {
assertTrue(e.getCause() instanceof SocketTimeoutException); // ignore
}
remote.put("dos", 2);
l.expectOnlyCreatedEvent("dos");
});
}
}