package org.infinispan.functional;
import static org.infinispan.functional.FunctionalListenerAssertions.TestEvent;
import static org.infinispan.functional.FunctionalListenerAssertions.assertNoEvents;
import static org.infinispan.functional.FunctionalListenerAssertions.assertOrderedEvents;
import static org.infinispan.functional.FunctionalListenerAssertions.assertUnorderedEvents;
import static org.infinispan.functional.FunctionalListenerAssertions.create;
import static org.infinispan.functional.FunctionalListenerAssertions.createModify;
import static org.infinispan.functional.FunctionalListenerAssertions.write;
import static org.infinispan.functional.FunctionalListenerAssertions.writeModify;
import static org.infinispan.functional.FunctionalListenerAssertions.writeRemove;
import static org.infinispan.functional.FunctionalTestUtils.rw;
import static org.infinispan.functional.FunctionalTestUtils.wo;
import java.util.Arrays;
import java.util.Collection;
import org.infinispan.commons.api.functional.Listeners;
import org.infinispan.functional.decorators.FunctionalListeners;
import org.infinispan.functional.impl.FunctionalMapImpl;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
@Test(groups = "functional", testName = "functional.FunctionalMapEventsTest")
public class FunctionalMapEventsTest extends FunctionalMapTest {
LocalFunctionalListeners<Integer> localL2;
LocalFunctionalListeners<Object> replL2;
LocalFunctionalListeners<Object> distL2;
@BeforeClass
@Override
public void createBeforeClass() throws Throwable {
super.createBeforeClass();
localL2 = new LocalFunctionalListeners<>(fmapL2);
replL2 = new LocalFunctionalListeners<>(fmapR2);
distL2 = new LocalFunctionalListeners<>(fmapD2);
}
@Override
public void testLocalWriteConstantAndReadGetsValue() {
assertOrderedEvents(localL2, super::testLocalWriteConstantAndReadGetsValue, write("one"));
}
@Override
public void testReplWriteConstantAndReadGetsValueOnNonOwner() {
assertOrderedEvents(replL2, super::testReplWriteConstantAndReadGetsValueOnNonOwner, write("one"));
}
@Override
public void testReplWriteConstantAndReadGetsValueOnOwner() {
assertOrderedEvents(replL2, super::testReplWriteConstantAndReadGetsValueOnOwner, write("one"));
}
@Override
public void testDistWriteConstantAndReadGetsValueOnNonOwner() {
assertNoEvents(distL2, super::testDistWriteConstantAndReadGetsValueOnNonOwner);
}
@Override
public void testDistWriteConstantAndReadGetsValueOnOwner() {
assertOrderedEvents(distL2, super::testDistWriteConstantAndReadGetsValueOnOwner, write("one"));
}
@Override
public void testLocalWriteValueAndReadValueAndMetadata() {
assertOrderedEvents(localL2, super::testLocalWriteValueAndReadValueAndMetadata, write("one"));
}
@Override
public void testReplWriteValueAndReadValueAndMetadataOnNonOwner() {
assertOrderedEvents(replL2, super::testReplWriteValueAndReadValueAndMetadataOnNonOwner, write("one"));
}
@Override
public void testReplWriteValueAndReadValueAndMetadataOnOwner() {
assertOrderedEvents(replL2, super::testReplWriteValueAndReadValueAndMetadataOnOwner, write("one"));
}
@Override
public void testDistWriteValueAndReadValueAndMetadataOnNonOwner() {
assertNoEvents(distL2, super::testDistWriteValueAndReadValueAndMetadataOnNonOwner);
}
@Override
public void testDistWriteValueAndReadValueAndMetadataOnOwner() {
assertOrderedEvents(distL2, super::testDistWriteValueAndReadValueAndMetadataOnOwner, write("one"));
}
@Override
public void testLocalReadWriteGetsEmpty() {
assertNoEvents(localL2, super::testLocalReadWriteGetsEmpty);
}
@Override
public void testReplReadWriteGetsEmptyOnNonOwner() {
assertNoEvents(replL2, super::testReplReadWriteGetsEmptyOnNonOwner);
}
@Override
public void testReplReadWriteGetsEmptyOnOwner() {
assertNoEvents(replL2, super::testReplReadWriteGetsEmptyOnOwner);
}
@Override
public void testDistReadWriteGetsEmptyOnNonOwner() {
assertNoEvents(distL2, super::testDistReadWriteGetsEmptyOnNonOwner);
}
@Override
public void testDistReadWriteGetsEmptyOnOwner() {
assertNoEvents(distL2, super::testDistReadWriteGetsEmptyOnOwner);
}
@Override
public void testLocalReadWriteValuesReturnPrevious() {
assertOrderedEvents(localL2, super::testLocalReadWriteValuesReturnPrevious, create("one"));
}
@Override
public void testReplReadWriteValuesReturnPreviousOnNonOwner() {
assertOrderedEvents(replL2, super::testReplReadWriteValuesReturnPreviousOnNonOwner, create("one"));
}
@Override
public void testReplReadWriteValuesReturnPreviousOnOwner() {
assertOrderedEvents(replL2, super::testReplReadWriteValuesReturnPreviousOnOwner, create("one"));
}
@Override
public void testDistReadWriteValuesReturnPreviousOnNonOwner() {
assertNoEvents(distL2, super::testDistReadWriteValuesReturnPreviousOnNonOwner);
}
@Override
public void testDistReadWriteValuesReturnPreviousOnOwner() {
assertOrderedEvents(distL2, super::testDistReadWriteValuesReturnPreviousOnOwner, create("one"));
}
@Override
public void testLocalReadWriteForConditionalParamBasedReplace() {
Collection<TestEvent<String>> events = createUpdateCreate();
assertOrderedEvents(localL2, super::testLocalReadWriteForConditionalParamBasedReplace, events);
}
@Override
public void testReplReadWriteForConditionalParamBasedReplaceOnNonOwner() {
assertOrderedEvents(replL2, super::testReplReadWriteForConditionalParamBasedReplaceOnNonOwner, createUpdateCreate());
}
@Override
public void testReplReadWriteForConditionalParamBasedReplaceOnOwner() {
assertOrderedEvents(replL2, super::testReplReadWriteForConditionalParamBasedReplaceOnOwner, createUpdateCreate());
}
@Override
public void testDistReadWriteForConditionalParamBasedReplaceOnNonOwner() {
assertNoEvents(distL2, super::testDistReadWriteForConditionalParamBasedReplaceOnNonOwner);
}
@Override
public void testDistReadWriteForConditionalParamBasedReplaceOnOwner() {
assertOrderedEvents(distL2, super::testDistReadWriteForConditionalParamBasedReplaceOnOwner, createUpdateCreate());
}
@Override
public void testLocalReadOnlyEvalManyEmpty() {
assertNoEvents(localL2, super::testLocalReadOnlyEvalManyEmpty);
}
@Override
public void testReplReadOnlyEvalManyEmptyOnNonOwner() {
assertNoEvents(replL2, super::testReplReadOnlyEvalManyEmptyOnNonOwner);
}
@Override
public void testReplReadOnlyEvalManyEmptyOnOwner() {
assertNoEvents(replL2, super::testReplReadOnlyEvalManyEmptyOnOwner);
}
@Override
public void testDistReadOnlyEvalManyEmptyOnNonOwner() {
assertNoEvents(distL2, super::testDistReadOnlyEvalManyEmptyOnNonOwner);
}
@Override
public void testDistReadOnlyEvalManyEmptyOnOwner() {
assertNoEvents(distL2, super::testDistReadOnlyEvalManyEmptyOnOwner);
}
@Override
public void testLocalUpdateSubsetAndReturnPrevs() {
assertUnorderedEvents(localL2, super::testLocalUpdateSubsetAndReturnPrevs,
writeModify(Arrays.asList("one", "two", "three"), Arrays.asList("bat", "bi", "hiru")));
}
@Override
public void testReplUpdateSubsetAndReturnPrevsOnNonOwner() {
assertUnorderedEvents(replL2, super::testReplUpdateSubsetAndReturnPrevsOnNonOwner,
writeModify(Arrays.asList("one", "two", "three"), Arrays.asList("bat", "bi", "hiru")));
}
@Override
public void testReplUpdateSubsetAndReturnPrevsOnOwner() {
assertUnorderedEvents(replL2, super::testReplUpdateSubsetAndReturnPrevsOnOwner,
writeModify(Arrays.asList("one", "two", "three"), Arrays.asList("bat", "bi", "hiru")));
}
@Override
public void testDistUpdateSubsetAndReturnPrevsOnNonOwner() {
assertNoEvents(distL2, super::testDistUpdateSubsetAndReturnPrevsOnNonOwner);
}
@Override
public void testDistUpdateSubsetAndReturnPrevsOnOwner() {
assertUnorderedEvents(distL2, super::testDistUpdateSubsetAndReturnPrevsOnOwner,
writeModify(Arrays.asList("one", "two", "three"), Arrays.asList("bat", "bi", "hiru")));
}
@Override
public void testLocalReadWriteToRemoveAllAndReturnPrevs() {
assertUnorderedEvents(localL2, super::testLocalReadWriteToRemoveAllAndReturnPrevs,
writeRemove("one", "two", "three"));
}
@Override
public void testReplReadWriteToRemoveAllAndReturnPrevsOnNonOwner() {
assertUnorderedEvents(replL2, super::testReplReadWriteToRemoveAllAndReturnPrevsOnNonOwner,
writeRemove("one", "two", "three"));
}
@Override
public void testReplReadWriteToRemoveAllAndReturnPrevsOnOwner() {
assertUnorderedEvents(replL2, super::testReplReadWriteToRemoveAllAndReturnPrevsOnOwner,
writeRemove("one", "two", "three"));
}
@Override
public void testDistReadWriteToRemoveAllAndReturnPrevsOnNonOwner() {
assertNoEvents(distL2, super::testDistReadWriteToRemoveAllAndReturnPrevsOnNonOwner);
}
@Override
public void testDistReadWriteToRemoveAllAndReturnPrevsOnOwner() {
assertUnorderedEvents(distL2, super::testDistReadWriteToRemoveAllAndReturnPrevsOnOwner,
writeRemove("one", "two", "three"));
}
static Collection<TestEvent<String>> createUpdateCreate() {
Collection<TestEvent<String>> events = createModify("one", "uno");
events.addAll(create("one"));
return events;
}
private static final class LocalFunctionalListeners<K> implements FunctionalListeners<K, String> {
private final FunctionalMapImpl<K, String> fmap;
private LocalFunctionalListeners(FunctionalMapImpl<K, String> fmap) {
this.fmap = fmap;
}
@Override
public Listeners.ReadWriteListeners<K, String> readWriteListeners() {
return rw(fmap).listeners();
}
@Override
public Listeners.WriteListeners<K, String> writeOnlyListeners() {
return wo(fmap).listeners();
}
}
}