private void assertVersion(String message, EntryVersion v0, EntryVersion v1, InequalVersionComparisonResult result) { assertTrue(message, v0.compareTo(v1) == result); }
@Override public ReadWriteEntryView<K, String> apply(ReadWriteEntryView<K, String> rw) { Optional<MetaEntryVersion> metaParam = rw.findMetaParam(MetaEntryVersion.class); metaParam.ifPresent(metaVersion -> { if (metaVersion.get().compareTo(new NumericVersion(version)) == EQUAL) rw.set("uno", new MetaEntryVersion(new NumericVersion(200))); }); return rw; }
@Override protected Object perform(TestWriteOperation op, AdvancedCache<Object, Object> cache0, String key) { try { return super.perform(op, cache0, key); } catch (IllegalArgumentException e) { switch (op) { case REPLACE_META_FUNCTIONAL: return FunctionalTestUtils.await(rw(cache0).eval(key, "v1", (v, rw) -> { return rw.findMetaParam(MetaEntryVersion.class) .filter(ver -> ver.get().compareTo(new NumericVersion(1)) == EQUAL) .map(ver -> { rw.set(v, new MetaEntryVersion(new NumericVersion(2))); return true; }).orElse(false); })); default: throw new AssertionError("Unknown operation: " + op); } } }
@Override protected boolean checkOwners(List<Address> owners) { assert owners.size() == 1; InternalCacheEntry entry0 = null; EntryVersion version = null; InternalCacheEntry entry1 = null; Address backupOwner = null; for (Cache c : caches()) { InternalCacheEntry entry = c.getAdvancedCache().getDataContainer().peek("k"); if (c.getAdvancedCache().getRpcManager().getAddress().equals(owners.get(0))) { entry0 = entry; } else if (entry != null && entry.getMetadata() != null && entry.getMetadata().version() != null) { if (version == null || version.compareTo(entry.getMetadata().version()) == InequalVersionComparisonResult.BEFORE) { version = entry.getMetadata().version(); entry1 = entry; backupOwner = c.getAdvancedCache().getRpcManager().getAddress(); } } } return checkOwnerEntries(entry0, entry1, owners.get(0), backupOwner); } }
public void testRemove() { final MagicKey KEY = new MagicKey(cache(0)); cache(0).put(KEY, VALUE1); EntryVersion oldVersion = dc(0).peek(KEY).getMetadata().version(); assertEquals(cache(0).remove(KEY), VALUE1); InternalCacheEntry entry = dc(0).peek(KEY); assertNotNull(entry); assertNull(entry.getValue()); assertNotNull(entry.getMetadata()); EntryVersion removedVersion = entry.getMetadata().version(); assertNotNull(removedVersion); assertEquals(removedVersion.compareTo(oldVersion), InequalVersionComparisonResult.AFTER); checkCaches(KEY, null); assertNull(cache(1).remove(KEY)); entry = dc(0).peek(KEY); assertNotNull(entry); assertNull(entry.getValue()); assertNotNull(entry.getMetadata()); EntryVersion secondRemovedVersion = entry.getMetadata().version(); assertNotNull(removedVersion); assertEquals(secondRemovedVersion.compareTo(removedVersion), InequalVersionComparisonResult.AFTER); flush(true); for (Cache c : caches()) { assertFalse(c.getAdvancedCache().getDataContainer().containsKey(KEY)); } }