Esempio n. 1
0
            public void DelegateToDecoratedSagaStore()
            {
                var sagaStore = new Mock <IStoreSagas>();

                using (var cachedSagaStore = new CachedSagaStore(sagaStore.Object))
                {
                    cachedSagaStore.Purge();

                    sagaStore.Verify(mock => mock.Purge(), Times.Once());
                }
            }
            public void DelegateToDecoratedSagaStore()
            {
                var sagaStore = new Mock<IStoreSagas>();
                var sagaId = GuidStrategy.NewGuid();

                using (var cachedSagaStore = new CachedSagaStore(sagaStore.Object))
                {
                    cachedSagaStore.CreateSaga(typeof(Saga), sagaId);

                    sagaStore.Verify(mock => mock.CreateSaga(typeof(Saga), sagaId), Times.Once());
                }
            }
Esempio n. 3
0
            public void DelegateToDecoratedSagaStore()
            {
                var sagaStore = new Mock <IStoreSagas>();
                var sagaId    = GuidStrategy.NewGuid();

                using (var cachedSagaStore = new CachedSagaStore(sagaStore.Object))
                {
                    cachedSagaStore.CreateSaga(typeof(Saga), sagaId);

                    sagaStore.Verify(mock => mock.CreateSaga(typeof(Saga), sagaId), Times.Once());
                }
            }
Esempio n. 4
0
            public void DelegateToDecoratedSagaStore()
            {
                var sagaStore  = new Mock <IStoreSagas>();
                var upperBound = DateTime.Now;

                using (var cachedSagaStore = new CachedSagaStore(sagaStore.Object))
                {
                    cachedSagaStore.GetScheduledTimeouts(upperBound);

                    sagaStore.Verify(mock => mock.GetScheduledTimeouts(upperBound), Times.Once());
                }
            }
Esempio n. 5
0
            public void AlwaysReturnCopyOfCachedSaga()
            {
                var sagaStore = new Mock <IStoreSagas>();
                var sagaId    = GuidStrategy.NewGuid();

                using (var cachedSagaStore = new CachedSagaStore(sagaStore.Object))
                {
                    Saga cachedSaga = new FakeSaga(), result1, result2;

                    sagaStore.Setup(mock => mock.TryGetSaga(typeof(Saga), sagaId, out cachedSaga)).Returns(true);

                    Assert.True(cachedSagaStore.TryGetSaga(typeof(Saga), sagaId, out result1));
                    Assert.True(cachedSagaStore.TryGetSaga(typeof(Saga), sagaId, out result2));
                    Assert.NotSame(result1, result2);
                }
            }
Esempio n. 6
0
            public void SagaUpdatedAfterSaveIfNotCompleted()
            {
                var saga = new FakeSaga {
                    CorrelationId = GuidStrategy.NewGuid()
                };
                var memoryCache = new MemoryCache(Guid.NewGuid().ToString());
                var sagaStore   = new Mock <IStoreSagas>();

                using (var sagaContext = new SagaContext(typeof(FakeSaga), saga.CorrelationId, new FakeEvent()))
                    using (var cachedSagaStore = new CachedSagaStore(sagaStore.Object, TimeSpan.FromMinutes(1), memoryCache))
                    {
                        cachedSagaStore.Save(saga, sagaContext);

                        Assert.Same(saga, memoryCache.Get(typeof(FakeSaga).GetFullNameWithAssembly() + '-' + saga.CorrelationId));
                    }
            }
Esempio n. 7
0
            public void NullSagaNotCached()
            {
                var sagaStore = new Mock <IStoreSagas>();
                var sagaId    = GuidStrategy.NewGuid();

                using (var cachedSagaStore = new CachedSagaStore(sagaStore.Object))
                {
                    Saga cachedSaga = default(Saga);

                    sagaStore.Setup(mock => mock.TryGetSaga(typeof(Saga), sagaId, out cachedSaga)).Returns(false);

                    Assert.False(cachedSagaStore.TryGetSaga(typeof(Saga), sagaId, out cachedSaga));
                    Assert.False(cachedSagaStore.TryGetSaga(typeof(Saga), sagaId, out cachedSaga));

                    sagaStore.Verify(mock => mock.TryGetSaga(typeof(Saga), sagaId, out cachedSaga), Times.Exactly(2));
                }
            }
