public void Persister_Can_Successfully_Persist_New_Items_In_Memory() { var items = this.BuildItems(numberOfFeeds: 10, numberOfTweets: 20); var oldItem = this.BuildItem(DateTime.MinValue); var savedItems = new List <Item>(); var fakeStreamAggregator = new Mock <IItemAggregator>(); fakeStreamAggregator.Setup(a => a.GetLatest(DateTime.MinValue)).Returns(items); var fakeStreamProcessor = new Mock <IItemProcessor>(MockBehavior.Loose); var fakeStreamStorage = new Mock <IStreamStorage>(); fakeStreamStorage.Setup(s => s.Top()).Returns(oldItem); fakeStreamStorage.Setup(s => s.Save(It.IsAny <IEnumerable <Item> >())).Callback <IEnumerable <Item> >(savedItems.AddRange); var streamPersister = new StreamPersister(fakeStreamAggregator.Object, fakeStreamProcessor.Object, fakeStreamStorage.Object); streamPersister.PersistLatest(); CollectionAssert.AreEquivalent(items, savedItems); fakeStreamAggregator.Verify(a => a.GetLatest(oldItem.Published), Times.Once()); fakeStreamProcessor.Verify(p => p.Process(It.IsAny <Item>()), Times.Exactly(items.Count)); fakeStreamStorage.Verify(s => s.Top(), Times.Once()); fakeStreamStorage.Verify(s => s.Save(It.IsAny <IEnumerable <Item> >()), Times.Once()); }
public ReceiveRegistration(Func <Task <SqlConnection> > connectionFactory, StreamPersister persister) : base( stepId: $"{AssemblyHelper.Name}Receive", behavior: typeof(ReceiveBehavior), description: "Copies the shared data back to the logical messages", factoryMethod: builder => new ReceiveBehavior(connectionFactory, persister)) { }
public SendRegistration(Func <Task <SqlConnection> > connectionFactory, StreamPersister streamPersister, GetTimeToKeep timeToKeep) : base( stepId: $"{AssemblyHelper.Name}Send", behavior: typeof(SendBehavior), description: "Saves the payload into the shared location", factoryMethod: builder => new SendBehavior(connectionFactory, streamPersister, timeToKeep)) { InsertAfter("MutateOutgoingMessages"); InsertBefore("ApplyTimeToBeReceived"); }
static Cleaner CreateCleaner(AttachmentSettings settings, StreamPersister streamPersister, IBuilder builder) { return(new Cleaner(async token => { using (var connection = await settings.ConnectionFactory().ConfigureAwait(false)) { streamPersister.CleanupItemsOlderThan(connection, null, DateTime.UtcNow); } }, criticalError: builder.Build <CriticalError>().Raise, frequencyToRunCleanup: TimeSpan.FromHours(1), timer: new AsyncTimer())); }
public void Persister_Can_Successfully_Persist_New_Items_In_Database() { try { var streamPersister = new StreamPersister(ConnectionString, DatabaseName); streamPersister.PersistLatest(); } finally { MongoServer.Create(ConnectionString).DropDatabase(DatabaseName); } }
public void Persister_Can_Reprocess_Existing_Items_In_Database() { try { var streamPersister = new StreamPersister(ConnectionString, DatabaseName); streamPersister.PersistLatest(); streamPersister.Reprocess(); } finally { MongoServer.Create(ConnectionString).DropDatabase(DatabaseName); } }
protected override void Setup(FeatureConfigurationContext context) { var settings = context.Settings.Get <AttachmentSettings>(); var pipeline = context.Pipeline; var persister = new StreamPersister(settings.Schema, settings.TableName); pipeline.Register(new ReceiveRegistration(settings.ConnectionFactory, persister)); pipeline.Register(new SendRegistration(settings.ConnectionFactory, persister, settings.TimeToKeep)); if (settings.RunCleanTask) { context.RegisterStartupTask(builder => CreateCleaner(settings, persister, builder)); } }
public void Persister_Can_Reprocess_Existing_Items_In_Memory() { var items = this.BuildItems(numberOfFeeds: 10, numberOfTweets: 20); var fakeStreamAggregator = new Mock<IItemAggregator>(); var fakeStreamProcessor = new Mock<IItemProcessor>(MockBehavior.Loose); var fakeStreamStorage = new Mock<IStreamStorage>(MockBehavior.Loose); fakeStreamStorage.Setup(s => s.GetLatest(null, null, null, null)).Returns(items); var streamPersister = new StreamPersister(fakeStreamAggregator.Object, fakeStreamProcessor.Object, fakeStreamStorage.Object); streamPersister.Reprocess(); fakeStreamProcessor.Verify(p => p.Process(It.IsAny<Item>()), Times.Exactly(items.Count)); fakeStreamStorage.Verify(s => s.GetLatest(null, null, null, null), Times.Once()); fakeStreamStorage.Verify(s => s.Save(It.IsAny<IEnumerable<Item>>()), Times.Once()); }
internal MessageAttachments(Func <Task <SqlConnection> > connectionFactory, string messageId, StreamPersister streamPersister) { this.connectionFactory = connectionFactory; this.messageId = messageId; this.streamPersister = streamPersister; }
public ReceiveBehavior(Func <Task <SqlConnection> > connectionBuilder, StreamPersister persister) { this.connectionBuilder = connectionBuilder; this.persister = persister; }
public StreamPersisterTests(ITestOutputHelper output) : base(output) { persister = new StreamPersister("dbo", "Attachments"); }
public SendBehavior(Func <Task <SqlConnection> > connectionFactory, StreamPersister persister, GetTimeToKeep timeToKeep) { this.connectionFactory = connectionFactory; this.persister = persister; endpointTimeToKeep = timeToKeep; }
public void Persister_Can_Successfully_Persist_New_Items_In_Memory() { var items = this.BuildItems(numberOfFeeds: 10, numberOfTweets: 20); var oldItem = this.BuildItem(DateTime.MinValue); var savedItems = new List<Item>(); var fakeStreamAggregator = new Mock<IItemAggregator>(); fakeStreamAggregator.Setup(a => a.GetLatest(DateTime.MinValue)).Returns(items); var fakeStreamProcessor = new Mock<IItemProcessor>(MockBehavior.Loose); var fakeStreamStorage = new Mock<IStreamStorage>(); fakeStreamStorage.Setup(s => s.Top()).Returns(oldItem); fakeStreamStorage.Setup(s => s.Save(It.IsAny<IEnumerable<Item>>())).Callback<IEnumerable<Item>>(savedItems.AddRange); var streamPersister = new StreamPersister(fakeStreamAggregator.Object, fakeStreamProcessor.Object, fakeStreamStorage.Object); streamPersister.PersistLatest(); CollectionAssert.AreEquivalent(items, savedItems); fakeStreamAggregator.Verify(a => a.GetLatest(oldItem.Published), Times.Once()); fakeStreamProcessor.Verify(p => p.Process(It.IsAny<Item>()), Times.Exactly(items.Count)); fakeStreamStorage.Verify(s => s.Top(), Times.Once()); fakeStreamStorage.Verify(s => s.Save(It.IsAny<IEnumerable<Item>>()), Times.Once()); }