package org.infinispan.client.hotrod.impl.iteration;
import static org.testng.Assert.assertEquals;
import java.util.Map.Entry;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import org.infinispan.Cache;
import org.infinispan.client.hotrod.RemoteCache;
import org.infinispan.commons.util.CloseableIterator;
import org.infinispan.query.dsl.embedded.testdomain.hsearch.AccountHS;
import org.testng.annotations.Test;
/**
* @author gustavonalle
* @since 8.2
*/
@Test(groups = "functional", testName = "client.hotrod.iteration.SegmentFilteredFailOverTest")
public class SegmentFilteredFailOverTest extends DistFailOverRemoteIteratorTest {
static final int ENTRIES = 100;
@Override
public void testFailOver() throws InterruptedException {
RemoteCache<Integer, AccountHS> remoteCache = clients.get(0).getCache();
populateCache(ENTRIES, this::newAccount, remoteCache);
Cache<Object, Object> cache = caches().get(0);
int totalSegments = cache.getCacheConfiguration().clustering().hash().numSegments();
Set<Integer> segments = IntStream.rangeClosed(0, totalSegments / 2).boxed().collect(Collectors.toSet());
long expectedCount = cache.keySet().stream().filterKeySegments(segments).count();
int actualCount = 0;
try (CloseableIterator<Entry<Object, Object>> iterator = remoteCache.retrieveEntries(null, segments, 100)) {
for (int i = 0; i < ENTRIES / 5; i++) {
iterator.next();
actualCount++;
}
killIterationServer();
while (iterator.hasNext()) {
iterator.next();
actualCount++;
}
}
assertEquals(actualCount, expectedCount);
}
}