Esempio n. 8
0
            public void CacheAndReuseExistingSaga()
            {
                var sagaStore = new Mock <IStoreSagas>();
                var sagaId    = GuidStrategy.NewGuid();

                using (var cachedSagaStore = new CachedSagaStore(sagaStore.Object))
                {
                    Saga cachedSaga = new FakeSaga();

                    sagaStore.Setup(mock => mock.TryGetSaga(typeof(Saga), sagaId, out cachedSaga)).Returns(true);

                    Assert.True(cachedSagaStore.TryGetSaga(typeof(Saga), sagaId, out cachedSaga));
                    Assert.True(cachedSagaStore.TryGetSaga(typeof(Saga), sagaId, out cachedSaga));

                    sagaStore.Verify(mock => mock.TryGetSaga(typeof(Saga), sagaId, out cachedSaga), Times.Once());
                }
            }
            public void NullSagaNotCached()
            {
                var sagaStore = new Mock<IStoreSagas>();
                var sagaId = GuidStrategy.NewGuid();

                using (var cachedSagaStore = new CachedSagaStore(sagaStore.Object))
                {
                    Saga cachedSaga = default(Saga);

                    sagaStore.Setup(mock => mock.TryGetSaga(typeof(Saga), sagaId, out cachedSaga)).Returns(false);

                    Assert.False(cachedSagaStore.TryGetSaga(typeof(Saga), sagaId, out cachedSaga));
                    Assert.False(cachedSagaStore.TryGetSaga(typeof(Saga), sagaId, out cachedSaga));

                    sagaStore.Verify(mock => mock.TryGetSaga(typeof(Saga), sagaId, out cachedSaga), Times.Exactly(2));
                }
            }
            public void CacheAndReuseExistingSaga()
            {
                var sagaStore = new Mock<IStoreSagas>();
                var sagaId = GuidStrategy.NewGuid();

                using (var cachedSagaStore = new CachedSagaStore(sagaStore.Object))
                {
                    Saga cachedSaga = new FakeSaga();

                    sagaStore.Setup(mock => mock.TryGetSaga(typeof(Saga), sagaId, out cachedSaga)).Returns(true);

                    Assert.True(cachedSagaStore.TryGetSaga(typeof(Saga), sagaId, out cachedSaga));
                    Assert.True(cachedSagaStore.TryGetSaga(typeof(Saga), sagaId, out cachedSaga));

                    sagaStore.Verify(mock => mock.TryGetSaga(typeof(Saga), sagaId, out cachedSaga), Times.Once());
                }
            }
Esempio n. 11
0
            public void SagaRemovedFromCacheIfCompleted()
            {
                var saga = new FakeSaga {
                    CorrelationId = GuidStrategy.NewGuid()
                };
                var sagaStore  = new Mock <IStoreSagas>();
                var cachedSaga = default(Saga);

                using (var sagaContext = new SagaContext(typeof(FakeSaga), saga.CorrelationId, new FakeEvent()))
                    using (var cachedSagaStore = new CachedSagaStore(sagaStore.Object))
                    {
                        cachedSagaStore.Save(saga, sagaContext);

                        saga.Completed = true;

                        cachedSagaStore.Save(saga, sagaContext);

                        Assert.False(cachedSagaStore.TryGetSaga(typeof(FakeSaga), saga.CorrelationId, out cachedSaga));
                    }
            }
