pekko/akka-docs/src/test/java/jdocs/persistence/testkit/TestKitExamples.java

96 lines
3.6 KiB
Java
Raw Normal View History

/*
* Copyright (C) 2020 Lightbend Inc. <https://www.lightbend.com>
*/
package jdocs.persistence.testkit;
import akka.persistence.testkit.DeleteEvents;
import akka.persistence.testkit.DeleteSnapshotByMeta;
import akka.persistence.testkit.DeleteSnapshotsByCriteria;
import akka.persistence.testkit.JournalOperation;
import akka.persistence.testkit.ProcessingPolicy;
import akka.persistence.testkit.ProcessingResult;
import akka.persistence.testkit.ProcessingSuccess;
import akka.persistence.testkit.ReadEvents;
import akka.persistence.testkit.ReadSeqNum;
import akka.persistence.testkit.ReadSnapshot;
import akka.persistence.testkit.Reject;
import akka.persistence.testkit.SnapshotOperation;
import akka.persistence.testkit.StorageFailure;
import akka.persistence.testkit.WriteEvents;
import akka.persistence.testkit.WriteSnapshot;
public class TestKitExamples {
// #set-event-storage-policy
class SampleEventStoragePolicy implements ProcessingPolicy<JournalOperation> {
// you can use internal state, it does not need to be thread safe
int count = 1;
@Override
public ProcessingResult tryProcess(String persistenceId, JournalOperation processingUnit) {
// check the type of operation and react with success or with reject or with failure.
// if you return ProcessingSuccess the operation will be performed, otherwise not.
if (count < 10) {
count += 1;
if (processingUnit instanceof ReadEvents) {
ReadEvents read = (ReadEvents) processingUnit;
if (read.batch().nonEmpty()) {
ProcessingSuccess.getInstance();
} else {
return StorageFailure.create();
}
} else if (processingUnit instanceof WriteEvents) {
return ProcessingSuccess.getInstance();
} else if (processingUnit instanceof DeleteEvents) {
return ProcessingSuccess.getInstance();
} else if (processingUnit.equals(ReadSeqNum.getInstance())) {
return Reject.create();
}
// you can set your own exception
return StorageFailure.create(new RuntimeException("your exception"));
} else {
return ProcessingSuccess.getInstance();
}
}
}
// #set-event-storage-policy
// #set-snapshot-storage-policy
class SnapshotStoragePolicy implements ProcessingPolicy<SnapshotOperation> {
// you can use internal state, it doesn't need to be thread safe
int count = 1;
@Override
public ProcessingResult tryProcess(String persistenceId, SnapshotOperation processingUnit) {
// check the type of operation and react with success or with failure.
// if you return ProcessingSuccess the operation will be performed, otherwise not.
if (count < 10) {
count += 1;
if (processingUnit instanceof ReadSnapshot) {
ReadSnapshot read = (ReadSnapshot) processingUnit;
if (read.getSnapshot().isPresent()) {
ProcessingSuccess.getInstance();
} else {
return StorageFailure.create();
}
} else if (processingUnit instanceof WriteSnapshot) {
return ProcessingSuccess.getInstance();
} else if (processingUnit instanceof DeleteSnapshotsByCriteria) {
return ProcessingSuccess.getInstance();
} else if (processingUnit instanceof DeleteSnapshotByMeta) {
return ProcessingSuccess.getInstance();
}
// you can set your own exception
return StorageFailure.create(new RuntimeException("your exception"));
} else {
return ProcessingSuccess.getInstance();
}
}
}
// #set-snapshot-storage-policy
}