From aceb9aa2c36de4bd9199d6b0dcd407722111137b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Valdis=20Zob=C4=93la?= Date: Wed, 14 Aug 2019 09:27:06 +0300 Subject: [PATCH] (wip) TestSnapshotStore --- .../Journal/IJournalBehaviorSetter.cs | 16 +++ .../{ => Journal}/IJournalInterceptor.cs | 0 .../{ => Journal}/ITestJournal.cs | 0 .../{ => Journal}/JournalInterceptors.cs | 0 .../{ => Journal}/JournalRecoveryBehavior.cs | 0 .../JournalRecoveryBehaviorSetter.cs} | 23 +--- .../{ => Journal}/JournalWriteBehavior.cs | 0 .../Journal/JournalWriteBehaviorSetter.cs | 29 +++++ .../{ => Journal}/TestJournal.cs | 0 .../TestJournalFailureException.cs | 0 .../ISnapshotStoreBehaviorSetter.cs | 16 +++ .../ISnapshotStoreInterceptor.cs | 16 +++ .../SnapshotStore/ITestSnapshotStore.cs | 16 +++ .../SnapshotStoreDeleteBehavior.cs | 17 +++ .../SnapshotStoreDeleteBehaviorSetter.cs | 29 +++++ .../SnapshotStoreInterceptors.cs | 22 ++++ .../SnapshotStoreLoadBehavior.cs | 17 +++ .../SnapshotStoreLoadBehaviorSetter.cs | 29 +++++ .../SnapshotStoreSaveBehavior.cs | 19 +++ .../SnapshotStoreSaveBehaviorSetter.cs | 29 +++++ .../SnapshotStore/TestSnapshotStore.cs | 116 ++++++++++++++++++ .../TestSnapshotStoreFailureException.cs | 21 ++++ 22 files changed, 393 insertions(+), 22 deletions(-) create mode 100644 src/core/Akka.Persistence.TestKit/Journal/IJournalBehaviorSetter.cs rename src/core/Akka.Persistence.TestKit/{ => Journal}/IJournalInterceptor.cs (100%) rename src/core/Akka.Persistence.TestKit/{ => Journal}/ITestJournal.cs (100%) rename src/core/Akka.Persistence.TestKit/{ => Journal}/JournalInterceptors.cs (100%) rename src/core/Akka.Persistence.TestKit/{ => Journal}/JournalRecoveryBehavior.cs (100%) rename src/core/Akka.Persistence.TestKit/{IJournalBehaviorSetter.cs => Journal/JournalRecoveryBehaviorSetter.cs} (57%) rename src/core/Akka.Persistence.TestKit/{ => Journal}/JournalWriteBehavior.cs (100%) create mode 100644 src/core/Akka.Persistence.TestKit/Journal/JournalWriteBehaviorSetter.cs rename src/core/Akka.Persistence.TestKit/{ => Journal}/TestJournal.cs (100%) rename src/core/Akka.Persistence.TestKit/{ => Journal}/TestJournalFailureException.cs (100%) create mode 100644 src/core/Akka.Persistence.TestKit/SnapshotStore/ISnapshotStoreBehaviorSetter.cs create mode 100644 src/core/Akka.Persistence.TestKit/SnapshotStore/ISnapshotStoreInterceptor.cs create mode 100644 src/core/Akka.Persistence.TestKit/SnapshotStore/ITestSnapshotStore.cs create mode 100644 src/core/Akka.Persistence.TestKit/SnapshotStore/SnapshotStoreDeleteBehavior.cs create mode 100644 src/core/Akka.Persistence.TestKit/SnapshotStore/SnapshotStoreDeleteBehaviorSetter.cs create mode 100644 src/core/Akka.Persistence.TestKit/SnapshotStore/SnapshotStoreInterceptors.cs create mode 100644 src/core/Akka.Persistence.TestKit/SnapshotStore/SnapshotStoreLoadBehavior.cs create mode 100644 src/core/Akka.Persistence.TestKit/SnapshotStore/SnapshotStoreLoadBehaviorSetter.cs create mode 100644 src/core/Akka.Persistence.TestKit/SnapshotStore/SnapshotStoreSaveBehavior.cs create mode 100644 src/core/Akka.Persistence.TestKit/SnapshotStore/SnapshotStoreSaveBehaviorSetter.cs create mode 100644 src/core/Akka.Persistence.TestKit/SnapshotStore/TestSnapshotStore.cs create mode 100644 src/core/Akka.Persistence.TestKit/SnapshotStore/TestSnapshotStoreFailureException.cs diff --git a/src/core/Akka.Persistence.TestKit/Journal/IJournalBehaviorSetter.cs b/src/core/Akka.Persistence.TestKit/Journal/IJournalBehaviorSetter.cs new file mode 100644 index 00000000000..49cd75668bb --- /dev/null +++ b/src/core/Akka.Persistence.TestKit/Journal/IJournalBehaviorSetter.cs @@ -0,0 +1,16 @@ +//----------------------------------------------------------------------- +// +// Copyright (C) 2009-2019 Lightbend Inc. +// Copyright (C) 2013-2019 .NET Foundation +// +//----------------------------------------------------------------------- + +namespace Akka.Persistence.TestKit +{ + using System.Threading.Tasks; + + public interface IJournalBehaviorSetter + { + Task SetInterceptorAsync(IJournalInterceptor interceptor); + } +} \ No newline at end of file diff --git a/src/core/Akka.Persistence.TestKit/IJournalInterceptor.cs b/src/core/Akka.Persistence.TestKit/Journal/IJournalInterceptor.cs similarity index 100% rename from src/core/Akka.Persistence.TestKit/IJournalInterceptor.cs rename to src/core/Akka.Persistence.TestKit/Journal/IJournalInterceptor.cs diff --git a/src/core/Akka.Persistence.TestKit/ITestJournal.cs b/src/core/Akka.Persistence.TestKit/Journal/ITestJournal.cs similarity index 100% rename from src/core/Akka.Persistence.TestKit/ITestJournal.cs rename to src/core/Akka.Persistence.TestKit/Journal/ITestJournal.cs diff --git a/src/core/Akka.Persistence.TestKit/JournalInterceptors.cs b/src/core/Akka.Persistence.TestKit/Journal/JournalInterceptors.cs similarity index 100% rename from src/core/Akka.Persistence.TestKit/JournalInterceptors.cs rename to src/core/Akka.Persistence.TestKit/Journal/JournalInterceptors.cs diff --git a/src/core/Akka.Persistence.TestKit/JournalRecoveryBehavior.cs b/src/core/Akka.Persistence.TestKit/Journal/JournalRecoveryBehavior.cs similarity index 100% rename from src/core/Akka.Persistence.TestKit/JournalRecoveryBehavior.cs rename to src/core/Akka.Persistence.TestKit/Journal/JournalRecoveryBehavior.cs diff --git a/src/core/Akka.Persistence.TestKit/IJournalBehaviorSetter.cs b/src/core/Akka.Persistence.TestKit/Journal/JournalRecoveryBehaviorSetter.cs similarity index 57% rename from src/core/Akka.Persistence.TestKit/IJournalBehaviorSetter.cs rename to src/core/Akka.Persistence.TestKit/Journal/JournalRecoveryBehaviorSetter.cs index 75bb2bac0f5..d184d364334 100644 --- a/src/core/Akka.Persistence.TestKit/IJournalBehaviorSetter.cs +++ b/src/core/Akka.Persistence.TestKit/Journal/JournalRecoveryBehaviorSetter.cs @@ -1,5 +1,5 @@ //----------------------------------------------------------------------- -// +// // Copyright (C) 2009-2019 Lightbend Inc. // Copyright (C) 2013-2019 .NET Foundation // @@ -11,27 +11,6 @@ namespace Akka.Persistence.TestKit using System.Threading.Tasks; using Actor; - public interface IJournalBehaviorSetter - { - Task SetInterceptorAsync(IJournalInterceptor interceptor); - } - - internal class JournalWriteBehaviorSetter : IJournalBehaviorSetter - { - internal JournalWriteBehaviorSetter(IActorRef journal) - { - this._journal = journal; - } - - private readonly IActorRef _journal; - - public Task SetInterceptorAsync(IJournalInterceptor interceptor) - => _journal.Ask( - new TestJournal.UseWriteInterceptor(interceptor), - TimeSpan.FromSeconds(3) - ); - } - internal class JournalRecoveryBehaviorSetter : IJournalBehaviorSetter { internal JournalRecoveryBehaviorSetter(IActorRef journal) diff --git a/src/core/Akka.Persistence.TestKit/JournalWriteBehavior.cs b/src/core/Akka.Persistence.TestKit/Journal/JournalWriteBehavior.cs similarity index 100% rename from src/core/Akka.Persistence.TestKit/JournalWriteBehavior.cs rename to src/core/Akka.Persistence.TestKit/Journal/JournalWriteBehavior.cs diff --git a/src/core/Akka.Persistence.TestKit/Journal/JournalWriteBehaviorSetter.cs b/src/core/Akka.Persistence.TestKit/Journal/JournalWriteBehaviorSetter.cs new file mode 100644 index 00000000000..fdd54a19409 --- /dev/null +++ b/src/core/Akka.Persistence.TestKit/Journal/JournalWriteBehaviorSetter.cs @@ -0,0 +1,29 @@ +//----------------------------------------------------------------------- +// +// Copyright (C) 2009-2019 Lightbend Inc. +// Copyright (C) 2013-2019 .NET Foundation +// +//----------------------------------------------------------------------- + +namespace Akka.Persistence.TestKit +{ + using System; + using System.Threading.Tasks; + using Actor; + + internal class JournalWriteBehaviorSetter : IJournalBehaviorSetter + { + internal JournalWriteBehaviorSetter(IActorRef journal) + { + this._journal = journal; + } + + private readonly IActorRef _journal; + + public Task SetInterceptorAsync(IJournalInterceptor interceptor) + => _journal.Ask( + new TestJournal.UseWriteInterceptor(interceptor), + TimeSpan.FromSeconds(3) + ); + } +} \ No newline at end of file diff --git a/src/core/Akka.Persistence.TestKit/TestJournal.cs b/src/core/Akka.Persistence.TestKit/Journal/TestJournal.cs similarity index 100% rename from src/core/Akka.Persistence.TestKit/TestJournal.cs rename to src/core/Akka.Persistence.TestKit/Journal/TestJournal.cs diff --git a/src/core/Akka.Persistence.TestKit/TestJournalFailureException.cs b/src/core/Akka.Persistence.TestKit/Journal/TestJournalFailureException.cs similarity index 100% rename from src/core/Akka.Persistence.TestKit/TestJournalFailureException.cs rename to src/core/Akka.Persistence.TestKit/Journal/TestJournalFailureException.cs diff --git a/src/core/Akka.Persistence.TestKit/SnapshotStore/ISnapshotStoreBehaviorSetter.cs b/src/core/Akka.Persistence.TestKit/SnapshotStore/ISnapshotStoreBehaviorSetter.cs new file mode 100644 index 00000000000..e0d475217fb --- /dev/null +++ b/src/core/Akka.Persistence.TestKit/SnapshotStore/ISnapshotStoreBehaviorSetter.cs @@ -0,0 +1,16 @@ +// ----------------------------------------------------------------------- +// +// Copyright (C) 2009-2019 Lightbend Inc. +// Copyright (C) 2013-2019 .NET Foundation +// +// ----------------------------------------------------------------------- + +namespace Akka.Persistence.TestKit +{ + using System.Threading.Tasks; + + public interface ISnapshotStoreBehaviorSetter + { + Task SetInterceptorAsync(ISnapshotStoreInterceptor interceptor); + } +} \ No newline at end of file diff --git a/src/core/Akka.Persistence.TestKit/SnapshotStore/ISnapshotStoreInterceptor.cs b/src/core/Akka.Persistence.TestKit/SnapshotStore/ISnapshotStoreInterceptor.cs new file mode 100644 index 00000000000..15807ccff2d --- /dev/null +++ b/src/core/Akka.Persistence.TestKit/SnapshotStore/ISnapshotStoreInterceptor.cs @@ -0,0 +1,16 @@ +//----------------------------------------------------------------------- +// +// Copyright (C) 2009-2019 Lightbend Inc. +// Copyright (C) 2013-2019 .NET Foundation +// +//----------------------------------------------------------------------- + +namespace Akka.Persistence.TestKit +{ + using System.Threading.Tasks; + + public interface ISnapshotStoreInterceptor + { + Task Intercept(string persistenceId, SnapshotSelectionCriteria criteria); + } +} \ No newline at end of file diff --git a/src/core/Akka.Persistence.TestKit/SnapshotStore/ITestSnapshotStore.cs b/src/core/Akka.Persistence.TestKit/SnapshotStore/ITestSnapshotStore.cs new file mode 100644 index 00000000000..13b5d67e267 --- /dev/null +++ b/src/core/Akka.Persistence.TestKit/SnapshotStore/ITestSnapshotStore.cs @@ -0,0 +1,16 @@ +//----------------------------------------------------------------------- +// +// Copyright (C) 2009-2019 Lightbend Inc. +// Copyright (C) 2013-2019 .NET Foundation +// +//----------------------------------------------------------------------- + +namespace Akka.Persistence.TestKit +{ + public interface ITestSnapshotStore + { + SnapshotStoreSaveBehavior OnSave { get; } + SnapshotStoreLoadBehavior OnLoad { get; } + SnapshotStoreDeleteBehavior OnDelete { get; } + } +} \ No newline at end of file diff --git a/src/core/Akka.Persistence.TestKit/SnapshotStore/SnapshotStoreDeleteBehavior.cs b/src/core/Akka.Persistence.TestKit/SnapshotStore/SnapshotStoreDeleteBehavior.cs new file mode 100644 index 00000000000..17c72909102 --- /dev/null +++ b/src/core/Akka.Persistence.TestKit/SnapshotStore/SnapshotStoreDeleteBehavior.cs @@ -0,0 +1,17 @@ +// ----------------------------------------------------------------------- +// +// Copyright (C) 2009-2019 Lightbend Inc. +// Copyright (C) 2013-2019 .NET Foundation +// +// ----------------------------------------------------------------------- + +namespace Akka.Persistence.TestKit +{ + public class SnapshotStoreDeleteBehavior : SnapshotStoreSaveBehavior + { + public SnapshotStoreDeleteBehavior(ISnapshotStoreBehaviorSetter setter) : base(setter) + { + + } + } +} \ No newline at end of file diff --git a/src/core/Akka.Persistence.TestKit/SnapshotStore/SnapshotStoreDeleteBehaviorSetter.cs b/src/core/Akka.Persistence.TestKit/SnapshotStore/SnapshotStoreDeleteBehaviorSetter.cs new file mode 100644 index 00000000000..89b95bb3152 --- /dev/null +++ b/src/core/Akka.Persistence.TestKit/SnapshotStore/SnapshotStoreDeleteBehaviorSetter.cs @@ -0,0 +1,29 @@ +// ----------------------------------------------------------------------- +// +// Copyright (C) 2009-2019 Lightbend Inc. +// Copyright (C) 2013-2019 .NET Foundation +// +// ----------------------------------------------------------------------- + +namespace Akka.Persistence.TestKit +{ + using System; + using System.Threading.Tasks; + using Actor; + + internal class SnapshotStoreDeleteBehaviorSetter : ISnapshotStoreBehaviorSetter + { + internal SnapshotStoreDeleteBehaviorSetter(IActorRef snapshots) + { + this._snapshots = snapshots; + } + + private readonly IActorRef _snapshots; + + public Task SetInterceptorAsync(ISnapshotStoreInterceptor interceptor) + => _snapshots.Ask( + new TestSnapshotStore.UseDeleteInterceptor(interceptor), + TimeSpan.FromSeconds(3) + ); + } +} \ No newline at end of file diff --git a/src/core/Akka.Persistence.TestKit/SnapshotStore/SnapshotStoreInterceptors.cs b/src/core/Akka.Persistence.TestKit/SnapshotStore/SnapshotStoreInterceptors.cs new file mode 100644 index 00000000000..45113e0f0fe --- /dev/null +++ b/src/core/Akka.Persistence.TestKit/SnapshotStore/SnapshotStoreInterceptors.cs @@ -0,0 +1,22 @@ +//----------------------------------------------------------------------- +// +// Copyright (C) 2009-2019 Lightbend Inc. +// Copyright (C) 2013-2019 .NET Foundation +// +//----------------------------------------------------------------------- + +namespace Akka.Persistence.TestKit +{ + using System.Threading.Tasks; + + internal static class SnapshotStoreInterceptors + { + internal class Failure : ISnapshotStoreInterceptor + { + public Task Intercept(string persistenceId, SnapshotSelectionCriteria criteria) + { + throw new TestSnapshotStoreFailureException(); + } + } + } +} \ No newline at end of file diff --git a/src/core/Akka.Persistence.TestKit/SnapshotStore/SnapshotStoreLoadBehavior.cs b/src/core/Akka.Persistence.TestKit/SnapshotStore/SnapshotStoreLoadBehavior.cs new file mode 100644 index 00000000000..6c363ba7dd1 --- /dev/null +++ b/src/core/Akka.Persistence.TestKit/SnapshotStore/SnapshotStoreLoadBehavior.cs @@ -0,0 +1,17 @@ +// ----------------------------------------------------------------------- +// +// Copyright (C) 2009-2019 Lightbend Inc. +// Copyright (C) 2013-2019 .NET Foundation +// +// ----------------------------------------------------------------------- + +namespace Akka.Persistence.TestKit +{ + public class SnapshotStoreLoadBehavior : SnapshotStoreSaveBehavior + { + public SnapshotStoreLoadBehavior(ISnapshotStoreBehaviorSetter setter) : base(setter) + { + + } + } +} \ No newline at end of file diff --git a/src/core/Akka.Persistence.TestKit/SnapshotStore/SnapshotStoreLoadBehaviorSetter.cs b/src/core/Akka.Persistence.TestKit/SnapshotStore/SnapshotStoreLoadBehaviorSetter.cs new file mode 100644 index 00000000000..05859d0a228 --- /dev/null +++ b/src/core/Akka.Persistence.TestKit/SnapshotStore/SnapshotStoreLoadBehaviorSetter.cs @@ -0,0 +1,29 @@ +// ----------------------------------------------------------------------- +// +// Copyright (C) 2009-2019 Lightbend Inc. +// Copyright (C) 2013-2019 .NET Foundation +// +// ----------------------------------------------------------------------- + +namespace Akka.Persistence.TestKit +{ + using System; + using System.Threading.Tasks; + using Actor; + + internal class SnapshotStoreLoadBehaviorSetter : ISnapshotStoreBehaviorSetter + { + internal SnapshotStoreLoadBehaviorSetter(IActorRef snapshots) + { + this._snapshots = snapshots; + } + + private readonly IActorRef _snapshots; + + public Task SetInterceptorAsync(ISnapshotStoreInterceptor interceptor) + => _snapshots.Ask( + new TestSnapshotStore.UseLoadInterceptor(interceptor), + TimeSpan.FromSeconds(3) + ); + } +} \ No newline at end of file diff --git a/src/core/Akka.Persistence.TestKit/SnapshotStore/SnapshotStoreSaveBehavior.cs b/src/core/Akka.Persistence.TestKit/SnapshotStore/SnapshotStoreSaveBehavior.cs new file mode 100644 index 00000000000..2753be600e0 --- /dev/null +++ b/src/core/Akka.Persistence.TestKit/SnapshotStore/SnapshotStoreSaveBehavior.cs @@ -0,0 +1,19 @@ +//----------------------------------------------------------------------- +// +// Copyright (C) 2009-2019 Lightbend Inc. +// Copyright (C) 2013-2019 .NET Foundation +// +//----------------------------------------------------------------------- + +namespace Akka.Persistence.TestKit +{ + public class SnapshotStoreSaveBehavior + { + public SnapshotStoreSaveBehavior(ISnapshotStoreBehaviorSetter setter) + { + Setter = setter; + } + + protected readonly ISnapshotStoreBehaviorSetter Setter; + } +} \ No newline at end of file diff --git a/src/core/Akka.Persistence.TestKit/SnapshotStore/SnapshotStoreSaveBehaviorSetter.cs b/src/core/Akka.Persistence.TestKit/SnapshotStore/SnapshotStoreSaveBehaviorSetter.cs new file mode 100644 index 00000000000..dd7d2e9a6c6 --- /dev/null +++ b/src/core/Akka.Persistence.TestKit/SnapshotStore/SnapshotStoreSaveBehaviorSetter.cs @@ -0,0 +1,29 @@ +// ----------------------------------------------------------------------- +// +// Copyright (C) 2009-2019 Lightbend Inc. +// Copyright (C) 2013-2019 .NET Foundation +// +// ----------------------------------------------------------------------- + +namespace Akka.Persistence.TestKit +{ + using System; + using System.Threading.Tasks; + using Actor; + + internal class SnapshotStoreSaveBehaviorSetter : ISnapshotStoreBehaviorSetter + { + internal SnapshotStoreSaveBehaviorSetter(IActorRef snapshots) + { + this._snapshots = snapshots; + } + + private readonly IActorRef _snapshots; + + public Task SetInterceptorAsync(ISnapshotStoreInterceptor interceptor) + => _snapshots.Ask( + new TestSnapshotStore.UseSaveInterceptor(interceptor), + TimeSpan.FromSeconds(3) + ); + } +} \ No newline at end of file diff --git a/src/core/Akka.Persistence.TestKit/SnapshotStore/TestSnapshotStore.cs b/src/core/Akka.Persistence.TestKit/SnapshotStore/TestSnapshotStore.cs new file mode 100644 index 00000000000..8c0432bae1f --- /dev/null +++ b/src/core/Akka.Persistence.TestKit/SnapshotStore/TestSnapshotStore.cs @@ -0,0 +1,116 @@ +namespace Akka.Persistence.TestKit +{ + using System.Threading.Tasks; + using Actor; + using Snapshot; + + public class TestSnapshotStore : MemorySnapshotStore + { + private ISnapshotStoreInterceptor _saveInterceptor; + private ISnapshotStoreInterceptor _loadInterceptor; + private ISnapshotStoreInterceptor _deleteInterceptor; + + protected override bool ReceivePluginInternal(object message) + { + switch (message) + { + case UseSaveInterceptor use: + _saveInterceptor = use.Interceptor; + return true; + + case UseLoadInterceptor use: + _loadInterceptor = use.Interceptor; + return true; + + case UseDeleteInterceptor use: + _deleteInterceptor = use.Interceptor; + return true; + + default: + return base.ReceivePluginInternal(message); + } + } + + protected override async Task SaveAsync(SnapshotMetadata metadata, object snapshot) + { + await _saveInterceptor.Intercept(metadata.PersistenceId, ToSelectionCriteria(metadata)); + await base.SaveAsync(metadata, snapshot); + } + + protected override async Task LoadAsync(string persistenceId, SnapshotSelectionCriteria criteria) + { + await _loadInterceptor.Intercept(persistenceId, criteria); + return await base.LoadAsync(persistenceId, criteria); + } + + protected override async Task DeleteAsync(SnapshotMetadata metadata) + { + await _deleteInterceptor.Intercept(metadata.PersistenceId, ToSelectionCriteria(metadata)); + await base.DeleteAsync(metadata); + } + + protected override async Task DeleteAsync(string persistenceId, SnapshotSelectionCriteria criteria) + { + await _deleteInterceptor.Intercept(persistenceId, criteria); + await base.DeleteAsync(persistenceId, criteria); + } + + static SnapshotSelectionCriteria ToSelectionCriteria(SnapshotMetadata metadata) + => new SnapshotSelectionCriteria(metadata.SequenceNr, metadata.Timestamp, metadata.SequenceNr, + metadata.Timestamp); + + public static ITestSnapshotStore FromRef(IActorRef actor) + { + return new TestSnapshotStoreWrapper(actor); + } + + public sealed class UseSaveInterceptor + { + public UseSaveInterceptor(ISnapshotStoreInterceptor interceptor) + { + Interceptor = interceptor; + } + + public ISnapshotStoreInterceptor Interceptor { get; } + } + + public sealed class UseLoadInterceptor + { + public UseLoadInterceptor(ISnapshotStoreInterceptor interceptor) + { + Interceptor = interceptor; + } + + public ISnapshotStoreInterceptor Interceptor { get; } + } + + public sealed class UseDeleteInterceptor + { + public UseDeleteInterceptor(ISnapshotStoreInterceptor interceptor) + { + Interceptor = interceptor; + } + + public ISnapshotStoreInterceptor Interceptor { get; } + } + + public sealed class Ack + { + public static readonly Ack Instance = new Ack(); + } + + internal class TestSnapshotStoreWrapper : ITestSnapshotStore + { + public TestSnapshotStoreWrapper(IActorRef actor) + { + _actor = actor; + } + + private readonly IActorRef _actor; + + public SnapshotStoreSaveBehavior OnSave => new SnapshotStoreSaveBehavior(new SnapshotStoreSaveBehaviorSetter(_actor)); + public SnapshotStoreLoadBehavior OnLoad => new SnapshotStoreLoadBehavior(new SnapshotStoreLoadBehaviorSetter(_actor)); + public SnapshotStoreDeleteBehavior OnDelete => new SnapshotStoreDeleteBehavior(new SnapshotStoreDeleteBehaviorSetter(_actor)); + } + } +} diff --git a/src/core/Akka.Persistence.TestKit/SnapshotStore/TestSnapshotStoreFailureException.cs b/src/core/Akka.Persistence.TestKit/SnapshotStore/TestSnapshotStoreFailureException.cs new file mode 100644 index 00000000000..a67fc0ffc82 --- /dev/null +++ b/src/core/Akka.Persistence.TestKit/SnapshotStore/TestSnapshotStoreFailureException.cs @@ -0,0 +1,21 @@ +//----------------------------------------------------------------------- +// +// Copyright (C) 2009-2019 Lightbend Inc. +// Copyright (C) 2013-2019 .NET Foundation +// +//----------------------------------------------------------------------- + +namespace Akka.Persistence.TestKit +{ + using System; + using System.Runtime.Serialization; + + [Serializable] + public class TestSnapshotStoreFailureException : Exception + { + public TestSnapshotStoreFailureException() { } + public TestSnapshotStoreFailureException(string message) : base(message) { } + public TestSnapshotStoreFailureException(string message, Exception inner) : base(message, inner) { } + protected TestSnapshotStoreFailureException(SerializationInfo info, StreamingContext context) : base(info, context) { } + } +} \ No newline at end of file