Esempio n. 12
0
            public void SagaRemovedFromCacheIfConcurrencyExceptionThrown()
            {
                var saga = new FakeSaga {
                    CorrelationId = GuidStrategy.NewGuid()
                };
                var sagaStore  = new Mock <IStoreSagas>();
                var cachedSaga = default(Saga);
                var save       = 0;

                using (var sagaContext = new SagaContext(typeof(FakeSaga), saga.CorrelationId, new FakeEvent()))
                    using (var cachedSagaStore = new CachedSagaStore(sagaStore.Object))
                    {
                        sagaStore.Setup(mock => mock.Save(It.IsAny <Saga>(), sagaContext)).Callback(() => { if (save++ == 1)
                                                                                                            {
                                                                                                                throw new ConcurrencyException();
                                                                                                            }
                                                                                                    });
                        cachedSagaStore.Save(saga, sagaContext);

                        Assert.True(cachedSagaStore.TryGetSaga(typeof(FakeSaga), saga.CorrelationId, out cachedSaga));
                        Assert.Throws <ConcurrencyException>(() => cachedSagaStore.Save(saga, sagaContext));
                        Assert.False(cachedSagaStore.TryGetSaga(typeof(FakeSaga), saga.CorrelationId, out cachedSaga));
                    }
            }
            public void DelegateToDecoratedSagaStore()
            {
                var sagaStore = new Mock<IStoreSagas>();
                var upperBound = DateTime.Now;

                using (var cachedSagaStore = new CachedSagaStore(sagaStore.Object))
                {
                    cachedSagaStore.GetScheduledTimeouts(upperBound);

                    sagaStore.Verify(mock => mock.GetScheduledTimeouts(upperBound), Times.Once());
                }
            }
            public void SagaRemovedFromCacheIfCompleted()
            {
                var saga = new FakeSaga { CorrelationId = GuidStrategy.NewGuid() };
                var sagaStore = new Mock<IStoreSagas>();
                var cachedSaga = default(Saga);

                using (var sagaContext = new SagaContext(typeof(FakeSaga), saga.CorrelationId, new FakeEvent()))
                using (var cachedSagaStore = new CachedSagaStore(sagaStore.Object))
                {
                    cachedSagaStore.Save(saga, sagaContext);

                    saga.Completed = true;

                    cachedSagaStore.Save(saga, sagaContext);

                    Assert.False(cachedSagaStore.TryGetSaga(typeof(FakeSaga), saga.CorrelationId, out cachedSaga));
                }
            }
            public void SagaRemovedFromCacheIfConcurrencyExceptionThrown()
            {
                var saga = new FakeSaga { CorrelationId = GuidStrategy.NewGuid() };
                var sagaStore = new Mock<IStoreSagas>();
                var cachedSaga = default(Saga);
                var save = 0;

                using (var sagaContext = new SagaContext(typeof(FakeSaga), saga.CorrelationId, new FakeEvent()))
                using (var cachedSagaStore = new CachedSagaStore(sagaStore.Object))
                {
                    sagaStore.Setup(mock => mock.Save(It.IsAny<Saga>(), sagaContext)).Callback(() => { if (save++ == 1) { throw new ConcurrencyException(); } });
                    cachedSagaStore.Save(saga, sagaContext);

                    Assert.True(cachedSagaStore.TryGetSaga(typeof(FakeSaga), saga.CorrelationId, out cachedSaga));
                    Assert.Throws<ConcurrencyException>(() => cachedSagaStore.Save(saga, sagaContext));
                    Assert.False(cachedSagaStore.TryGetSaga(typeof(FakeSaga), saga.CorrelationId, out cachedSaga));
                }
            }
            public void SagaUpdatedAfterSaveIfNotCompleted()
            {
                var saga = new FakeSaga { CorrelationId = GuidStrategy.NewGuid() };
                var memoryCache = new MemoryCache(Guid.NewGuid().ToString());
                var sagaStore = new Mock<IStoreSagas>();

                using (var sagaContext = new SagaContext(typeof(FakeSaga), saga.CorrelationId, new FakeEvent()))
                using (var cachedSagaStore = new CachedSagaStore(sagaStore.Object, TimeSpan.FromMinutes(1), memoryCache))
                {
                    cachedSagaStore.Save(saga, sagaContext);

                    Assert.Same(saga, memoryCache.Get(typeof(FakeSaga).GetFullNameWithAssembly() + '-' + saga.CorrelationId));
                }
            }
            public void AlwaysReturnCopyOfCachedSaga()
            {
                var sagaStore = new Mock<IStoreSagas>();
                var sagaId = GuidStrategy.NewGuid();

                using (var cachedSagaStore = new CachedSagaStore(sagaStore.Object))
                {
                    Saga cachedSaga = new FakeSaga(), result1, result2;

                    sagaStore.Setup(mock => mock.TryGetSaga(typeof(Saga), sagaId, out cachedSaga)).Returns(true);

                    Assert.True(cachedSagaStore.TryGetSaga(typeof(Saga), sagaId, out result1));
                    Assert.True(cachedSagaStore.TryGetSaga(typeof(Saga), sagaId, out result2));
                    Assert.NotSame(result1, result2);
                }
            }
            public void DelegateToDecoratedSagaStore()
            {
                var sagaStore = new Mock<IStoreSagas>();

                using (var cachedSagaStore = new CachedSagaStore(sagaStore.Object))
                {
                    cachedSagaStore.Purge();

                    sagaStore.Verify(mock => mock.Purge(), Times.Once());
                }
            }