package org.infinispan.stream; import static org.testng.Assert.assertEquals; import java.util.Collections; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; import org.infinispan.Cache; import org.infinispan.configuration.cache.CacheMode; import org.infinispan.container.entries.CacheEntry; import org.infinispan.distribution.MagicKey; import org.infinispan.filter.CacheFilters; import org.infinispan.filter.CollectionKeyFilter; import org.infinispan.filter.KeyFilterAsKeyValueFilter; import org.testng.annotations.Test; /** * Base class for stream iterator tests that are ran on clustered caches * * @author wburns * @since 8.0 */ @Test(groups = "functional", testName = "stream.BaseClusteredStreamIteratorTest") public abstract class BaseClusteredStreamIteratorTest extends BaseStreamIteratorTest { public BaseClusteredStreamIteratorTest(boolean tx, CacheMode mode) { super(tx, mode); } protected Map<Object, String> putValuesInCache() { return putValueInEachCache(3); } protected Map<Object, String> putValueInEachCache(int cacheNumber) { // This is linked to keep insertion order Map<Object, String> valuesInserted = new LinkedHashMap<Object, String>(); for (int i = 0; i < cacheNumber; ++i) { Cache<Object, String> cache = cache(i, CACHE_NAME); Object key = getKeyTiedToCache(cache); cache.put(key, key.toString()); valuesInserted.put(key, key.toString()); } return valuesInserted; } @Test public void simpleTestIteratorFromOtherNode() { Map<Object, String> values = putValuesInCache(); Cache<MagicKey, String> cache = cache(1, CACHE_NAME); Iterator<CacheEntry<MagicKey, String>> iterator = cache.getAdvancedCache().cacheEntrySet().stream().iterator(); Map<MagicKey, String> results = mapFromIterator(iterator); assertEquals(values, results); } @Test public void simpleTestRemoteFilter() { Map<Object, String> values = putValuesInCache(); Iterator<Map.Entry<Object, String>> iter = values.entrySet().iterator(); Map.Entry<Object, String> excludedEntry = iter.next(); // Remove it so comparison below will be correct iter.remove(); Cache<MagicKey, String> cache = cache(1, CACHE_NAME); Iterator<CacheEntry<MagicKey, String>> iterator = cache.getAdvancedCache().cacheEntrySet().stream().filter( CacheFilters.predicate(new KeyFilterAsKeyValueFilter<>(new CollectionKeyFilter<>( Collections.singleton(excludedEntry.getKey()))))).iterator(); Map<MagicKey, String> results = mapFromIterator(iterator); assertEquals(values, results); } }