public void TestCatchup() { if (_connectionString == null) { return; } var eventStore = new PostgresEventStore(null, _connectionString, "TestProjection", true) as IEventStore; var poopProjection = new PoopProjection(); eventStore.Projections.Add(poopProjection); var snoopyId = Guid.NewGuid(); var snoopy = new DogAggregate(snoopyId, "Snoopy"); snoopy.Poop(100); snoopy.Poop(100); snoopy.Poop(100); eventStore.Aggregates.Store(snoopy); ((PostgresEventStore)eventStore).NumberOfInlineEventsNotCatchedUp.Should().Be(4); poopProjection.PoopReport.First().PoopTotal.Should().Be(300); // Open new event store and dehydrate events var eventStore2 = new PostgresEventStore(null, _connectionString, "TestProjection", false) as IEventStore; var poopProjection2 = new PoopProjection(); eventStore2.Projections.Add(poopProjection2); eventStore2.DehydrateProjections(); ((PostgresEventStore)eventStore2).NumberOfInlineEventsNotCatchedUp.Should().Be(0); poopProjection2.PoopReport.Count.Should().Be(1); var snoopy2 = eventStore.Aggregates.Load <DogAggregate>(snoopyId); snoopy2.Poop(100); eventStore2.Aggregates.Store(snoopy2); poopProjection2.PoopReport.First().PoopTotal.Should().Be(400); ((PostgresEventStore)eventStore2).NumberOfInlineEventsNotCatchedUp.Should().Be(1); // Check that after catchup the projection is still the same and inline event list is cleaned up eventStore2.CatchUp(); poopProjection2.PoopReport.First().PoopTotal.Should().Be(400); ((PostgresEventStore)eventStore2).NumberOfInlineEventsNotCatchedUp.Should().Be(0); }
public void TestDehydrateProjections() { if (_connectionString == null) { return; } // Create events store, put some events in var eventStore = new PostgresEventStore(null, _connectionString, "TestDehydrateProjections", true) as IEventStore; Stopwatch sw = new Stopwatch(); sw.Start(); for (int i = 0; i < 1000; i++) { var dog = new DogAggregate(Guid.NewGuid(), "Dog name"); dog.Poop(2000); dog.Poop(1030); dog.Poop(1020); dog.Poop(1100); dog.Bark(1020); dog.Bark(1040); dog.Poop(1200); dog.Poop(1300); dog.Bark(1040); dog.Poop(1200); eventStore.Aggregates.Store(dog); } sw.Stop(); System.Diagnostics.Debug.WriteLine("Create 10000 events took: " + (sw.ElapsedMilliseconds) + " milliseconds"); // Create new instance of event store and dehydrate into in-memory projection var eventStore2 = new PostgresEventStore(null, _connectionString, "TestDehydrateProjections") as IEventStore; var poopProjection = new PoopProjection(); eventStore.Projections.Add(poopProjection); sw.Restart(); eventStore.DehydrateProjections(); sw.Stop(); System.Diagnostics.Debug.WriteLine("Dehydrate 10000 events took: " + (sw.ElapsedMilliseconds) + " milliseconds"); poopProjection.PoopReport.Count.Should().Be(1000); }