IGNITE-49 Fixed tck tests.

Adapt to work with Ignite.


Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/984a3dea
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/984a3dea
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/984a3dea

Branch: refs/heads/ignite-49
Commit: 984a3dea818f8a1a9b43a02bdc5f6c496121962e
Parents: 3459367
Author: nikolay_tikhonov <ntikho...@gridgain.com>
Authored: Fri Jan 16 13:59:41 2015 +0300
Committer: nikolay_tikhonov <ntikho...@gridgain.com>
Committed: Fri Jan 16 14:13:35 2015 +0300

----------------------------------------------------------------------
 .../org/apache/ignite/IgniteCacheManager.java   |  23 +--
 .../processors/cache/GridCacheMapEntry.java     |  28 ++-
 .../cache/GridCacheMetricsAdapter.java          |  32 ++--
 .../cache/GridCacheAbstractMetricsSelfTest.java |   4 +-
 ...AtomicPartitionedTckMetricsSelfTestImpl.java | 183 +++++++++++++++++++
 ...dCacheAtomicLocalTckMetricsSelfTestImpl.java | 178 ++++++++++++++++++
 .../GridCacheMetricsSelfTestSuite.java          |   2 +
 7 files changed, 406 insertions(+), 44 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/984a3dea/modules/core/src/main/java/org/apache/ignite/IgniteCacheManager.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/IgniteCacheManager.java 
b/modules/core/src/main/java/org/apache/ignite/IgniteCacheManager.java
index c255517..fea39ca 100644
--- a/modules/core/src/main/java/org/apache/ignite/IgniteCacheManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/IgniteCacheManager.java
@@ -17,7 +17,7 @@
 
 package org.apache.ignite;
 
-import org.apache.ignite.cache.CacheMetricsMXBean;
+import org.apache.ignite.cache.*;
 import org.apache.ignite.configuration.*;
 import org.apache.ignite.lang.*;
 import org.gridgain.grid.cache.*;
@@ -293,25 +293,16 @@ public class IgniteCacheManager implements CacheManager {
             tuple = igniteMap.get(cacheName);
         }
 
-        ObjectName objName = getObjectName(cacheName, false);
         MBeanServer mBeanSrv = tuple.get1().configuration().getMBeanServer();
 
-        try {
-            if (enabled) {
-                if(mBeanSrv.queryNames(objName, null).isEmpty())
-                    mBeanSrv.registerMBean(tuple.get2(), objName);
-            }
-            else {
-                for (ObjectName n : mBeanSrv.queryNames(objName, null))
-                    mBeanSrv.unregisterMBean(n);
+        if (enabled) {
+            registerCacheObject(mBeanSrv, tuple.get2(), cacheName, false);
 
-            }
-        }
-        catch (InstanceAlreadyExistsException | InstanceNotFoundException 
ignored) {
+            
tuple.get1().cache(cacheName).configuration().setManagementEnabled(true);
+        } else {
+            unregisterCacheObject(mBeanSrv, cacheName, false);
 
-        }
-        catch (MBeanRegistrationException | NotCompliantMBeanException e) {
-            throw new CacheException(e);
+            
tuple.get1().cache(cacheName).configuration().setManagementEnabled(false);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/984a3dea/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheMapEntry.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheMapEntry.java
 
b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheMapEntry.java
index 2f58ec9..b0b543b 100644
--- 
a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheMapEntry.java
+++ 
b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheMapEntry.java
@@ -1427,6 +1427,13 @@ public abstract class GridCacheMapEntry<K, V> implements 
GridCacheEntryEx<K, V>
                 update(old, null, 0, 0, ver);
             }
 
+            // Apply metrics.
+            if (metrics && cctx.cache().configuration().isStatisticsEnabled() 
&& needVal) {
+                // PutIfAbsent methods mustn't update hit/miss statistics
+                if (op != UPDATE || F.isEmpty(filter) || filter != 
cctx.noPeekArray())
+                    cctx.cache().metrics0().onRead(old != null);
+            }
+
             // Check filter inside of synchronization.
             if (!F.isEmpty(filter)) {
                 boolean pass = cctx.isAll(wrapFilterLocked(), filter);
@@ -1443,10 +1450,6 @@ public abstract class GridCacheMapEntry<K, V> implements 
GridCacheEntryEx<K, V>
                 }
             }
 
-            // Apply metrics.
-            if (metrics && cctx.cache().configuration().isStatisticsEnabled() 
&& needVal)
-                cctx.cache().metrics0().onRead(old != null);
-
             String transformCloClsName = null;
 
             V updated;
