package org.infinispan.server.test.client.hotrod;
import static org.junit.Assert.assertEquals;
import java.io.IOException;
import java.util.HashSet;
import java.util.Map.Entry;
import java.util.Set;
import java.util.stream.IntStream;
import org.infinispan.arquillian.core.InfinispanResource;
import org.infinispan.arquillian.core.RemoteInfinispanServer;
import org.infinispan.client.hotrod.RemoteCache;
import org.infinispan.client.hotrod.RemoteCacheManager;
import org.infinispan.client.hotrod.configuration.ConfigurationBuilder;
import org.infinispan.commons.util.CloseableIterator;
import org.infinispan.server.test.category.HotRodClustered;
import org.infinispan.server.test.category.HotRodSingleNode;
import org.infinispan.server.test.util.RemoteCacheManagerFactory;
import org.jboss.arquillian.junit.Arquillian;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.junit.runner.RunWith;
/**
* Tests for remote iteration in compat mode with primitive values and default (JBoss) marshalling.
*/
@RunWith(Arquillian.class)
@Category({HotRodSingleNode.class, HotRodClustered.class})
public class HotRodRemoteCacheCompatIT {
private static final String CACHE_NAME = "compatibilityCache";
private static final int CACHE_SIZE = 1000;
private static RemoteCacheManager remoteCacheManager;
private RemoteCache<Object, Object> remoteCache;
@InfinispanResource("container1")
RemoteInfinispanServer server1;
@Before
public void setup() throws IOException {
RemoteCacheManagerFactory remoteCacheManagerFactory = new RemoteCacheManagerFactory();
ConfigurationBuilder clientBuilder = new ConfigurationBuilder();
clientBuilder.addServer()
.host(server1.getHotrodEndpoint().getInetAddress().getHostName())
.port(server1.getHotrodEndpoint().getPort());
remoteCacheManager = remoteCacheManagerFactory.createManager(clientBuilder);
remoteCache = remoteCacheManager.getCache(CACHE_NAME);
}
@AfterClass
public static void release() {
if (remoteCacheManager != null) {
remoteCacheManager.getCache(CACHE_NAME).clear();
remoteCacheManager.stop();
}
}
@Test
public void testIterationWithPrimitiveValues() {
remoteCache.clear();
IntStream.range(0, CACHE_SIZE).forEach(k -> remoteCache.put(k, "value" + k));
Set<Object> keys = new HashSet<>();
try (CloseableIterator<Entry<Object, Object>> iter = remoteCache.retrieveEntries(null, 10)) {
iter.forEachRemaining(e -> keys.add(e.getKey()));
}
assertEquals(CACHE_SIZE, keys.size());
}
}