TestCacheListener l = new TestCacheListener();
embedded.addListener(l);
remote.put("key", "value");
VersionedValue oldVersionedValue = remote.getVersioned("key");
assertEquals("value", oldVersionedValue.getValue());
assertEquals(1, l.createdCounter);
assertTrue(l.modified.isEmpty());
assertTrue(l.removed.isEmpty());
assertEquals(1, l.visitedCounter);
assertEquals("value", l.visited.get("key"));
remote.put("key2", "value2");
remote.put("key", "outOfVersionValue");
VersionedValue newVersionedValue = remote.getVersioned("key2");
l.reset();
remote.removeWithVersion("key", oldVersionedValue.getVersion());
assertTrue(l.created.isEmpty());
assertTrue(l.modified.isEmpty());
assertTrue(l.removed.isEmpty());
assertEquals(1, l.visitedCounter);
l.reset();
remote.removeWithVersion("key2", newVersionedValue.getVersion());
assertTrue(l.created.isEmpty());
assertTrue(l.modified.isEmpty());
assertEquals(1, l.removedCounter);
assertEquals("value2", l.removed.get("key2"));
assertEquals(1, l.visitedCounter);
remote.put("newKey", "willBeOutOfDate");
VersionedValue oldVersionedValueToBeReplaced = remote.getVersioned("newKey");
remote.put("newKey", "changedValue");
l.reset();
remote.replaceWithVersion("newKey", "tryingToChangeButShouldNotSucceed", oldVersionedValueToBeReplaced.getVersion());
assertTrue(l.created.isEmpty());
assertTrue(l.modified.isEmpty());
assertTrue(l.removed.isEmpty());
assertTrue(l.visited.isEmpty());
remote.put("newKey2", "willBeSuccessfullyChanged");
VersionedValue newVersionedValueToBeReplaced = remote.getVersioned("newKey2");
l.reset();
remote.replaceWithVersion("newKey2", "successfulChange", newVersionedValueToBeReplaced.getVersion());
assertTrue(l.created.isEmpty());
assertEquals(1, l.modifiedCounter);
assertEquals("successfulChange", l.modified.get("newKey2"));
assertTrue(l.removed.isEmpty());
assertTrue(l.visited.isEmpty());