@@ -1588,7 +1591,8 @@ public abstract class GridCacheMapEntry<K, V> implements 
GridCacheEntryEx<K, V>
                 res = hadVal;
             }
 
-            updateMetrics(op, metrics);
+            if (res)
+                updateMetrics(op, metrics);
 
             cctx.continuousQueries().onEntryUpdate(this, key, val, 
valueBytesUnlocked(), old, oldBytes);
 
@@ -1769,6 +1773,13 @@ public abstract class GridCacheMapEntry<K, V> implements 
GridCacheEntryEx<K, V>
                     deletedUnlocked(false);
             }
 
+            // Apply metrics.
+            if (metrics && cctx.cache().configuration().isStatisticsEnabled() 
&& needVal) {
+                // PutIfAbsent methods mustn't update hit/miss statistics
+                if (op != UPDATE || F.isEmpty(filter) || filter != 
cctx.noPeekArray())
+                    cctx.cache().metrics0().onRead(old != null);
+            }
+
             // Check filter inside of synchronization.
             if (!F.isEmptyOrNulls(filter)) {
                 boolean pass = cctx.isAll(wrapFilterLocked(), filter);
@@ -1799,10 +1810,6 @@ public abstract class GridCacheMapEntry<K, V> implements 
GridCacheEntryEx<K, V>
                 }
             }
 
-            // Apply metrics.
-            if (metrics && cctx.cache().configuration().isStatisticsEnabled() 
&& needVal)
-                cctx.cache().metrics0().onRead(old != null);
-
             // Calculate new value.
             if (op == GridCacheOperation.TRANSFORM) {
                 transformClo = writeObj;
@@ -2056,7 +2063,8 @@ public abstract class GridCacheMapEntry<K, V> implements 
GridCacheEntryEx<K, V>
                 newDrExpireTime = -1L;
             }
 
-            updateMetrics(op, metrics);
+            if (res)
+                updateMetrics(op, metrics);
 
             if (primary || cctx.isReplicated())
                 cctx.continuousQueries().onEntryUpdate(this, key, val, 
valueBytesUnlocked(), old, oldBytes);

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/984a3dea/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheMetricsAdapter.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheMetricsAdapter.java
 
