http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/968c3cf8/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheAbstractFullApiSelfTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheAbstractFullApiSelfTest.java
 
b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheAbstractFullApiSelfTest.java
deleted file mode 100644
index cae151a..0000000
--- 
a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheAbstractFullApiSelfTest.java
+++ /dev/null
@@ -1,5091 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.gridgain.grid.kernal.processors.cache;
-
-import com.google.common.collect.*;
-import org.apache.ignite.*;
-import org.apache.ignite.cache.*;
-import org.apache.ignite.cluster.*;
-import org.apache.ignite.configuration.*;
-import org.apache.ignite.events.*;
-import org.apache.ignite.internal.*;
-import org.apache.ignite.internal.processors.cache.*;
-import org.apache.ignite.lang.*;
-import org.apache.ignite.transactions.*;
-import org.apache.ignite.spi.swapspace.inmemory.*;
-import org.apache.ignite.internal.util.lang.*;
-import org.apache.ignite.internal.util.typedef.*;
-import org.apache.ignite.internal.util.typedef.internal.*;
-import org.apache.ignite.testframework.*;
-import org.jetbrains.annotations.*;
-
-import javax.cache.expiry.*;
-import javax.cache.processor.*;
-import java.util.*;
-import java.util.concurrent.*;
-import java.util.concurrent.atomic.*;
-import java.util.concurrent.locks.*;
-
-import static java.util.concurrent.TimeUnit.*;
-import static org.apache.ignite.cache.GridCacheMode.*;
-import static org.apache.ignite.cache.GridCachePeekMode.*;
-import static org.apache.ignite.transactions.IgniteTxConcurrency.*;
-import static org.apache.ignite.transactions.IgniteTxIsolation.*;
-import static org.apache.ignite.transactions.IgniteTxState.*;
-import static org.apache.ignite.events.IgniteEventType.*;
-import static org.apache.ignite.testframework.GridTestUtils.*;
-
-/**
- * Full API cache test.
- */
-public abstract class GridCacheAbstractFullApiSelfTest extends 
GridCacheAbstractSelfTest {
-    /** Increment processor for invoke operations. */
-    public static final EntryProcessor<String, Integer, String> INCR_PROCESSOR 
= new EntryProcessor<String, Integer, String>() {
-        @Override public String process(MutableEntry<String, Integer> e, 
Object... args) {
-            assertNotNull(e.getKey());
-
-            Integer old = e.getValue();
-
-            e.setValue(old == null ? 1 : old + 1);
-
-            return String.valueOf(old);
-        }
-    };
-
-    /** Increment processor for invoke operations. */
-    public static final EntryProcessor<String, Integer, String> RMV_PROCESSOR 
= new EntryProcessor<String, Integer, String>() {
-        @Override public String process(MutableEntry<String, Integer> e, 
Object... args) {
-            assertNotNull(e.getKey());
-
-            Integer old = e.getValue();
-
-            e.remove();
-
-            return String.valueOf(old);
-        }
-    };
-
-    /** Dflt grid. */
-    protected Ignite dfltIgnite;
-
-    /** {@inheritDoc} */
-    @Override protected int gridCount() {
-        return 1;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected boolean swapEnabled() {
-        return true;
-    }
-
-    /**
-     * @return {@code True} if values should be stored off-heap.
-     */
-    protected boolean offHeapValues() {
-        return false;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected IgniteConfiguration getConfiguration(String gridName) 
throws Exception {
-        IgniteConfiguration cfg = super.getConfiguration(gridName);
-
-        if (offHeapValues())
-            cfg.setSwapSpaceSpi(new GridTestSwapSpaceSpi());
-
-        return cfg;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheConfiguration cacheConfiguration(String gridName) 
throws Exception {
-        CacheConfiguration ccfg = super.cacheConfiguration(gridName);
-
-        if (offHeapValues()) {
-            ccfg.setQueryIndexEnabled(false);
-            ccfg.setMemoryMode(GridCacheMemoryMode.OFFHEAP_VALUES);
-            ccfg.setOffHeapMaxMemory(0);
-        }
-
-        return ccfg;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected void beforeTestsStarted() throws Exception {
-        super.beforeTestsStarted();
-
-
-        for (int i = 0; i < gridCount(); i++)
-            info("Grid " + i + ": " + grid(i).localNode().id());
-    }
-
-    /** {@inheritDoc} */
-    @Override protected void beforeTest() throws Exception {
-        assertEquals("Primary key set: " + cache().primaryKeySet(), 0, 
cache().primaryKeySet().size());
-        assertEquals(0, cache().primarySize());
-        assertEquals(0, cache().primaryKeySet().size());
-        assertEquals(0, cache().size());
-        assertEquals(0, cache().globalSize());
-        assertEquals(0, cache().globalPrimarySize());
-
-        super.beforeTest();
-
-        assertEquals(0, cache().primarySize());
-        assertEquals(0, cache().primaryKeySet().size());
-        assertEquals(0, cache().size());
-        assertEquals(0, cache().globalSize());
-        assertEquals(0, cache().globalPrimarySize());
-
-        dfltIgnite = grid(0);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected void afterTest() throws Exception {
-        super.afterTest();
-
-        assertEquals(0, cache().primarySize());
-        assertEquals(0, cache().size());
-        assertEquals(0, cache().globalSize());
-        assertEquals(0, cache().globalPrimarySize());
-
-        dfltIgnite = null;
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testSize() throws Exception {
-        assert cache().isEmpty();
-
-        int size = 10;
-
-        Map<String, Integer> map = new HashMap<>(size);
-
-        for (int i = 0; i < size; i++)
-            map.put("key" + i, i);
-
-        // Put in primary nodes to avoid near readers which will prevent entry 
from being cleared.
-        Map<ClusterNode, Collection<String>> mapped = 
grid(0).mapKeysToNodes(null, map.keySet());
-
-        for (int i = 0; i < gridCount(); i++) {
-            Collection<String> keys = mapped.get(grid(i).localNode());
-
-            if (!F.isEmpty(keys)) {
-                for (String key : keys)
-                    cache(i).put(key, map.get(key));
-            }
-        }
-
-        map.remove("key0");
-
-        mapped = grid(0).mapKeysToNodes(null, map.keySet());
-
-        for (int i = 0; i < gridCount(); i++) {
-            // Will actually delete entry from map.
-            CU.invalidate(cache(i), "key0");
-
-            assertNull("Failed check for grid: " + i, cache(i).peek("key0"));
-
-            Collection<String> keysCol = mapped.get(grid(i).localNode());
-
-            assert !cache(i).isEmpty() || F.isEmpty(keysCol);
-        }
-
-        for (int i = 0; i < gridCount(); i++) {
-            GridCacheContext<String, Integer> ctx = context(i);
-
-            int sum = 0;
-
-            for (String key : map.keySet())
-                if (ctx.affinity().localNode(key, 
ctx.discovery().topologyVersion()))
-                    sum++;
-
-            assertEquals("Incorrect key size on cache #" + i, sum, 
cache(i).keySet().size());
-            assertEquals("Incorrect key size on cache #" + i, sum, 
cache(i).size());
-        }
-
-        for (int i = 0; i < gridCount(); i++) {
-            Collection<String> keysCol = mapped.get(grid(i).localNode());
-
-            assertEquals("Failed check for grid: " + i, !F.isEmpty(keysCol) ? 
keysCol.size() : 0,
-                cache(i).primarySize());
-        }
-
-        int globalPrimarySize = map.size();
-
-        for (int i = 0; i < gridCount(); i++)
-            assertEquals(globalPrimarySize, cache(i).globalPrimarySize());
-
-        int times = 1;
-
-        if (cacheMode() == REPLICATED)
-            times = gridCount();
-        else if (cacheMode() == PARTITIONED)
-            times = Math.min(gridCount(), cache().configuration().getBackups() 
+ 1);
-
-        int globalSize = globalPrimarySize * times;
-
-        for (int i = 0; i < gridCount(); i++)
-            assertEquals(globalSize, cache(i).globalSize());
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testContainsKey() throws Exception {
-        cache().put("testContainsKey", 1);
-
-        checkContainsKey(true, "testContainsKey");
-        checkContainsKey(false, "testContainsKeyWrongKey");
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testContainsKeyFiltered() throws Exception {
-        cache().put("key1", 1);
-        cache().put("key2", 100);
-
-        checkProjectionContainsKey(true, "key1", F.<GridCacheEntry<String, 
Integer>>alwaysTrue());
-        checkProjectionContainsKey(false, "key1", F.<GridCacheEntry<String, 
Integer>>alwaysFalse());
-        checkProjectionContainsKey(false, "key1", gte100);
-        checkProjectionContainsKey(true, "key2", gte100);
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testContainsValue() throws Exception {
-        cache().put("key", 1);
-
-        checkContainsValue(true, 1);
-        checkContainsValue(false, 2);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testRemoveInExplicitLocks() throws Exception {
-        if (lockingEnabled()) {
-            IgniteCache<String, Integer> cache = jcache();
-
-            cache.put("a", 1);
-
-            Lock lock = cache.lockAll(ImmutableSet.of("a", "b", "c", "d"));
-
-            lock.lock();
-
-            try {
-                cache.remove("a");
-
-                // Make sure single-key operation did not remove lock.
-                cache.putAll(F.asMap("b", 2, "c", 3, "d", 4));
-            }
-            finally {
-                lock.unlock();
-            }
-        }
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testContainsValueFiltered() throws Exception {
-        cache().put("key1", 1);
-        cache().put("key2", 100);
-
-        checkProjectionContainsValue(true, 1, F.<GridCacheEntry<String, 
Integer>>alwaysTrue());
-        checkProjectionContainsValue(false, 1, F.<GridCacheEntry<String, 
Integer>>alwaysFalse());
-        checkProjectionContainsValue(false, 1, gte100);
-        checkProjectionContainsValue(true, 100, gte100);
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testForEach() throws Exception {
-        Collection<Integer> vals1 = F.asList(123, 73);
-        Collection<Integer> vals2 = F.asList(1567, 332);
-
-        Collection<Integer> vals = new ArrayList<>();
-
-        vals.addAll(vals1);
-        vals.addAll(vals2);
-
-        for (Integer val : vals)
-            cache().put("key" + val, val);
-
-        assert cache().tx() == null;
-
-        AtomicInteger sum1 = new AtomicInteger(0);
-
-        if (cacheMode() == PARTITIONED && !nearEnabled()) {
-            for (int i = 0; i < gridCount(); i++)
-                cache(i).forEach(new SumVisitor(sum1));
-
-            // Multiply by 2 if more than one node. In this case backup values 
are also included.
-            assertEquals(F.sumInt(vals) * (gridCount() == 1 ? 1 : 2), 
sum1.get());
-        }
-        else {
-            cache().forEach(new SumVisitor(sum1));
-
-            assertEquals(F.sumInt(vals), sum1.get());
-        }
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testForAll() throws Exception {
-        assert cache().forAll(F.<GridCacheEntry<String, Integer>>alwaysTrue());
-        assert cache().isEmpty() || !cache().forAll(F.<GridCacheEntry<String, 
Integer>>alwaysFalse());
-
-        cache().put("key1", 100);
-        cache().put("key2", 101);
-        cache().put("key3", 200);
-        cache().put("key4", 201);
-
-        assert cache().forAll(gte100);
-    }
-
-    /**
-     * @throws IgniteCheckedException If failed.
-     */
-    public void testAtomicOps() throws IgniteCheckedException {
-        GridCacheProjectionEx<String, Integer> c = 
(GridCacheProjectionEx<String, Integer>)cache();
-
-        final int cnt = 10;
-
-        for (int i = 0; i < cnt; i++)
-            assertNull(c.putIfAbsent("k" + i, i));
-
-        for (int i = 0; i < cnt; i++) {
-            boolean wrong = i % 2 == 0;
-
-            String key = "k" + i;
-
-            GridCacheReturn<Integer> res = c.replacex(key, wrong ? i + 1 : i, 
-1);
-
-            assertTrue(wrong != res.success());
-
-            if (wrong)
-                assertEquals(c.get(key), res.value());
-        }
-
-        for (int i = 0; i < cnt; i++) {
-            boolean success = i % 2 != 0;
-
-            String key = "k" + i;
-
-            GridCacheReturn<Integer> res = c.removex(key, -1);
-
-            assertTrue(success == res.success());
-
-            if (!success)
-                assertEquals(c.get(key), res.value());
-        }
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testGet() throws Exception {
-        cache().put("key1", 1);
-        cache().put("key2", 2);
-
-        assert cache().get("key1") == 1;
-        assert cache().get("key2") == 2;
-        assert cache().get("wrongKey") == null;
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testGetFiltered() throws Exception {
-        cache().put("key1", 1);
-        cache().put("key2", 100);
-
-        assert cache().projection(gte100).get("key1") == null;
-        assert cache().projection(gte100).get("key2") == 100;
-        assert cache().projection(gte100).get("key50") == null;
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testGetAsync() throws Exception {
-        cache().put("key1", 1);
-        cache().put("key2", 2);
-
-        IgniteFuture<Integer> fut1 = cache().getAsync("key1");
-        IgniteFuture<Integer> fut2 = cache().getAsync("key2");
-        IgniteFuture<Integer> fut3 = cache().getAsync("wrongKey");
-
-        assert fut1.get() == 1;
-        assert fut2.get() == 2;
-        assert fut3.get() == null;
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testGetAsyncFiltered() throws Exception {
-        cache().put("key1", 1);
-        cache().put("key2", 100);
-
-        IgniteFuture<Integer> fut1 = 
cache().projection(gte100).getAsync("key1");
-        IgniteFuture<Integer> fut2 = 
cache().projection(gte100).getAsync("key2");
-
-        assert fut1.get() == null;
-        assert fut2.get() == 100;
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testGetAll() throws Exception {
-        IgniteTx tx = txEnabled() ? cache().txStart() : null;
-
-        cache().put("key1", 1);
-        cache().put("key2", 2);
-
-        if (tx != null)
-            tx.commit();
-
-        assert cache().getAll(null).isEmpty();
-        assert cache().getAll(Collections.<String>emptyList()).isEmpty();
-
-        Map<String, Integer> map1 = cache().getAll(F.asList("key1", "key2", 
"key9999"));
-
-        info("Retrieved map1: " + map1);
-
-        assert 2 == map1.size() : "Invalid map: " + map1;
-
-        assertEquals(1, (int)map1.get("key1"));
-        assertEquals(2, (int)map1.get("key2"));
-        assertNull(map1.get("key9999"));
-
-        Map<String, Integer> map2 = cache().getAll(F.asList("key1", "key2", 
"key9999"));
-
-        info("Retrieved map2: " + map2);
-
-        assert 2 == map2.size() : "Invalid map: " + map2;
-
-        assertEquals(1, (int)map2.get("key1"));
-        assertEquals(2, (int)map2.get("key2"));
-        assertNull(map2.get("key9999"));
-
-        // Now do the same checks but within transaction.
-        if (txEnabled()) {
-            tx = cache().txStart();
-
-            assert cache().getAll(null).isEmpty();
-            assert cache().getAll(Collections.<String>emptyList()).isEmpty();
-
-            map1 = cache().getAll(F.asList("key1", "key2", "key9999"));
-
-            info("Retrieved map1: " + map1);
-
-            assert 2 == map1.size() : "Invalid map: " + map1;
-
-            assertEquals(1, (int)map1.get("key1"));
-            assertEquals(2, (int)map1.get("key2"));
-            assertNull(map1.get("key9999"));
-
-            map2 = cache().getAll(F.asList("key1", "key2", "key9999"));
-
-            info("Retrieved map2: " + map2);
-
-            assert 2 == map2.size() : "Invalid map: " + map2;
-
-            assertEquals(1, (int)map2.get("key1"));
-            assertEquals(2, (int)map2.get("key2"));
-            assertNull(map2.get("key9999"));
-
-            tx.commit();
-        }
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testGetAllWithNulls() throws Exception {
-        GridCache<String, Integer> cache = cache();
-
-        Collection<String> c = new LinkedList<>();
-
-        c.add("key1");
-        c.add(null);
-
-        cache.getAll(c);
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testGetAllDuplicates() throws Exception {
-        cache().getAll(F.asList("key1", "key1", "key1"));
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testGetAllDuplicatesTx() throws Exception {
-        if (txEnabled()) {
-            try (IgniteTx ignored = cache().txStart(PESSIMISTIC, 
REPEATABLE_READ)) {
-                cache().getAll(F.asList("key1", "key1", "key1"));
-            }
-        }
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testGetTxNonExistingKey() throws Exception {
-        if (txEnabled()) {
-            try (IgniteTx ignored = cache().txStart()) {
-                cache().get("key999123");
-            }
-        }
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testGetAllFilteredTx() throws Exception {
-        if (txEnabled()) {
-            IgniteTx tx = cache().txStart();
-
-            cache().put("key1", 100);
-            cache().put("key2", 101);
-            cache().put("key3", 200);
-            cache().put("key4", 201);
-
-            tx.commit();
-
-            tx.close();
-
-            tx = cache().txStart(PESSIMISTIC, REPEATABLE_READ);
-
-            try {
-                Map<String, Integer> map1 = cache().projection(gte200).getAll(
-                    F.asList("key1", "key2", "key3", "key4", "key9999"));
-
-                assertEquals("Invalid map size: " + map1, 2, map1.size());
-
-                assert map1.get("key1") == null;
-                assert map1.get("key2") == null;
-                assert map1.get("key3") == 200;
-                assert map1.get("key4") == 201;
-
-                map1 = cache().projection(gte200).getAll(F.asList("key1", 
"key2"));
-
-                assertEquals("Invalid map size: " + map1, 0, map1.size());
-
-                assert map1.get("key1") == null;
-                assert map1.get("key2") == null;
-                assert map1.get("key3") == null;
-                assert map1.get("key4") == null;
-
-                map1 = cache().projection(gte200).getAll(F.asList("key1", 
"key2"));
-
-                assertEquals("Invalid map size: " + map1, 0, map1.size());
-
-                assert map1.get("key1") == null;
-                assert map1.get("key2") == null;
-                assert map1.get("key3") == null;
-                assert map1.get("key4") == null;
-            }
-            finally {
-                tx.close();
-            }
-        }
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testGetAllFiltered() throws Exception {
-        cache().put("key1", 100);
-        cache().put("key2", 101);
-        cache().put("key3", 200);
-        cache().put("key4", 201);
-
-        Map<String, Integer> map1 = cache().projection(gte100).getAll(
-            F.asList("key1", "key2", "key3", "key4", "key9999"));
-
-        assertEquals("Invalid map size: " + map1, 4, map1.size());
-
-        assert map1.get("key1") == 100;
-        assert map1.get("key2") == 101;
-        assert map1.get("key3") == 200;
-        assert map1.get("key4") == 201;
-
-        Map<String, Integer> map2 = cache().projection(gte200).getAll(
-            F.asList("key1", "key2", "key3", "key4", "key9999"));
-
-        assertEquals("Invalid map size: " + map2, 2, map2.size());
-
-        assert map2.get("key1") == null;
-        assert map2.get("key2") == null;
-        assert map2.get("key3") == 200;
-        assert map2.get("key4") == 201;
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testGetAllAsync() throws Exception {
-        cache().put("key1", 1);
-        cache().put("key2", 2);
-
-        IgniteFuture<Map<String, Integer>> fut1 = cache().getAllAsync(null);
-        IgniteFuture<Map<String, Integer>> fut2 = 
cache().getAllAsync(Collections.<String>emptyList());
-        IgniteFuture<Map<String, Integer>> fut3 = 
cache().getAllAsync(F.asList("key1", "key2"));
-
-        assert fut1.get().isEmpty();
-        assert fut2.get().isEmpty();
-        assert fut3.get().size() == 2 : "Invalid map: " + fut3.get();
-        assert fut3.get().get("key1") == 1;
-        assert fut3.get().get("key2") == 2;
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testGetAllAsyncFiltered() throws Exception {
-        cache().put("key1", 100);
-        cache().put("key2", 101);
-        cache().put("key3", 200);
-        cache().put("key4", 201);
-
-        List<String> keys = F.asList("key1", "key2", "key3", "key4");
-
-        IgniteFuture<Map<String, Integer>> fut1 = 
cache().projection(gte100).getAllAsync(keys);
-        IgniteFuture<Map<String, Integer>> fut2 = 
cache().projection(gte200).getAllAsync(keys);
-
-        assert fut1.get().size() == 4 : "Invalid map: " + fut1.get();
-        assert fut1.get().get("key1") == 100;
-        assert fut1.get().get("key2") == 101;
-        assert fut1.get().get("key3") == 200;
-        assert fut1.get().get("key4") == 201;
-
-        assert fut2.get().size() == 2 : "Invalid map: " + fut2.get();
-        assert fut2.get().get("key1") == null;
-        assert fut2.get().get("key2") == null;
-        assert fut2.get().get("key3") == 200;
-        assert fut2.get().get("key4") == 201;
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testPut() throws Exception {
-        assert cache().put("key1", 1) == null;
-        assert cache().put("key2", 2) == null;
-
-        // Check inside transaction.
-        assert cache().get("key1") == 1;
-        assert cache().get("key2") == 2;
-
-        // Put again to check returned values.
-        assert cache().put("key1", 1) == 1;
-        assert cache().put("key2", 2) == 2;
-
-        checkContainsKey(true, "key1");
-        checkContainsKey(true, "key2");
-
-        assert cache().get("key1") != null;
-        assert cache().get("key2") != null;
-        assert cache().get("wrong") == null;
-
-        // Check outside transaction.
-        checkContainsKey(true, "key1");
-        checkContainsKey(true, "key2");
-
-        assert cache().get("key1") == 1;
-        assert cache().get("key2") == 2;
-        assert cache().get("wrong") == null;
-
-        assertEquals((Integer)1, cache().put("key1", 10));
-        assertEquals((Integer)2, cache().put("key2", 11));
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testPutTx() throws Exception {
-        if (txEnabled()) {
-            IgniteTx tx = cache().txStart();
-
-            assert cache().put("key1", 1) == null;
-            assert cache().put("key2", 2) == null;
-
-            // Check inside transaction.
-            assert cache().get("key1") == 1;
-            assert cache().get("key2") == 2;
-
-            // Put again to check returned values.
-            assert cache().put("key1", 1) == 1;
-            assert cache().put("key2", 2) == 2;
-
-            checkContainsKey(true, "key1");
-            checkContainsKey(true, "key2");
-
-            assert cache().get("key1") != null;
-            assert cache().get("key2") != null;
-            assert cache().get("wrong") == null;
-
-            tx.commit();
-
-            // Check outside transaction.
-            checkContainsKey(true, "key1");
-            checkContainsKey(true, "key2");
-
-            assert cache().get("key1") == 1;
-            assert cache().get("key2") == 2;
-            assert cache().get("wrong") == null;
-
-            assertEquals((Integer)1, cache().put("key1", 10));
-            assertEquals((Integer)2, cache().put("key2", 11));
-        }
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testTransformOptimisticReadCommitted() throws Exception {
-        checkTransform(OPTIMISTIC, READ_COMMITTED);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testTransformOptimisticRepeatableRead() throws Exception {
-        checkTransform(OPTIMISTIC, REPEATABLE_READ);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testTransformPessimisticReadCommitted() throws Exception {
-        checkTransform(PESSIMISTIC, READ_COMMITTED);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testTransformPessimisticRepeatableRead() throws Exception {
-        checkTransform(PESSIMISTIC, REPEATABLE_READ);
-    }
-
-    /**
-     * @param concurrency Concurrency.
-     * @param isolation Isolation.
-     * @throws Exception If failed.
-     */
-    private void checkTransform(IgniteTxConcurrency concurrency, 
IgniteTxIsolation isolation) throws Exception {
-        IgniteCache<String, Integer> cache = jcache();
-
-        cache.put("key2", 1);
-        cache.put("key3", 3);
-
-        IgniteTx tx = txEnabled() ? 
ignite(0).transactions().txStart(concurrency, isolation) : null;
-
-        try {
-            assertEquals("null", cache.invoke("key1", INCR_PROCESSOR));
-            assertEquals("1", cache.invoke("key2", INCR_PROCESSOR));
-            assertEquals("3", cache.invoke("key3", RMV_PROCESSOR));
-
-            if (tx != null)
-                tx.commit();
-        }
-        catch (Exception e) {
-            e.printStackTrace();
-
-            throw e;
-        }
-        finally {
-            if (tx != null)
-                tx.close();
-        }
-
-        assertEquals((Integer)1, cache.get("key1"));
-        assertEquals((Integer)2, cache.get("key2"));
-        assertNull(cache.get("key3"));
-
-        for (int i = 0; i < gridCount(); i++)
-            assertNull("Failed for cache: " + i, cache(i).peek("key3"));
-
-        cache.remove("key1");
-        cache.put("key2", 1);
-        cache.put("key3", 3);
-
-        assertEquals("null", cache.invoke("key1", INCR_PROCESSOR));
-        assertEquals("1", cache.invoke("key2", INCR_PROCESSOR));
-        assertEquals("3", cache.invoke("key3", RMV_PROCESSOR));
-
-        assertEquals((Integer)1, cache.get("key1"));
-        assertEquals((Integer)2, cache.get("key2"));
-        assertNull(cache.get("key3"));
-
-        for (int i = 0; i < gridCount(); i++)
-            assertNull(cache(i).peek("key3"));
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testTransformAllOptimisticReadCommitted() throws Exception {
-        checkTransformAll(OPTIMISTIC, READ_COMMITTED);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testTransformAllOptimisticRepeatableRead() throws Exception {
-        checkTransformAll(OPTIMISTIC, REPEATABLE_READ);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testTransformAllPessimisticReadCommitted() throws Exception {
-        checkTransformAll(PESSIMISTIC, READ_COMMITTED);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testTransformAllPessimisticRepeatableRead() throws Exception {
-        checkTransformAll(PESSIMISTIC, REPEATABLE_READ);
-    }
-
-    /**
-     * @param concurrency Transaction concurrency.
-     * @param isolation Transaction isolation.
-     * @throws Exception If failed.
-     */
-    private void checkTransformAll(IgniteTxConcurrency concurrency, 
IgniteTxIsolation isolation)
-        throws Exception {
-        final IgniteCache<String, Integer> cache = jcache();
-
-        cache.put("key2", 1);
-        cache.put("key3", 3);
-
-        if (txEnabled()) {
-            Map<String, EntryProcessorResult<String>> res;
-
-            try (IgniteTx tx = ignite(0).transactions().txStart(concurrency, 
isolation)) {
-                res = cache.invokeAll(F.asSet("key1", "key2", "key3"), 
INCR_PROCESSOR);
-
-                tx.commit();
-            }
-
-            assertEquals((Integer)1, cache.get("key1"));
-            assertEquals((Integer)2, cache.get("key2"));
-            assertEquals((Integer)4, cache.get("key3"));
-
-            assertEquals("null", res.get("key1").get());
-            assertEquals("1", res.get("key2").get());
-            assertEquals("3", res.get("key3").get());
-
-            assertEquals(3, res.size());
-
-            cache.remove("key1");
-            cache.put("key2", 1);
-            cache.put("key3", 3);
-        }
-
-        Map<String, EntryProcessorResult<String>> res = 
cache.invokeAll(F.asSet("key1", "key2", "key3"), RMV_PROCESSOR);
-
-        for (int i = 0; i < gridCount(); i++) {
-            assertNull(cache(i).peek("key1"));
-            assertNull(cache(i).peek("key2"));
-            assertNull(cache(i).peek("key3"));
-        }
-
-        assertEquals("null", res.get("key1").get());
-        assertEquals("1", res.get("key2").get());
-        assertEquals("3", res.get("key3").get());
-
-        assertEquals(3, res.size());
-
-        cache.remove("key1");
-        cache.put("key2", 1);
-        cache.put("key3", 3);
-
-        res = cache.invokeAll(F.asSet("key1", "key2", "key3"), INCR_PROCESSOR);
-
-        assertEquals((Integer)1, cache.get("key1"));
-        assertEquals((Integer)2, cache.get("key2"));
-        assertEquals((Integer)4, cache.get("key3"));
-
-        assertEquals("null", res.get("key1").get());
-        assertEquals("1", res.get("key2").get());
-        assertEquals("3", res.get("key3").get());
-
-        assertEquals(3, res.size());
-
-        cache.remove("key1");
-        cache.put("key2", 1);
-        cache.put("key3", 3);
-
-        res = cache.invokeAll(F.asMap("key1", INCR_PROCESSOR, "key2", 
INCR_PROCESSOR, "key3", INCR_PROCESSOR));
-
-        assertEquals((Integer)1, cache.get("key1"));
-        assertEquals((Integer)2, cache.get("key2"));
-        assertEquals((Integer)4, cache.get("key3"));
-
-        assertEquals("null", res.get("key1").get());
-        assertEquals("1", res.get("key2").get());
-        assertEquals("3", res.get("key3").get());
-
-        assertEquals(3, res.size());
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testTransformAllWithNulls() throws Exception {
-        final IgniteCache<String, Integer> cache = jcache();
-
-        GridTestUtils.assertThrows(log, new Callable<Void>() {
-            @Override public Void call() throws Exception {
-                cache.invokeAll((Set<String>)null, INCR_PROCESSOR);
-
-                return null;
-            }
-        }, NullPointerException.class, null);
-
-        GridTestUtils.assertThrows(log, new Callable<Void>() {
-            @Override public Void call() throws Exception {
-                cache.invokeAll(F.asSet("key1"), null);
-
-                return null;
-            }
-        }, NullPointerException.class, null);
-
-        {
-            Map<String, Integer> m = new HashMap<>(2);
-
-            m.put("key1", 1);
-            m.put(null, 2);
-
-            // WARN: F.asMap() doesn't work here, because it will throw NPE.
-
-            cache.putAll(m);
-        }
-
-        {
-            Set<String> keys = new HashSet<>(2);
-
-            keys.add("key1");
-            keys.add(null);
-
-            // WARN: F.asSet() doesn't work here, because it will throw NPE.
-
-            cache.invokeAll(keys, INCR_PROCESSOR);
-        }
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testTransformSequentialOptimisticNoStart() throws Exception {
-        checkTransformSequential0(false, OPTIMISTIC);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testTransformSequentialPessimisticNoStart() throws Exception {
-        checkTransformSequential0(false, PESSIMISTIC);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testTransformSequentialOptimisticWithStart() throws Exception {
-        checkTransformSequential0(true, OPTIMISTIC);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testTransformSequentialPessimisticWithStart() throws Exception 
{
-        checkTransformSequential0(true, PESSIMISTIC);
-    }
-
-    /**
-     * @param startVal Whether to put value.
-     * @param concurrency Concurrency.
-     * @throws Exception If failed.
-     */
-    private void checkTransformSequential0(boolean startVal, 
IgniteTxConcurrency concurrency)
-        throws Exception {
-        IgniteCache<String, Integer> cache = jcache();
-
-        IgniteTx tx = txEnabled() ? 
ignite(0).transactions().txStart(concurrency, READ_COMMITTED) : null;
-
-        try {
-            if (startVal)
-                cache.put("key", 2);
-
-            cache.invoke("key", INCR_PROCESSOR);
-            cache.invoke("key", INCR_PROCESSOR);
-            cache.invoke("key", INCR_PROCESSOR);
-
-            if (tx != null)
-                tx.commit();
-        }
-        finally {
-            if (tx != null)
-                tx.close();
-        }
-
-        Integer exp = (startVal ? 2 : 0) + 3;
-
-        assertEquals(exp, cache.get("key"));
-
-        for (int i = 0; i < gridCount(); i++) {
-            if (cache(i).affinity().isPrimaryOrBackup(grid(i).localNode(), 
"key"))
-                assertEquals(exp, peek(cache(i), "key"));
-        }
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testTransformAfterRemoveOptimistic() throws Exception {
-        checkTransformAfterRemove(OPTIMISTIC);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testTransformAfterRemovePessimistic() throws Exception {
-        checkTransformAfterRemove(PESSIMISTIC);
-    }
-
-    /**
-     * @param concurrency Concurrency.
-     * @throws Exception If failed.
-     */
-    private void checkTransformAfterRemove(IgniteTxConcurrency concurrency) 
throws Exception {
-        IgniteCache<String, Integer> cache = jcache();
-
-        cache.put("key", 4);
-
-        IgniteTx tx = txEnabled() ? 
ignite(0).transactions().txStart(concurrency, READ_COMMITTED) : null;
-
-        try {
-            cache.remove("key");
-
-            cache.invoke("key", INCR_PROCESSOR);
-            cache.invoke("key", INCR_PROCESSOR);
-            cache.invoke("key", INCR_PROCESSOR);
-
-            if (tx != null)
-                tx.commit();
-        }
-        finally {
-            if (tx != null)
-                tx.close();
-        }
-
-        assertEquals((Integer)3, cache.get("key"));
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testTransformReturnValueGetOptimisticReadCommitted() throws 
Exception {
-        checkTransformReturnValue(false, OPTIMISTIC, READ_COMMITTED);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testTransformReturnValueGetOptimisticRepeatableRead() throws 
Exception {
-        checkTransformReturnValue(false, OPTIMISTIC, REPEATABLE_READ);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testTransformReturnValueGetPessimisticReadCommitted() throws 
Exception {
-        checkTransformReturnValue(false, PESSIMISTIC, READ_COMMITTED);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testTransformReturnValueGetPessimisticRepeatableRead() throws 
Exception {
-        checkTransformReturnValue(false, PESSIMISTIC, REPEATABLE_READ);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testTransformReturnValuePutInTx() throws Exception {
-        checkTransformReturnValue(true, OPTIMISTIC, READ_COMMITTED);
-    }
-
-    /**
-     * @param put Whether to put value.
-     * @param concurrency Concurrency.
-     * @param isolation Isolation.
-     * @throws Exception If failed.
-     */
-    private void checkTransformReturnValue(boolean put,
-        IgniteTxConcurrency concurrency,
-        IgniteTxIsolation isolation)
-        throws Exception
-    {
-        IgniteCache<String, Integer> cache = jcache();
-
-        if (!put)
-            cache.put("key", 1);
-
-        IgniteTx tx = txEnabled() ? 
ignite(0).transactions().txStart(concurrency, isolation) : null;
-
-        try {
-            if (put)
-                cache.put("key", 1);
-
-            cache.invoke("key", INCR_PROCESSOR);
-
-            assertEquals((Integer)2, cache.get("key"));
-
-            if (tx != null) {
-                // Second get inside tx. Make sure read value is not 
transformed twice.
-                assertEquals((Integer)2, cache.get("key"));
-
-                tx.commit();
-            }
-        }
-        finally {
-            if (tx != null)
-                tx.close();
-        }
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testPutFiltered() throws Exception {
-        IgniteTx tx = txEnabled() ? cache().txStart() : null;
-
-        cache().put("key1", 1, F.<String, Integer>cacheNoPeekValue());
-        cache().put("key2", 100, gte100);
-
-        if (tx != null)
-            tx.commit();
-
-        checkSize(F.asSet("key1"));
-
-        assert cache().get("key1") == 1;
-
-        Integer i = cache().get("key2");
-
-        assert i == null : "Why not null?: " + i;
-    }
-
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testPutAsync() throws Exception {
-        cache().put("key1", 1);
-        cache().put("key2", 2);
-
-        IgniteFuture<Integer> fut1 = cache().putAsync("key1", 10);
-        IgniteFuture<Integer> fut2 = cache().putAsync("key2", 11);
-
-        assertEquals((Integer)1, fut1.get(5000));
-        assertEquals((Integer)2, fut2.get(5000));
-
-        assertEquals((Integer)10, cache().get("key1"));
-        assertEquals((Integer)11, cache().get("key2"));
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testPutAsync0() throws Exception {
-        IgniteFuture<Integer> fut1 = cache().putAsync("key1", 0);
-        IgniteFuture<Integer> fut2 = cache().putAsync("key2", 1);
-
-        assert fut1.get(5000) == null;
-        assert fut2.get(5000) == null;
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testInvokeAsync() throws Exception {
-        IgniteCache<String, Integer> cache = jcache();
-
-        cache.put("key2", 1);
-        cache.put("key3", 3);
-
-        cache = cache.enableAsync();
-
-        assertNull(cache.invoke("key1", INCR_PROCESSOR));
-
-        IgniteFuture<?> fut0 = cache.future();
-
-        assertNull(cache.invoke("key2", INCR_PROCESSOR));
-
-        IgniteFuture<?> fut1 = cache.future();
-
-        assertNull(cache.invoke("key3", RMV_PROCESSOR));
-
-        IgniteFuture<?> fut2 = cache.future();
-
-        fut0.get();
-        fut1.get();
-        fut2.get();
-
-        assertEquals((Integer)1, cache.get("key1"));
-        assertEquals((Integer)2, cache.get("key2"));
-        assertNull(cache.get("key3"));
-
-        for (int i = 0; i < gridCount(); i++)
-            assertNull(cache(i).peek("key3"));
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testInvoke() throws Exception {
-        final IgniteCache<String, Integer> cache = jcache();
-
-        assertEquals("null", cache.invoke("k0", INCR_PROCESSOR));
-
-        assertEquals((Integer)1, cache.get("k0"));
-
-        assertEquals("1", cache.invoke("k0", INCR_PROCESSOR));
-
-        assertEquals((Integer)2, cache.get("k0"));
-
-        cache.put("k1", 1);
-
-        assertEquals("1", cache.invoke("k1", INCR_PROCESSOR));
-
-        assertEquals((Integer)2, cache.get("k1"));
-
-        assertEquals("2", cache.invoke("k1", INCR_PROCESSOR));
-
-        assertEquals((Integer)3, cache.get("k1"));
-
-        EntryProcessor<String, Integer, Integer> c = new 
EntryProcessor<String, Integer, Integer>() {
-            @Override public Integer process(MutableEntry<String, Integer> e, 
Object... args) {
-                e.remove();
-
-                return null;
-            }
-        };
-
-        assertNull(cache.invoke("k1", c));
-        assertNull(cache.get("k1"));
-
-        for (int i = 0; i < gridCount(); i++)
-            assertNull(cache(i).peek("k1"));
-
-        final EntryProcessor<String, Integer, Integer> errProcessor = new 
EntryProcessor<String, Integer, Integer>() {
-            @Override public Integer process(MutableEntry<String, Integer> e, 
Object... args) {
-                throw new EntryProcessorException("Test entry processor 
exception.");
-            }
-        };
-
-        GridTestUtils.assertThrows(log, new Callable<Void>() {
-            @Override public Void call() throws Exception {
-                cache.invoke("k1", errProcessor);
-
-                return null;
-            }
-        }, EntryProcessorException.class, "Test entry processor exception.");
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testPutAsyncFiltered() throws Exception {
-        IgniteTx tx = txEnabled() ? cache().txStart() : null;
-
-        assert cache().putAsync("key1", 1, gte100).get() == null;
-        assert cache().putAsync("key2", 101, F.<String, 
Integer>cacheNoPeekValue()).get() == null;
-
-        if (tx != null)
-            tx.commit();
-
-        checkSize(F.asSet("key2"));
-
-        assert cache().get("key1") == null;
-        assert cache().get("key2") == 101;
-
-        assert cache().putAsync("key2", 102, F.<String, 
Integer>cacheNoPeekValue()).get() == 101;
-        assert cache().putAsync("key2", 103, F.<String, 
Integer>cacheHasPeekValue()).get() == 101;
-
-        checkSize(F.asSet("key2"));
-
-        assert cache().get("key1") == null;
-        assert cache().get("key2") == 103;
-
-        if (lockingEnabled()) {
-            assert !cache().isLocked("key1");
-            assert !cache().isLocked("key2");
-        }
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testPutx() throws Exception {
-        if (txEnabled())
-            checkPutx(true);
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testPutxNoTx() throws Exception {
-        checkPutx(false);
-    }
-
-    /**
-     * @param inTx Whether to start transaction.
-     * @throws Exception If failed.
-     */
-    private void checkPutx(boolean inTx) throws Exception {
-        IgniteTx tx = inTx ? cache().txStart() : null;
-
-        assert cache().putx("key1", 1);
-        assert cache().putx("key2", 2);
-        assert !cache().putx("wrong", 3, gte100);
-
-        // Check inside transaction.
-        assert cache().get("key1") == 1;
-        assert cache().get("key2") == 2;
-
-        if (tx != null)
-            tx.commit();
-
-        checkSize(F.asSet("key1", "key2"));
-
-        // Check outside transaction.
-        checkContainsKey(true, "key1");
-        checkContainsKey(true, "key2");
-        checkContainsKey(false, "wrong");
-
-        checkContainsValue(true, 1);
-        checkContainsValue(true, 2);
-
-        assert cache().get("key1") == 1;
-        assert cache().get("key2") == 2;
-        assert cache().get("wrong") == null;
-
-        assert cache().putx("key1", 100, F.<String, 
Integer>cacheContainsPeek(1));
-        assert cache().putx("key1", 101, gte100);
-        assert !cache().putx("key1", 102, gte200);
-
-        checkContainsValue(false, 1);
-        checkContainsValue(true, 101);
-        checkContainsValue(true, 2);
-
-        checkSize(F.asSet("key1", "key2"));
-
-        checkContainsKey(true, "key1");
-        checkContainsKey(true, "key2");
-        checkContainsKey(false, "wrong");
-
-        assert cache().get("key1") == 101;
-        assert cache().get("key2") == 2;
-        assert cache().get("wrong") == null;
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testFiltersOptimistic1() throws Exception {
-        checkFilters1(OPTIMISTIC, REPEATABLE_READ);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testFiltersPessimistic1() throws Exception {
-        checkFilters1(PESSIMISTIC, REPEATABLE_READ);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testFiltersOptimistic2() throws Exception {
-        checkFilters2(OPTIMISTIC, REPEATABLE_READ);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testFiltersPessimistic2() throws Exception {
-        checkFilters2(PESSIMISTIC, REPEATABLE_READ);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testFiltersOptimistic3() throws Exception {
-        checkFilters3(OPTIMISTIC, REPEATABLE_READ);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testFiltersPessimistic3() throws Exception {
-        checkFilters3(PESSIMISTIC, REPEATABLE_READ);
-    }
-
-    /**
-     * Check that empty filter is not overwritten with non-empty.
-     *
-     * @param concurrency Tx concurrency.
-     * @param isolation Tx isolation.
-     * @throws Exception If failed.
-     */
-    private void checkFilters1(IgniteTxConcurrency concurrency, 
IgniteTxIsolation isolation) throws Exception {
-        cache().putx("key1", 0);
-
-        IgniteTx tx = txEnabled() ? cache().txStart(concurrency, isolation) : 
null;
-
-        try {
-            assert cache().putx("key1", 100);
-            assert cache().putx("key1", 101, gte100);
-            assert cache().putx("key1", 1, gte100);
-
-            // Check inside transaction.
-            assert cache().get("key1") == 1;
-
-            if (tx != null)
-                tx.commit();
-        }
-        finally {
-            if (tx != null)
-                tx.close();
-        }
-
-        // Check outside transaction.
-        boolean passed = false;
-
-        for (int i = 0; i < gridCount(); i++)
-            passed |= containsKey(cache(i), "key1");
-
-        assert passed;
-
-        assertEquals((Integer)1, cache().get("key1"));
-    }
-
-    /**
-     * Check that failed filter overwritten with passed.
-     *
-     * @param concurrency Tx concurrency.
-     * @param isolation Tx isolation.
-     * @throws Exception If failed.
-     */
-    private void checkFilters2(IgniteTxConcurrency concurrency, 
IgniteTxIsolation isolation) throws Exception {
-        cache().putx("key1", 100);
-
-        IgniteTx tx = txEnabled() ? cache().txStart(concurrency, isolation) : 
null;
-
-        try {
-            cache().put("key1", 101, F.<GridCacheEntry<String, 
Integer>>alwaysFalse());
-            cache().put("key1", 101, F.<GridCacheEntry<String, 
Integer>>alwaysTrue());
-
-            // Check inside transaction.
-            assertEquals((Integer)101, cache().get("key1"));
-
-            if (tx != null)
-                tx.commit();
-        }
-        finally {
-            if (tx != null)
-                tx.close();
-        }
-
-        // Check outside transaction.
-        boolean passed = false;
-
-        for (int i = 0; i < gridCount(); i++)
-            passed |= containsKey(cache(i), "key1");
-
-        assert passed;
-
-        assertEquals((Integer)101, cache().get("key1"));
-    }
-
-    /**
-     * Check that passed filter is not overwritten with failed.
-     *
-     * @param concurrency Tx concurrency.
-     * @param isolation Tx isolation.
-     * @throws Exception If failed.
-     */
-    private void checkFilters3(IgniteTxConcurrency concurrency, 
IgniteTxIsolation isolation) throws Exception {
-        cache().putx("key1", 100);
-
-        IgniteTx tx = txEnabled() ? cache().txStart(concurrency, isolation) : 
null;
-
-        try {
-            assertEquals((Integer)100, cache().put("key1", 101, 
F.<GridCacheEntry<String, Integer>>alwaysTrue()));
-
-            assertEquals((Integer)101, cache().get("key1"));
-
-            cache().put("key1", 102, F.<GridCacheEntry<String, 
Integer>>alwaysFalse());
-
-            // Check inside transaction.
-            assertEquals((Integer)101, cache().get("key1"));
-
-            if (tx != null)
-                tx.commit();
-        }
-        finally {
-            if (tx != null)
-                tx.close();
-        }
-
-        // Check outside transaction.
-        boolean passed = false;
-
-        for (int i = 0; i < gridCount(); i++)
-            passed |= containsKey(cache(i), "key1");
-
-        assert passed;
-
-        assertEquals((Integer)101, cache().get("key1"));
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testPutxFiltered() throws Exception {
-        IgniteTx tx = txEnabled() ? cache().txStart() : null;
-
-        try {
-            cache().putx("key1", 1, F.<String, Integer>cacheHasPeekValue());
-            cache().putx("key2", 100, F.<String, Integer>cacheNoPeekValue());
-
-            if (tx != null)
-                tx.commit();
-        }
-        finally {
-            if (tx != null)
-                tx.close();
-        }
-
-        checkSize(F.asSet("key2"));
-
-        assert cache().get("key1") == null;
-        assert cache().get("key2") == 100;
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testPutxAsync() throws Exception {
-        IgniteTx tx = txEnabled() ? cache().txStart() : null;
-
-        cache().put("key2", 1);
-
-        IgniteFuture<Boolean> fut1 = cache().putxAsync("key1", 10);
-        IgniteFuture<Boolean> fut2 = cache().putxAsync("key2", 11);
-
-        IgniteFuture<IgniteTx> f = null;
-
-        if (tx != null) {
-            tx = (IgniteTx)tx.enableAsync();
-
-            tx.commit();
-
-            f = tx.future();
-        }
-
-        assert fut1.get();
-        assert fut2.get();
-
-        assert f == null || f.get().state() == COMMITTED;
-
-        checkSize(F.asSet("key1", "key2"));
-
-        assert cache().get("key1") == 10;
-        assert cache().get("key2") == 11;
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testPutxAsyncFiltered() throws Exception {
-        IgniteFuture<Boolean> f1 = cache().putxAsync("key1", 1);
-        IgniteFuture<Boolean> f2 = cache().putxAsync("key1", 101, F.<String, 
Integer>cacheHasPeekValue());
-        IgniteFuture<Boolean> f3 = cache().putxAsync("key2", 2);
-        IgniteFuture<Boolean> f4 = cache().putxAsync("key2", 202, F.<String, 
Integer>cacheHasPeekValue());
-        IgniteFuture<Boolean> f5 = cache().putxAsync("key1", 1, F.<String, 
Integer>cacheNoPeekValue());
-        IgniteFuture<Boolean> f6 = cache().putxAsync("key2", 2, F.<String, 
Integer>cacheNoPeekValue());
-
-        assert f1.get() : "Invalid future1: " + f1;
-        assert f2.get() : "Invalid future2: " + f2;
-        assert f3.get() : "Invalid future3: " + f3;
-        assert f4.get() : "Invalid future4: " + f4;
-
-        assert !f5.get() : "Invalid future5: " + f5;
-        assert !f6.get() : "Invalid future6: " + f6;
-
-        checkSize(F.asSet("key1", "key2"));
-
-        assertEquals((Integer)101, cache().get("key1"));
-        assertEquals((Integer)202, cache().get("key2"));
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testPutAll() throws Exception {
-        Map<String, Integer> map = F.asMap("key1", 1, "key2", 2);
-
-        cache().putAll(map);
-
-        checkSize(F.asSet("key1", "key2"));
-
-        assert cache().get("key1") == 1;
-        assert cache().get("key2") == 2;
-
-        map.put("key1", 10);
-        map.put("key2", 20);
-
-        cache().putAll(map);
-
-        checkSize(F.asSet("key1", "key2"));
-
-        assert cache().get("key1") == 10;
-        assert cache().get("key2") == 20;
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testPutAllWithNulls() throws Exception {
-        final GridCache<String, Integer> cache = cache();
-
-        {
-            Map<String, Integer> m = new HashMap<>(2);
-
-            m.put("key1", 1);
-            m.put(null, 2);
-
-            // WARN: F.asMap() doesn't work here, because it will throw NPE.
-
-            cache.putAll(m);
-
-            assertNotNull(cache.get("key1"));
-        }
-
-        {
-            Map<String, Integer> m = new HashMap<>(2);
-
-            m.put("key3", 3);
-            m.put("key4", null);
-
-            cache.putAll(m);
-
-            assertNotNull(cache.get("key3"));
-            assertNull(cache.get("key4"));
-        }
-
-        assertThrows(log, new Callable<Object>() {
-            @Nullable @Override public Object call() throws Exception {
-                cache.put("key1", null);
-
-                return null;
-            }
-        }, NullPointerException.class, A.NULL_MSG_PREFIX);
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testPutAllFiltered() throws Exception {
-        Map<String, Integer> map = F.asMap("key1", 1, "key2", 2);
-
-        cache().putAll(map, F.<String, Integer>cacheNoPeekValue());
-
-        checkSize(F.asSet("key1", "key2"));
-
-        assert cache().get("key1") == 1;
-        assert cache().get("key2") == 2;
-
-        map.put("key1", 10);
-        map.put("key2", 20);
-
-        map.put("key3", 3);
-
-        cache().putAll(map, F.<String, Integer>cacheNoPeekValue());
-
-        checkSize(F.asSet("key1", "key2", "key3"));
-
-        assert cache().get("key1") == 1;
-        assert cache().get("key2") == 2;
-        assert cache().get("key3") == 3;
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testPutAllAsync() throws Exception {
-        Map<String, Integer> map = F.asMap("key1", 1, "key2", 2);
-
-        IgniteFuture<?> f1 = cache().putAllAsync(map);
-
-        map.put("key1", 10);
-        map.put("key2", 20);
-
-        IgniteFuture<?> f2 = cache().putAllAsync(map);
-
-        f2.get();
-        f1.get();
-
-        checkSize(F.asSet("key1", "key2"));
-
-        assert cache().get("key1") == 10;
-        assert cache().get("key2") == 20;
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testPutAllAsyncFiltered() throws Exception {
-        Map<String, Integer> map1 = F.asMap("key1", 1, "key2", 2);
-
-        IgniteFuture<?> f1 = cache().putAllAsync(map1, F.<String, 
Integer>cacheNoPeekValue());
-
-        Map<String, Integer> map2 = F.asMap("key1", 10, "key2", 20, "key3", 3);
-
-        IgniteFuture<?> f2 = cache().putAllAsync(map2, F.<String, 
Integer>cacheNoPeekValue());
-
-        f2.get();
-        f1.get();
-
-        checkSize(F.asSet("key1", "key2", "key3"));
-
-        assert cache().get("key1") == 1;
-        assert cache().get("key2") == 2;
-        assert cache().get("key3") == 3;
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testPutIfAbsent() throws Exception {
-        IgniteTx tx = txEnabled() ? cache().txStart() : null;
-
-        try {
-            assert cache().putIfAbsent("key", 1) == null;
-
-            assert cache().get("key") != null;
-            assert cache().get("key") == 1;
-
-            assert cache().putIfAbsent("key", 2) != null;
-            assert cache().putIfAbsent("key", 2) == 1;
-
-            assert cache().get("key") != null;
-            assert cache().get("key") == 1;
-
-            if (tx != null)
-                tx.commit();
-        }
-        finally {
-            if (tx != null)
-                tx.close();
-        }
-
-        assert cache().putIfAbsent("key", 2) != null;
-
-        for (int i = 0; i < gridCount(); i++) {
-            info("Peek on node [i=" + i + ", id=" + grid(i).localNode().id() + 
", val=" +
-                grid(i).cache(null).peek("key") + ']');
-        }
-
-        assertEquals((Integer)1, cache().putIfAbsent("key", 2));
-
-        assert cache().get("key") != null;
-        assert cache().get("key") == 1;
-
-        // Check swap.
-        cache().put("key2", 1);
-
-        assertTrue(cache().evict("key2"));
-
-        assertEquals((Integer)1, cache().putIfAbsent("key2", 3));
-
-        // Check db.
-        putToStore("key3", 3);
-
-        assertEquals((Integer)3, cache().putIfAbsent("key3", 4));
-
-        assertEquals((Integer)1, cache().get("key2"));
-        assertEquals((Integer)3, cache().get("key3"));
-
-        cache().evict("key2");
-        cache().clear("key3");
-
-        // Same checks inside tx.
-        tx = txEnabled() ? cache().txStart() : null;
-
-        try {
-            assertEquals((Integer)1, cache().putIfAbsent("key2", 3));
-            assertEquals((Integer)3, cache().putIfAbsent("key3", 4));
-
-            if (tx != null)
-                tx.commit();
-
-            assertEquals((Integer)1, cache().get("key2"));
-            assertEquals((Integer)3, cache().get("key3"));
-        }
-        finally {
-            if (tx != null)
-                tx.close();
-        }
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testPutIfAbsentAsync() throws Exception {
-        IgniteTx tx = txEnabled() ? cache().txStart() : null;
-
-        try {
-            IgniteFuture<Integer> fut1 = cache().putIfAbsentAsync("key", 1);
-
-            assert fut1.get() == null;
-            assert cache().get("key") != null && cache().get("key") == 1;
-
-            IgniteFuture<Integer> fut2 = cache().putIfAbsentAsync("key", 2);
-
-            assert fut2.get() != null && fut2.get() == 1;
-            assert cache().get("key") != null && cache().get("key") == 1;
-
-            if (tx != null)
-                tx.commit();
-        }
-        finally {
-            if (tx != null)
-                tx.close();
-        }
-
-        // Check swap.
-        cache().put("key2", 1);
-
-        assertTrue(cache().evict("key2"));
-
-        assertEquals((Integer)1, cache().putIfAbsentAsync("key2", 3).get());
-
-        // Check db.
-        putToStore("key3", 3);
-
-        assertEquals((Integer)3, cache().putIfAbsentAsync("key3", 4).get());
-
-        cache().evict("key2");
-        cache().clear("key3");
-
-        // Same checks inside tx.
-        tx = txEnabled() ? cache().txStart() : null;
-
-        try {
-            assertEquals((Integer)1, cache().putIfAbsentAsync("key2", 
3).get());
-            assertEquals((Integer)3, cache().putIfAbsentAsync("key3", 
4).get());
-
-            if (tx != null)
-                tx.commit();
-
-            assertEquals((Integer)1, cache().get("key2"));
-            assertEquals((Integer)3, cache().get("key3"));
-        }
-        finally {
-            if (tx != null)
-                tx.close();
-        }
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testPutxIfAbsent() throws Exception {
-        assertNull(cache().get("key"));
-        assert cache().putxIfAbsent("key", 1);
-        assert cache().get("key") != null && cache().get("key") == 1;
-        assert !cache().putxIfAbsent("key", 2);
-        assert cache().get("key") != null && cache().get("key") == 1;
-
-        // Check swap.
-        cache().put("key2", 1);
-
-        assertTrue(cache().evict("key2"));
-
-        assertFalse(cache().putxIfAbsent("key2", 3));
-
-        // Check db.
-        putToStore("key3", 3);
-
-        assertFalse(cache().putxIfAbsent("key3", 4));
-
-        cache().evict("key2");
-        cache().clear("key3");
-
-        // Same checks inside tx.
-        IgniteTx tx = txEnabled() ? cache().txStart() : null;
-
-        try {
-            assertFalse(cache().putxIfAbsent("key2", 3));
-            assertFalse(cache().putxIfAbsent("key3", 4));
-
-            if (tx != null)
-                tx.commit();
-
-            assertEquals((Integer)1, cache().get("key2"));
-            assertEquals((Integer)3, cache().get("key3"));
-        }
-        finally {
-            if (tx != null)
-                tx.close();
-        }
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testPutxIfAbsentAsync() throws Exception {
-        if (txEnabled())
-            checkPutxIfAbsentAsync(true);
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testPutxIfAbsentAsyncNoTx() throws Exception {
-        checkPutxIfAbsentAsync(false);
-    }
-
-    /**
-     * @param  inTx In tx flag.
-     * @throws Exception If failed.
-     */
-    private void checkPutxIfAbsentAsync(boolean inTx) throws Exception {
-        IgniteFuture<Boolean> fut1 = cache().putxIfAbsentAsync("key", 1);
-
-        assert fut1.get();
-        assert cache().get("key") != null && cache().get("key") == 1;
-
-        IgniteFuture<Boolean> fut2 = cache().putxIfAbsentAsync("key", 2);
-
-        assert !fut2.get();
-        assert cache().get("key") != null && cache().get("key") == 1;
-
-        // Check swap.
-        cache().put("key2", 1);
-
-        assertTrue(cache().evict("key2"));
-
-        assertFalse(cache().putxIfAbsentAsync("key2", 3).get());
-
-        // Check db.
-        putToStore("key3", 3);
-
-        assertFalse(cache().putxIfAbsentAsync("key3", 4).get());
-
-        cache().evict("key2");
-        cache().clear("key3");
-
-        // Same checks inside tx.
-        IgniteTx tx = inTx ? cache().txStart() : null;
-
-        try {
-            assertFalse(cache().putxIfAbsentAsync("key2", 3).get());
-            assertFalse(cache().putxIfAbsentAsync("key3", 4).get());
-
-            if (tx != null)
-                tx.commit();
-        }
-        finally {
-            if (tx != null)
-                tx.close();
-        }
-
-        assertEquals((Integer)1, cache().get("key2"));
-        assertEquals((Integer)3, cache().get("key3"));
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testPutxIfAbsentAsyncConcurrent() throws Exception {
-        IgniteFuture<Boolean> fut1 = cache().putxIfAbsentAsync("key1", 1);
-        IgniteFuture<Boolean> fut2 = cache().putxIfAbsentAsync("key2", 2);
-
-        assert fut1.get();
-        assert fut2.get();
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testReplace() throws Exception {
-        cache().put("key", 1);
-
-        assert cache().get("key") == 1;
-
-        info("key 1 -> 2");
-
-        assert cache().replace("key", 2) == 1;
-
-        assert cache().get("key") == 2;
-
-        assert cache().replace("wrong", 0) == null;
-
-        assert cache().get("wrong") == null;
-
-        info("key 0 -> 3");
-
-        assert !cache().replace("key", 0, 3);
-
-        assert cache().get("key") == 2;
-
-        info("key 0 -> 3");
-
-        assert !cache().replace("key", 0, 3);
-
-        assert cache().get("key") == 2;
-
-        info("key 2 -> 3");
-
-        assert cache().replace("key", 2, 3);
-
-        assert cache().get("key") == 3;
-
-        info("evict key");
-
-        cache().evict("key");
-
-        info("key 3 -> 4");
-
-        assert cache().replace("key", 3, 4);
-
-        assert cache().get("key") == 4;
-
-        putToStore("key2", 5);
-
-        info("key2 5 -> 6");
-
-        assert cache().replace("key2", 5, 6);
-
-        for (int i = 0; i < gridCount(); i++) {
-            info("Peek key on grid [i=" + i + ", nodeId=" + 
grid(i).localNode().id() +
-                ", peekVal=" + grid(i).cache(null).peek("key") + ']');
-
-            info("Peek key2 on grid [i=" + i + ", nodeId=" + 
grid(i).localNode().id() +
-                ", peekVal=" + grid(i).cache(null).peek("key2") + ']');
-        }
-
-        assertEquals((Integer)6, cache().get("key2"));
-
-        cache().evict("key");
-        cache().clear("key2");
-
-        IgniteTx tx = txEnabled() ? cache().txStart() : null;
-
-        try {
-            assert cache().replace("key", 4, 5);
-            assert cache().replace("key2", 6, 7);
-
-            if (tx != null)
-                tx.commit();
-
-            assert cache().get("key") == 5;
-            assert cache().get("key2") == 7;
-        }
-        finally {
-            if (tx != null)
-                tx.close();
-        }
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testReplacex() throws Exception {
-        cache().put("key", 1);
-
-        assert cache().get("key") == 1;
-
-        assert cache().replacex("key", 2);
-
-        assert cache().get("key") == 2;
-
-        assert !cache().replacex("wrong", 2);
-
-        cache().evict("key");
-
-        assert cache().replacex("key", 4);
-
-        assert cache().get("key") == 4;
-
-        putToStore("key2", 5);
-
-        assert cache().replacex("key2", 6);
-
-        assertEquals((Integer)6, cache().get("key2"));
-
-        cache().evict("key");
-        cache().clear("key2");
-
-        IgniteTx tx = txEnabled() ? cache().txStart() : null;
-
-        try {
-            assert cache().replacex("key", 5);
-            assert cache().replacex("key2", 7);
-
-            if (tx != null)
-                tx.commit();
-        }
-        finally {
-            if (tx != null)
-                tx.close();
-        }
-
-        assert cache().get("key") == 5;
-        assert cache().get("key2") == 7;
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testReplaceAsync() throws Exception {
-        cache().put("key", 1);
-
-        assert cache().get("key") == 1;
-
-        assert cache().replaceAsync("key", 2).get() == 1;
-
-        assert cache().get("key") == 2;
-
-        assert cache().replaceAsync("wrong", 0).get() == null;
-
-        assert cache().get("wrong") == null;
-
-        assert !cache().replaceAsync("key", 0, 3).get();
-
-        assert cache().get("key") == 2;
-
-        assert !cache().replaceAsync("key", 0, 3).get();
-
-        assert cache().get("key") == 2;
-
-        assert cache().replaceAsync("key", 2, 3).get();
-
-        assert cache().get("key") == 3;
-
-        cache().evict("key");
-
-        assert cache().replaceAsync("key", 3, 4).get();
-
-        assert cache().get("key") == 4;
-
-        putToStore("key2", 5);
-
-        assert cache().replaceAsync("key2", 5, 6).get();
-
-        assertEquals((Integer)6, cache().get("key2"));
-
-        cache().evict("key");
-        cache().clear("key2");
-
-        IgniteTx tx = txEnabled() ? cache().txStart() : null;
-
-        try {
-            assert cache().replaceAsync("key", 4, 5).get();
-            assert cache().replaceAsync("key2", 6, 7).get();
-
-            if (tx != null)
-                tx.commit();
-        }
-        finally {
-            if (tx != null)
-                tx.close();
-        }
-
-        assert cache().get("key") == 5;
-        assert cache().get("key2") == 7;
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testReplacexAsync() throws Exception {
-        cache().put("key", 1);
-
-        assert cache().get("key") == 1;
-
-        assert cache().replacexAsync("key", 2).get();
-
-        U.debug(log, "Finished replace.");
-
-        assertEquals((Integer)2, cache().get("key"));
-
-        assert !cache().replacexAsync("wrong", 2).get();
-
-        cache().evict("key");
-
-        assert cache().replacexAsync("key", 4).get();
-
-        assert cache().get("key") == 4;
-
-        putToStore("key2", 5);
-
-        assert cache().replacexAsync("key2", 6).get();
-
-        assert cache().get("key2") == 6;
-
-        cache().evict("key");
-        cache().clear("key2");
-
-        IgniteTx tx = txEnabled() ? cache().txStart() : null;
-
-        try {
-            assert cache().replacexAsync("key", 5).get();
-            assert cache().replacexAsync("key2", 7).get();
-
-            if (tx != null)
-                tx.commit();
-        }
-        finally {
-            if (tx != null)
-                tx.close();
-        }
-
-        assert cache().get("key") == 5;
-        assert cache().get("key2") == 7;
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testRemove() throws Exception {
-        cache().put("key1", 1);
-        cache().put("key2", 2);
-
-        assert !cache().remove("key1", 0);
-        assert cache().get("key1") != null && cache().get("key1") == 1;
-        assert cache().remove("key1", 1);
-        assert cache().get("key1") == null;
-        assert cache().remove("key2") == 2;
-        assert cache().get("key2") == null;
-        assert cache().remove("key2") == null;
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testDeletedEntriesFlag() throws Exception {
-        if (cacheMode() != LOCAL && cacheMode() != REPLICATED) {
-            int cnt = 3;
-
-            for (int i = 0; i < cnt; i++)
-                cache().put(String.valueOf(i), i);
-
-            for (int i = 0; i < cnt; i++)
-                cache().remove(String.valueOf(i));
-
-            for (int g = 0; g < gridCount(); g++) {
-                for (int i = 0; i < cnt; i++) {
-                    String key = String.valueOf(i);
-
-                    GridCacheContext<String, Integer> cctx = context(g);
-
-                    GridCacheEntryEx<String, Integer> entry = cctx.isNear() ? 
cctx.near().dht().peekEx(key) :
-                        cctx.cache().peekEx(key);
-
-                    if 
(cache().affinity().mapKeyToPrimaryAndBackups(key).contains(grid(g).localNode()))
 {
-                        assertNotNull(entry);
-                        assertTrue(entry.deleted());
-                    }
-                    else
-                        assertNull(entry);
-                }
-            }
-        }
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testRemoveLoad() throws Exception {
-        int cnt = 10;
-
-        Collection<String> keys = new ArrayList<>();
-
-        for (int i = 0; i < cnt; i++)
-            keys.add(String.valueOf(i));
-
-        cache().removeAll(keys);
-
-        for (String key : keys)
-            putToStore(key, Integer.parseInt(key));
-
-        for (int g = 0; g < gridCount(); g++)
-            grid(g).jcache(null).localLoadCache(null);
-
-        for (int g = 0; g < gridCount(); g++) {
-            for (int i = 0; i < cnt; i++) {
-                String key = String.valueOf(i);
-
-                if 
(cache().affinity().mapKeyToPrimaryAndBackups(key).contains(grid(g).localNode()))
-                    assertEquals((Integer)i, cache(g).peek(key));
-                else
-                    assertNull(cache(g).peek(key));
-            }
-        }
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testRemoveFiltered() throws Exception {
-        cache().put("key1", 1);
-        cache().put("key2", 100);
-
-        assert cache().remove("key1", gte100) == 1;
-        assert cache().get("key1") != null && cache().get("key1") == 1;
-        assert cache().remove("key2", gte100) == 100;
-        assert cache().get("key2") == null;
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testRemoveAsync() throws Exception {
-        cache().put("key1", 1);
-        cache().put("key2", 2);
-
-        assert !cache().removeAsync("key1", 0).get();
-        assert cache().get("key1") != null && cache().get("key1") == 1;
-        assert cache().removeAsync("key1", 1).get();
-        assert cache().get("key1") == null;
-        assert cache().removeAsync("key2").get() == 2;
-        assert cache().get("key2") == null;
-        assert cache().removeAsync("key2").get() == null;
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testRemoveAsyncFiltered() throws Exception {
-        cache().put("key1", 1);
-        cache().put("key2", 100);
-
-        assert cache().removeAsync("key1", gte100).get() == 1;
-        assert cache().get("key1") != null && cache().get("key1") == 1;
-        assert cache().removeAsync("key2", gte100).get() == 100;
-        assert cache().get("key2") == null;
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testRemovex() throws Exception {
-        cache().put("key1", 1);
-
-        assert cache().removex("key1");
-        assert cache().get("key1") == null;
-        assert !cache().removex("key1");
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testRemovexFiltered() throws Exception {
-        cache().put("key1", 1);
-        cache().put("key2", 100);
-
-        assert !cache().removex("key1", gte100);
-        assert cache().get("key1") != null && cache().get("key1") == 1;
-        assert cache().removex("key2", gte100);
-        assert cache().get("key2") == null;
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testRemovexAsync() throws Exception {
-        cache().put("key1", 1);
-
-        assert cache().removexAsync("key1").get();
-        assert cache().get("key1") == null;
-        assert !cache().removexAsync("key1").get();
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testRemovexAsyncFiltered() throws Exception {
-        cache().put("key1", 1);
-        cache().put("key2", 100);
-
-        assert !cache().removexAsync("key1", gte100).get();
-        assert cache().get("key1") != null && cache().get("key1") == 1;
-        assert cache().removexAsync("key2", gte100).get();
-        assertNull(cache().get("key2"));
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testRemoveAll() throws Exception {
-        cache().put("key1", 1);
-        cache().put("key2", 2);
-        cache().put("key3", 3);
-
-        checkSize(F.asSet("key1", "key2", "key3"));
-
-        cache().removeAll(F.asList("key1", "key2"));
-
-        checkSize(F.asSet("key3"));
-
-        checkContainsKey(false, "key1");
-        checkContainsKey(false, "key2");
-        checkContainsKey(true, "key3");
-
-        // Put values again.
-        cache().put("key1", 1);
-        cache().put("key2", 2);
-        cache().put("key3", 3);
-
-        cache().removeAll();
-
-        assert cache().isEmpty();
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testRemoveAllWithNulls() throws Exception {
-        GridCache<String, Integer> cache = cache();
-
-        Collection<String> c = new LinkedList<>();
-
-        c.add("key1");
-        c.add(null);
-
-        cache.removeAll(c);
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testRemoveAllDuplicates() throws Exception {
-        cache().removeAll(Arrays.asList("key1", "key1", "key1"));
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testRemoveAllDuplicatesTx() throws Exception {
-        if (txEnabled()) {
-            try (IgniteTx tx = cache().txStart()) {
-                cache().removeAll(Arrays.asList("key1", "key1", "key1"));
-
-                tx.commit();
-            }
-        }
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testRemoveAllEmpty() throws Exception {
-        cache().removeAll();
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testRemoveAllFiltered() throws Exception {
-        cache().put("key1", 1);
-        cache().put("key2", 2);
-        cache().put("key3", 100);
-        cache().put("key4", 101);
-        cache().put("key5", 102);
-
-        checkSize(F.asSet("key1", "key2", "key3", "key4", "key5"));
-
-        cache().removeAll(F.asList("key2", "key3", "key4"), gte100);
-
-        checkSize(F.asSet("key1", "key2", "key5"));
-
-        checkContainsKey(true, "key1");
-        checkContainsKey(true, "key2");
-        checkContainsKey(true, "key5");
-
-        checkContainsKey(false, "key3");
-        checkContainsKey(false, "key4");
-
-        cache().put("key6", 200);
-        cache().put("key7", 201);
-
-        checkSize(F.asSet("key1", "key2", "key5", "key6", "key7"));
-
-        for (int i = 0; i < gridCount(); i++)
-            cache(i).removeAll(gte200);
-
-        checkSize(F.asSet("key1", "key2", "key5"));
-
-        checkContainsKey(false, "key6");
-        checkContainsKey(false, "key7");
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testRemoveAllAsync() throws Exception {
-        cache().put("key1", 1);
-        cache().put("key2", 2);
-        cache().put("key3", 3);
-
-        checkSize(F.asSet("key1", "key2", "key3"));
-
-        cache().removeAllAsync(F.asList("key1", "key2")).get();
-
-        checkSize(F.asSet("key3"));
-
-        checkContainsKey(false, "key1");
-        checkContainsKey(false, "key2");
-        checkContainsKey(true, "key3");
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testRemoveAllAsyncFiltered() throws Exception {
-        cache().put("key1", 1);
-        cache().put("key2", 2);
-        cache().put("key3", 100);
-        cache().put("key4", 101);
-        cache().put("key5", 102);
-
-        checkSize(F.asSet("key1", "key2", "key3", "key4", "key5"));
-
-        cache().removeAllAsync(F.asList("key2", "key3", "key4"), gte100).get();
-
-        checkSize(F.asSet("key1", "key2", "key5"));
-
-        checkContainsKey(true, "key1");
-        checkContainsKey(true, "key2");
-        checkContainsKey(false, "key3");
-        checkContainsKey(false, "key4");
-        checkContainsKey(true, "key5");
-
-        cache().put("key6", 200);
-        cache().put("key7", 201);
-
-        checkSize(F.asSet("key1", "key2", "key5", "key6", "key7"));
-
-        for (int i = 0; i < gridCount(); i++)
-            cache(i).removeAllAsync(gte200).get();
-
-        checkSize(F.asSet("key1", "key2", "key5"));
-
-        checkContainsKey(false, "key6");
-        checkContainsKey(false, "key7");
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testKeySet() throws Exception {
-        cache().put("key1", 1);
-        cache().put("key2", 2);
-        cache().put("key3", 3);
-
-        Collection<String> keys = new HashSet<>();
-
-        for (int i = 0; i < gridCount(); i++)
-            keys.addAll(cache(i).keySet());
-
-        assert keys.size() == 3;
-        assert keys.contains("key1");
-        assert keys.contains("key2");
-        assert keys.contains("key3");
-        assert !keys.contains("wrongKey");
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testKeySetFiltered() throws Exception {
-        if (offheapTiered(cache()))
-            return;
-
-        cache().put("key1", 1);
-        cache().put("key2", 100);
-        cache().put("key3", 101);
-
-        Collection<String> keys = new HashSet<>();
-
-        for (int i = 0; i < gridCount(); i++)
-            keys.addAll(cache(i).projection(gte100).keySet());
-
-        assert keys.size() == 2;
-        assert !keys.contains("key1");
-        assert keys.contains("key2");
-        assert keys.contains("key3");
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testValues() throws Exception {
-        cache().put("key1", 1);
-        cache().put("key2", 2);
-        cache().put("key3", 3);
-
-        Collection<Integer> vals = new HashSet<>();
-
-        for (int i = 0; i < gridCount(); i++)
-            vals.addAll(cache(i).values());
-
-        assert vals.size() == 3;
-        assert vals.contains(1);
-        assert vals.contains(2);
-        assert vals.contains(3);
-        assert !vals.contains(0);
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testValuesFiltered() throws Exception {
-        cache().put("key1", 1);
-        cache().put("key2", 100);
-        cache().put("key3", 101);
-
-        Collection<Integer> vals = new HashSet<>();
-
-        for (int i = 0; i < gridCount(); i++)
-            vals.addAll(cache(i).projection(gte100).values());
-
-        assert vals.size() == 2;
-        assert !vals.contains(1);
-        assert vals.contains(100);
-        assert vals.contains(101);
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testReload() throws Exception {
-        String key = "testReload";
-
-        GridCache<String, Integer> cache = primaryCache(key);
-
-        assertNull(cache.peek(key));
-
-        cache.put(key, 1);
-
-        assertEquals((Integer)1, cache.peek(key));
-
-        cache.clear(key);
-
-        assertNull(cache.peek(key));
-
-        assertEquals((Integer)1, cache.reload(key));
-        assertEquals((Integer)1, cache.peek(key));
-    }
-
-    /**
-     *
-     * @throws Exception In case of error.
-     */
-    public void testReloadAsync() throws Exception {
-        String key = "testReloadAsync";
-
-        GridCache<String, Integer> cache = primaryCache(key);
-
-        assertNull(cache.get(key));
-
-        cache.put(key, 1);
-
-        assertEquals((Integer)1, cache.get(key));
-
-        cache.clearAll();
-
-        assertNull(cache.peek(key));
-
-        assertEquals((Integer)1, cache.reloadAsync(key).get());
-
-        assertEquals((Integer)1, cache.peek(key));
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testReloadFiltered() throws Exception {
-        GridCache<String, Integer> cache = primaryCache("key");
-
-        assertNull(cache.get("key"));
-
-        cache.put("key", 1);
-
-        assertEquals((Integer)1, cache.get("key"));
-
-        cache.clearAll();
-
-        assertNull(cache.projection(entryKeyFilterInv).reload("key"));
-        assertEquals((Integer)1, 
cache.projection(entryKeyFilter).reload("key"));
-
-        assertEquals((Integer)1, peek(cache, "key"));
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testReloadAsyncFiltered() throws Exception {
-        GridCache<String, Integer> cache = primaryCache("key");
-
-        assertNull(cache.get("key"));
-
-        cache.put("key", 1);
-
-        assertEquals((Integer)1, cache.get("key"));
-
-        cache.clearAll();
-
-        
assertNull(cache.projection(entryKeyFilterInv).reloadAsync("key").get());
-        assertEquals((Integer) 1, 
cache.projection(entryKeyFilter).reloadAsync("key").get());
-
-        assertEquals((Integer)1, cache.peek("key"));
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testReloadAll() throws Exception {
-        GridCache<String, Integer> cache = cache();
-
-        Collection<String> keys = primaryKeysForCache(cache, 2);
-
-        for (String key : keys)
-            assertNull(cache.peek(key));
-
-        Map<String, Integer> vals = new HashMap<>(keys.size());
-
-        int i = 0;
-
-        for (String key : keys) {
-            cache.put(key, i);
-
-            vals.put(key, i);
-
-            i++;
-        }
-
-        for (String key : keys)
-            assertEquals(vals.get(key), cache.peek(key));
-
-        cache.clearAll();
-
-        for (String key : keys)
-            assertNull(cache.peek(key));
-
-        cache.reloadAll(keys);
-
-        for (String key : keys)
-            assertEquals(vals.get(key), cache.peek(key));
-
-        cache.clearAll();
-
-        for (String key : keys)
-            assertNull(cache.peek(key));
-
-        String[] keysArr = new String[keys.size()];
-        keys.toArray(keysArr);
-
-        cache.reloadAll(F.asList(keysArr));
-
-        for (String key : keys) {
-            assertEquals(vals.get(key), cache.peek(key));
-
-            cache.clear(key);
-        }
-
-        cache.reloadAll(keys);
-
-        for (String key : keys)
-            assertEquals(vals.get(key), cache.peek(key));
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testReloadAllAsync() throws Exception {
-        GridCache<String, Integer> cache = cache();
-
-        Collection<String> keys = primaryKeysForCache(cache, 2);
-
-        for (String key : keys)
-            assertNull(cache.peek(key));
-
-        Map<String, Integer> vals = new HashMap<>(keys.size());
-
-        int i = 0;
-
-        for (String key : keys) {
-            cache.put(key, i);
-
-            vals.put(key, i);
-
-            i++;
-        }
-
-        for (String key : keys)
-            assertEquals(vals.get(key), cache.peek(key));
-
-        cache.clearAll();
-
-        for (String key : keys)
-            assertNull(cache.peek(key));
-
-        cache.reloadAllAsync(keys).get();
-
-        for (String key : keys)
-            assertEquals(vals.get(key), cache.peek(key));
-
-        cache.clearAll();
-
-        for (String key : keys)
-            assertNull(cache.peek(key));
-
-        String[] keysArr = new String[keys.size()];
-        keys.toArray(keysArr);
-
-        cache.reloadAllAsync(F.asList(keysArr)).get();
-
-        for (String key : keys)
-            assertEquals(vals.get(key), cache.peek(key));
-
-        for (String key : keys) {
-            assertEquals(vals.get(key), cache.peek(key));
-
-            cache.clear(key);
-        }
-
-        cache.reloadAllAsync(keys).get();
-
-        for (String key : keys)
-            assertEquals(vals.get(key), cache.peek(key));
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testReloadAllFiltered() throws Exception {
-        GridCache<String, Integer> cache = cache();
-
-        Collection<String> keys = primaryKeysForCache(cache, 3);
-
-        for (String key : keys)
-            assertNull(cache.get(key));
-
-        Map<String, Integer> vals = new HashMap<>(keys.size());
-
-        int i = 0;
-
-        for (String key : keys) {
-            cache.put(key, i);
-
-            vals.put(key, i);
-
-            i++;
-        }
-
-        for (String key : keys)
-            assertEquals(vals.get(key), cache.peek(key));
-
-        cache.clearAll();
-
-        for (String key : keys)
-            assertNull(cache.peek(key));
-
-        String first = F.first(keys);
-
-        cache.put(first, 0);
-
-        assertEquals((Integer)0, cache.peek(first));
-
-        cache.projection(F.<String, 
Integer>cacheHasPeekValue()).reloadAll(keys);
-
-        assertEquals((Integer)0, cache.peek(first));
-
-        for (String key : keys) {
-            if (!first.equals(key)) // Should not have peek value.
-                assertNull(cache.peek(key));
-        }
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    public void testReloadAllAsyncFiltered() throws Exception {
-        GridCache<String, Integer> cache = cache();
-
-        Collection<String> keys = primaryKeysForCache(cache, 3);
-
-        for (String key : keys)
-            assertNull(cache.get(key));
-
-        Map<String, Integer> vals = new HashMap<>(keys.size());
-
-        int i = 0;
-
-        for (String key : keys) {
-            cache.put(key, i);
-
-            vals.put(key, i);
-
-            i++;
-        }
-
-        for (String key : keys)
-            assertEquals(vals.get(key), cache.peek(key));
-
-        cache.clearAll();
-
-        for (String key : keys)
-            assertNull(cache.peek(key));
-
-        String first = F.first(keys);
-
-        cache.put(first, 0);
-
-        assertEquals((Integer)0, cache.peek(first));
-
-        cache.projection(F.<String, 
Integer>cacheHasPeekValue()).reloadAllAsync(keys).get();
-
-        assertEquals((Integer)0, cache.peek(first));
-
-        for (String key : keys) {
-            if (!first.equals(key)) // Should not have peek value.
-                assertNull(cache.peek(key));
-        }
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testRemoveAfterClear() throws Exception {
-        GridEx grid = grid(0);
-
-        GridCacheDistributionMode distroMode = g

<TRUNCATED>

Reply via email to