Example #1
0
        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());
        }
Example #2
0
 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))
 {
 }
Example #3
0
 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");
 }
Example #4
0
 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()));
 }
Example #5
0
        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);
            }
        }
Example #7
0
    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;
 }
Example #11
0
 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());
        }
        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);
            }
        }