b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheMetricsAdapter.java
index dc1faf2..ada12ff 100644
--- 
a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheMetricsAdapter.java
+++ 
b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheMetricsAdapter.java
@@ -97,22 +97,22 @@ public class GridCacheMetricsAdapter implements 
GridCacheMetrics, Externalizable
      * @param m Metrics to copy from.
      */
     public GridCacheMetricsAdapter(GridCacheMetricsAdapter m) {
-        createTime = m.createTime();
-        readTime = m.readTime();
-        writeTime = m.writeTime();
-        commitTime = m.commitTime();
-        rollbackTime = m.rollbackTime();
-        reads = m.reads();
-        writes = m.writes();
-        hits = m.hits();
-        misses = m.misses();
-        txCommits = m.txCommits();
-        txRollbacks = m.txRollbacks();
-        rmCnt = m.getCacheRemovals();
-        evictCnt = m.getCacheEvictions();
-        getTimeNanos = m.getTimeNanos();
-        putTimeNanos = m.putTimeNanos();
-        removeTimeNanos = m.removeTimeNanos();
+        createTime = m.createTime;
+        readTime = m.readTime;
+        writeTime = m.writeTime;
+        commitTime = m.commitTime;
+        rollbackTime = m.rollbackTime;
+        reads = m.reads;
+        writes = m.writes;
+        hits = m.hits;
+        misses = m.misses;
+        txCommits = m.txCommits;
+        txRollbacks = m.txRollbacks;
+        rmCnt = m.rmCnt;
+        evictCnt = m.evictCnt;
+        getTimeNanos = m.getTimeNanos;
+        putTimeNanos = m.putTimeNanos;
+        removeTimeNanos = m.removeTimeNanos;
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/984a3dea/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheAbstractMetricsSelfTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheAbstractMetricsSelfTest.java
 
b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheAbstractMetricsSelfTest.java
index 3a1f4c0..4254d4a 100644
--- 
a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheAbstractMetricsSelfTest.java
+++ 
b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheAbstractMetricsSelfTest.java
@@ -41,10 +41,10 @@ import static org.gridgain.grid.util.GridUtils.*;
  */
 public abstract class GridCacheAbstractMetricsSelfTest extends 
GridCacheAbstractSelfTest {
     /** */
-    private static final int KEY_CNT = 50;
+    public static final String CACHE_NAME = "metric_test";
 
     /** */
-    private static final String CACHE_NAME = "mbean_test";
+    private static final int KEY_CNT = 50;
 
     /** {@inheritDoc} */
     @Override protected boolean swapEnabled() {

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/984a3dea/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCacheAtomicPartitionedTckMetricsSelfTestImpl.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCacheAtomicPartitionedTckMetricsSelfTestImpl.java
 
b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCacheAtomicPartitionedTckMetricsSelfTestImpl.java
new file mode 100644
index 0000000..951aa53
--- /dev/null
+++ 
b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCacheAtomicPartitionedTckMetricsSelfTestImpl.java
@@ -0,0 +1,183 @@
+/*
+ * 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.distributed.near;
+
+import org.apache.ignite.*;
+
+import javax.cache.processor.*;
+
+/**
+ * Partitioned atomic cache metrics test.
+ */
+public class GridCacheAtomicPartitionedTckMetricsSelfTestImpl extends 
GridCacheAtomicPartitionedMetricsSelfTest {
+    /** {@inheritDoc} */
+    @Override protected int gridCount() {
+        return 1;
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testEntryProcessorRemove() throws Exception {
+        IgniteCache<Integer, Integer> jcache = grid(0).jcache(null);
+
+        jcache.put(1, 20);
+
+        int result = jcache.invoke(1, new EntryProcessor<Integer, Integer, 
Integer>() {
+            @Override public Integer process(MutableEntry<Integer, Integer> 
entry, Object... arguments)
+                    throws EntryProcessorException {
+                Integer result = entry.getValue();
+
+                entry.remove();
+
+                return result;
+            }
+        });
+
+        assertEquals(1L, cache().metrics().getCachePuts());
+
+        assertEquals(20, result);
+        assertEquals(1L, cache().metrics().getCacheHits());
+        assertEquals(100.0f, cache().metrics().getCacheHitPercentage());
+        assertEquals(0L, cache().metrics().getCacheMisses());
+        assertEquals(0f, cache().metrics().getCacheMissPercentage());
+        assertEquals(1L, cache().metrics().getCachePuts());
+        assertEquals(1L, cache().metrics().getCacheRemovals());
+        assertEquals(0L, cache().metrics().getCacheEvictions());
+        assert cache().metrics().getAveragePutTime() >= 0;
+        assert cache().metrics().getAverageGetTime() >= 0;
+        assert cache().metrics().getAverageRemoveTime() >= 0;
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testCacheStatistics() throws Exception {
+        IgniteCache<Integer, Integer> jcache = grid(0).jcache(null);
+
+        jcache.put(1, 10);
+
+        assertEquals(0, cache().metrics().getCacheRemovals());
+        assertEquals(1, cache().metrics().getCachePuts());
+
+        jcache.remove(1);
+
+        assertEquals(0, cache().metrics().getCacheHits());
+        assertEquals(1, cache().metrics().getCacheRemovals());
+        assertEquals(1, cache().metrics().getCachePuts());
+
+        jcache.remove(1);
+
+        assertEquals(0, cache().metrics().getCacheHits());
+        assertEquals(0, cache().metrics().getCacheMisses());
+        assertEquals(1, cache().metrics().getCacheRemovals());
+        assertEquals(1, cache().metrics().getCachePuts());
+
+        jcache.put(1, 10);
+        assertTrue(jcache.remove(1, 10));
+
+        assertEquals(1, cache().metrics().getCacheHits());
+        assertEquals(0, cache().metrics().getCacheMisses());
+        assertEquals(2, cache().metrics().getCacheRemovals());
+        assertEquals(2, cache().metrics().getCachePuts());
+
+        assertFalse(jcache.remove(1, 10));
+
+        assertEquals(1, cache().metrics().getCacheHits());
+        assertEquals(1, cache().metrics().getCacheMisses());
+        assertEquals(2, cache().metrics().getCacheRemovals());
+        assertEquals(2, cache().metrics().getCachePuts());
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testConditionReplace() throws Exception {
+        IgniteCache<Integer, Integer> jcache = grid(0).jcache(null);
+
+        long hitCount = 0;
+        long missCount = 0;
+        long putCount = 0;
+
+        boolean result = jcache.replace(1, 0, 10);
+
+        ++missCount;
+        assertFalse(result);
+
+        assertEquals(missCount, cache().metrics().getCacheMisses());
+        assertEquals(hitCount, cache().metrics().getCacheHits());
+        assertEquals(putCount, cache().metrics().getCachePuts());
+
+        assertFalse(jcache.containsKey(1));
+
+        jcache.put(1, 10);
+        ++putCount;
+
+        assertEquals(missCount, cache().metrics().getCacheMisses());
+        assertEquals(hitCount, cache().metrics().getCacheHits());
+        assertEquals(putCount, cache().metrics().getCachePuts());
+
+        assertTrue(jcache.containsKey(1));
+
+        result = jcache.replace(1, 10, 20);
+
+        assertTrue(result);
+        ++hitCount;
+        ++putCount;
+
+        assertEquals(missCount, cache().metrics().getCacheMisses());
+        assertEquals(hitCount, cache().metrics().getCacheHits());
+        assertEquals(putCount, cache().metrics().getCachePuts());
+
+        result = jcache.replace(1, 40, 50);
+
+        assertFalse(result);
+        ++hitCount;
+
+        assertEquals(hitCount, cache().metrics().getCacheHits());
+        assertEquals(putCount, cache().metrics().getCachePuts());
+        assertEquals(missCount, cache().metrics().getCacheMisses());
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testPutIfAbsent() throws Exception {
+        IgniteCache<Integer, Integer> jcache = grid(0).jcache(null);
+
+        long hitCount = 0;
+        long missCount = 0;
+        long putCount = 0;
+
+        boolean result = jcache.putIfAbsent(1, 1);
+
+        ++putCount;
+        assertTrue(result);
+
+        assertEquals(missCount, cache().metrics().getCacheMisses());
+        assertEquals(hitCount, cache().metrics().getCacheHits());
+        assertEquals(putCount, cache().metrics().getCachePuts());
+
+        result = jcache.putIfAbsent(1, 1);
+
+        assertFalse(result);
+        assertEquals(hitCount, cache().metrics().getCacheHits());
+        assertEquals(putCount, cache().metrics().getCachePuts());
+        assertEquals(missCount, cache().metrics().getCacheMisses());
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/984a3dea/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/local/GridCacheAtomicLocalTckMetricsSelfTestImpl.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/local/GridCacheAtomicLocalTckMetricsSelfTestImpl.java
 
b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/local/GridCacheAtomicLocalTckMetricsSelfTestImpl.java
new file mode 100644
index 0000000..5f61f23
--- /dev/null
+++ 
b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/local/GridCacheAtomicLocalTckMetricsSelfTestImpl.java
@@ -0,0 +1,178 @@
+/*
+ * 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.local;
+
+import org.apache.ignite.*;
+
+import javax.cache.processor.*;
+
+/**
+ * Local atomic cache metrics test with tck specific.
+ */
+public class GridCacheAtomicLocalTckMetricsSelfTestImpl extends 
GridCacheAtomicLocalMetricsSelfTest {
+    /**
+     * @throws Exception If failed.
+     */
+    public void testEntryProcessorRemove() throws Exception {
+        IgniteCache<Integer, Integer> jcache = grid(0).jcache(null);
+
+        jcache.put(1, 20);
+
+        int result = jcache.invoke(1, new EntryProcessor<Integer, Integer, 
Integer>() {
+            @Override public Integer process(MutableEntry<Integer, Integer> 
entry, Object... arguments)
+                    throws EntryProcessorException {
+                Integer result = entry.getValue();
+
+                entry.remove();
+
+                return result;
+            }
+        });
+
+        assertEquals(1L, cache().metrics().getCachePuts());
+
+        assertEquals(20, result);
+        assertEquals(1L, cache().metrics().getCacheHits());
+        assertEquals(100.0f, cache().metrics().getCacheHitPercentage());
+        assertEquals(0L, cache().metrics().getCacheMisses());
+        assertEquals(0f, cache().metrics().getCacheMissPercentage());
+        assertEquals(1L, cache().metrics().getCachePuts());
+        assertEquals(1L, cache().metrics().getCacheRemovals());
+        assertEquals(0L, cache().metrics().getCacheEvictions());
+        assert cache().metrics().getAveragePutTime() >= 0;
+        assert cache().metrics().getAverageGetTime() >= 0;
+        assert cache().metrics().getAverageRemoveTime() >= 0;
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testCacheStatistics() throws Exception {
+        IgniteCache<Integer, Integer> jcache = grid(0).jcache(null);
+
+        jcache.put(1, 10);
+
+        assertEquals(0, cache().metrics().getCacheRemovals());
+        assertEquals(1, cache().metrics().getCachePuts());
+
+        jcache.remove(1);
+
+        assertEquals(0, cache().metrics().getCacheHits());
+        assertEquals(1, cache().metrics().getCacheRemovals());
+        assertEquals(1, cache().metrics().getCachePuts());
+
+        jcache.remove(1);
+
+        assertEquals(0, cache().metrics().getCacheHits());
+        assertEquals(0, cache().metrics().getCacheMisses());
+        assertEquals(1, cache().metrics().getCacheRemovals());
+        assertEquals(1, cache().metrics().getCachePuts());
+
+        jcache.put(1, 10);
+        assertTrue(jcache.remove(1, 10));
+
+        assertEquals(1, cache().metrics().getCacheHits());
+        assertEquals(0, cache().metrics().getCacheMisses());
+        assertEquals(2, cache().metrics().getCacheRemovals());
+        assertEquals(2, cache().metrics().getCachePuts());
+
+        assertFalse(jcache.remove(1, 10));
+
+        assertEquals(1, cache().metrics().getCacheHits());
+        assertEquals(1, cache().metrics().getCacheMisses());
+        assertEquals(2, cache().metrics().getCacheRemovals());
+        assertEquals(2, cache().metrics().getCachePuts());
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testConditionReplace() throws Exception {
+        IgniteCache<Integer, Integer> jcache = grid(0).jcache(null);
+
+        long hitCount = 0;
+        long missCount = 0;
+        long putCount = 0;
+
+        boolean result = jcache.replace(1, 0, 10);
+
+        ++missCount;
+        assertFalse(result);
+
+        assertEquals(missCount, cache().metrics().getCacheMisses());
+        assertEquals(hitCount, cache().metrics().getCacheHits());
+        assertEquals(putCount, cache().metrics().getCachePuts());
+
+        assertFalse(jcache.containsKey(1));
+
+        jcache.put(1, 10);
+        ++putCount;
+
+        assertEquals(missCount, cache().metrics().getCacheMisses());
+        assertEquals(hitCount, cache().metrics().getCacheHits());
+        assertEquals(putCount, cache().metrics().getCachePuts());
+
+        assertTrue(jcache.containsKey(1));
+
+        result = jcache.replace(1, 10, 20);
+
+        assertTrue(result);
+        ++hitCount;
+        ++putCount;
+
+        assertEquals(missCount, cache().metrics().getCacheMisses());
+        assertEquals(hitCount, cache().metrics().getCacheHits());
+        assertEquals(putCount, cache().metrics().getCachePuts());
+
+        result = jcache.replace(1, 40, 50);
+
+        assertFalse(result);
+        ++hitCount;
+
+        assertEquals(hitCount, cache().metrics().getCacheHits());
+        assertEquals(putCount, cache().metrics().getCachePuts());
+        assertEquals(missCount, cache().metrics().getCacheMisses());
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testPutIfAbsent() throws Exception {
+        IgniteCache<Integer, Integer> jcache = grid(0).jcache(null);
+
+        long hitCount = 0;
+        long missCount = 0;
+        long putCount = 0;
+
+        boolean result = jcache.putIfAbsent(1, 1);
+
+        ++putCount;
+        assertTrue(result);
+
+        assertEquals(missCount, cache().metrics().getCacheMisses());
+        assertEquals(hitCount, cache().metrics().getCacheHits());
+        assertEquals(putCount, cache().metrics().getCachePuts());
+
+        result = jcache.putIfAbsent(1, 1);
+
+        assertFalse(result);
+        assertEquals(hitCount, cache().metrics().getCacheHits());
+        assertEquals(putCount, cache().metrics().getCachePuts());
+        assertEquals(missCount, cache().metrics().getCacheMisses());
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/984a3dea/modules/core/src/test/java/org/gridgain/testsuites/GridCacheMetricsSelfTestSuite.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/gridgain/testsuites/GridCacheMetricsSelfTestSuite.java
 
b/modules/core/src/test/java/org/gridgain/testsuites/GridCacheMetricsSelfTestSuite.java
index f872e52..24dca75 100644
--- 
a/modules/core/src/test/java/org/gridgain/testsuites/GridCacheMetricsSelfTestSuite.java
+++ 
b/modules/core/src/test/java/org/gridgain/testsuites/GridCacheMetricsSelfTestSuite.java
@@ -43,6 +43,8 @@ public class GridCacheMetricsSelfTestSuite extends TestSuite {
         suite.addTest(new 
TestSuite(GridCacheAtomicLocalMetricsNoStoreSelfTest.class));
         suite.addTest(new 
TestSuite(GridCacheAtomicReplicatedMetricsSelfTest.class));
         suite.addTest(new 
TestSuite(GridCacheAtomicPartitionedMetricsSelfTest.class));
+        suite.addTest(new 
TestSuite(GridCacheAtomicPartitionedTckMetricsSelfTestImpl.class));
+        suite.addTest(new 
TestSuite(GridCacheAtomicLocalTckMetricsSelfTestImpl.class));
 
         return suite;
     }

Reply via email to