public void testSkipCacheFlagUsage() throws CacheLoaderException {
    CountingCacheStore countingCS = getCountingCacheStore();

    store.store(TestInternalCacheEntryFactory.create("k1", "v1"));

    assert countingCS.numLoads == 0;
    assert countingCS.numContains == 0;
    // load using SKIP_CACHE_STORE should not find the object in the store
    assert cache.getAdvancedCache().withFlags(Flag.SKIP_CACHE_STORE).get("k1") == null;
    assert countingCS.numLoads == 0;
    assert countingCS.numContains == 0;

    // counter-verify that the object was actually in the store:
    assert "v1".equals(cache.get("k1"));
    assert countingCS.numLoads == 1 : "Expected 1, was " + countingCS.numLoads;
    assert countingCS.numContains == 0 : "Expected 0, was " + countingCS.numContains;

    // now check that put won't return the stored value
    store.store(TestInternalCacheEntryFactory.create("k2", "v2"));
    Object putReturn =
        cache.getAdvancedCache().withFlags(Flag.SKIP_CACHE_STORE).put("k2", "v2-second");
    assert putReturn == null;
    assert countingCS.numLoads == 1 : "Expected 1, was " + countingCS.numLoads;
    assert countingCS.numContains == 0 : "Expected 0, was " + countingCS.numContains;
    // but it inserted it in the cache:
    assert "v2-second".equals(cache.get("k2"));
    // perform the put in the cache & store, using same value:
    putReturn = cache.put("k2", "v2-second");
    // returned value from the cache:
    assert "v2-second".equals(putReturn);
    // and verify that the put operation updated the store too:
    assert "v2-second".equals(store.load("k2").getValue());
    assert countingCS.numLoads == 2 : "Expected 2, was " + countingCS.numLoads;

    assert countingCS.numContains == 0 : "Expected 0, was " + countingCS.numContains;
    cache.containsKey("k1");
    assert countingCS.numContains == 0 : "Expected 0, was " + countingCS.numContains;
    assert false == cache.getAdvancedCache().withFlags(Flag.SKIP_CACHE_STORE).containsKey("k3");
    assert countingCS.numContains == 0 : "Expected 0, was " + countingCS.numContains;
    assert countingCS.numLoads == 2 : "Expected 2, was " + countingCS.numLoads;

    // now with batching:
    boolean batchStarted = cache.getAdvancedCache().startBatch();
    assert batchStarted;
    assert null == cache.getAdvancedCache().withFlags(Flag.SKIP_CACHE_STORE).get("k1batch");
    assert countingCS.numLoads == 2 : "Expected 2, was " + countingCS.numLoads;
    assert null == cache.getAdvancedCache().get("k2batch");
    assert countingCS.numLoads == 3 : "Expected 3, was " + countingCS.numLoads;
    cache.endBatch(true);
  }