public static <T> T awaitEventIfOwnerAndLaunderLatch(boolean isOwner, CompletableFuture<T> cf, List<CountDownLatch> latches) { if (isOwner) { T t = awaitEvent(cf, latches.get(0)); launderLatches(latches, 1); return t; } return awaitNoEvent(cf, latches.get(0)); }
@Test public void testReplLambdaWriteListeners() throws Exception { doLambdaWriteListeners(supplyKeyForCache(0, REPL), wo(fmapR1), true); doLambdaWriteListeners(supplyKeyForCache(1, REPL), wo(fmapR2), true); }
public static <T> T awaitEventIfOwner(boolean isOwner, CompletableFuture<T> cf, CountDownLatch eventLatch) { return isOwner ? awaitEvent(cf, eventLatch) : awaitNoEvent(cf, eventLatch); }
public static <T> T awaitEventAndLaunderLatch(CompletableFuture<T> cf, List<CountDownLatch> latches) { T t = awaitEvent(cf, latches.get(0)); launderLatches(latches, 1); return t; }
private <K> void doLambdaWriteListeners(Supplier<K> keySupplier, WriteOnlyMap<K, String> wo, boolean isOwner) throws Exception { K key1 = keySupplier.get(), key2 = keySupplier.get(); List<CountDownLatch> latches = launderLatches(new ArrayList<>(), 1); AutoCloseable onWrite = wo.listeners().onWrite(read -> { assertEquals("write", read.get()); latches.get(0).countDown(); }); awaitEventIfOwnerAndLaunderLatch(isOwner, wo.eval(key1, new SetConstantOnWriteOnly("write")), latches); awaitEventIfOwnerAndLaunderLatch(isOwner, wo.eval(key1, new SetConstantOnWriteOnly("write")), latches); onWrite.close(); awaitNoEvent(wo.eval(key2, new SetConstantOnWriteOnly("write")), latches.get(0)); awaitNoEvent(wo.eval(key2, new SetConstantOnWriteOnly("write")), latches.get(0)); // TODO: Test other eval methods :) AutoCloseable onWriteRemove = wo.listeners().onWrite(read -> { assertFalse(read.find().isPresent()); latches.get(0).countDown(); }); awaitEventIfOwnerAndLaunderLatch(isOwner, wo.eval(key1, removeConsumer()), latches); onWriteRemove.close(); awaitNoEvent(wo.eval(key2, removeConsumer()), latches.get(0)); }
}); awaitNoEvent(woMap.eval(key1, "created", setValueConsumer()), latches.get(0)); awaitNoEvent(woMap.eval(key1, "modified", setValueConsumer()), latches.get(1)); awaitNoEvent(woMap.eval(key1, removeConsumer()), latches.get(2)); awaitEventIfOwner(isOwner, rwMap.eval(key2, "created", setValueReturnPrevOrNull()), latches.get(0)); awaitEventIfOwner(isOwner, rwMap.eval(key2, "modified", setValueReturnPrevOrNull()), latches.get(1)); awaitEventIfOwner(isOwner, rwMap.eval(key2, removeReturnPrevOrNull()), latches.get(2)); launderLatches(latches, 3); awaitEventIfOwner(isOwner, rwMap.eval(key3, new SetConstantOnReadWrite<>("created")), latches.get(0)); awaitEventIfOwner(isOwner, rwMap.eval(key3, new SetConstantOnReadWrite<>("modified")), latches.get(1)); awaitEventIfOwner(isOwner, rwMap.eval(key3, removeReturnPrevOrNull()), latches.get(2)); onRemove.close(); launderLatches(latches, 3); awaitNoEvent(woMap.eval(key4, "tres", setValueConsumer()), latches.get(0)); awaitNoEvent(woMap.eval(key4, "three", setValueConsumer()), latches.get(1)); awaitNoEvent(woMap.eval(key4, removeConsumer()), latches.get(2)); awaitNoEvent(rwMap.eval(key5, "cuatro", setValueReturnPrevOrNull()), latches.get(0)); awaitNoEvent(rwMap.eval(key5, "four", setValueReturnPrevOrNull()), latches.get(1)); awaitNoEvent(rwMap.eval(key5, removeReturnPrevOrNull()), latches.get(2));
@Test public void testDistLambdaReadWriteListeners() throws Exception { doLambdaReadWriteListeners(supplyKeyForCache(0, DIST), wo(fmapD1), rw(fmapD2), false); doLambdaReadWriteListeners(supplyKeyForCache(1, DIST), wo(fmapD1), rw(fmapD2), true); }
public void testLocalLambdaWriteListeners() throws Exception { doLambdaWriteListeners(supplyIntKey(), wo(fmapL1), true); }
public void testLocalLambdaReadWriteListeners() throws Exception { doLambdaReadWriteListeners(supplyIntKey(), wo(fmapL1), rw(fmapL2), true); }
public void testReplLambdaReadWriteListeners() throws Exception { doLambdaReadWriteListeners(supplyKeyForCache(0, REPL), wo(fmapR1), rw(fmapR2), true); doLambdaReadWriteListeners(supplyKeyForCache(1, REPL), wo(fmapR1), rw(fmapR2), true); }
@Test public void testDistLambdaWriteListeners() throws Exception { doLambdaWriteListeners(supplyKeyForCache(0, DIST), wo(fmapD1), true); doLambdaWriteListeners(supplyKeyForCache(0, DIST), wo(fmapD2), false); }