public EventStoreDbTest() { Logging.Configure(); SetConnectionStrings(); Command <Order> .AuthorizeDefault = (order, command) => true; Command <CustomerAccount> .AuthorizeDefault = (order, command) => true; lock (lockObj) { if (databasesInitialized) { return; } // TODO: (EventStoreDbTest) figure out a db cleanup story //#if !DEBUG // new EventStoreDbContext().Database.Delete(); // new OtherEventStoreDbContext().Database.Delete(); // new ReadModelDbContext().Database.Delete(); // new ReadModels1DbContext().Database.Delete(); // new ReadModels2DbContext().Database.Delete(); // new CommandSchedulerDbContext().Database.Delete(); //#endif using (var eventStore = new EventStoreDbContext()) { new EventStoreDatabaseInitializer <EventStoreDbContext>().InitializeDatabase(eventStore); } using (var db = new CommandSchedulerDbContext()) { new CommandSchedulerDatabaseInitializer().InitializeDatabase(db); } using (var eventStore = new OtherEventStoreDbContext()) { new EventStoreDatabaseInitializer <OtherEventStoreDbContext>().InitializeDatabase(eventStore); } using (var db = new ReadModelDbContext()) { new ReadModelDatabaseInitializer <ReadModelDbContext>().InitializeDatabase(db); } using (var db = new ReadModels1DbContext()) { new ReadModelDatabaseInitializer <ReadModels1DbContext>().InitializeDatabase(db); } using (var db = new ReadModels2DbContext()) { new ReadModelDatabaseInitializer <ReadModels2DbContext>().InitializeDatabase(db); } databasesInitialized = true; } }
public void Rolling_catchup_can_be_run_based_on_event_store_polling() { var numberOfEvents = 50; Console.WriteLine("writing " + numberOfEvents + " starting at " + HighestEventId); // start the catchup in polling mode Projector <Order.ItemAdded> projector = null; var reading = Task.Run(() => { projector = new Projector <Order.ItemAdded>(() => new ReadModels1DbContext()); using (var catchup = CreateReadModelCatchup <ReadModels1DbContext>(projector).PollEventStore()) { catchup.Progress .Do(s => Console.WriteLine(s)) .FirstAsync(s => s.IsEndOfBatch && s.CurrentEventId == numberOfEvents + HighestEventId) .Timeout(DefaultTimeout) .Wait(); } }); // now start writing a bunch of new events var writing = Task.Run(() => Enumerable.Range(1, numberOfEvents).ForEach(_ => { // add a little variation into the intervals at which new events are written Thread.Sleep(Any.PositiveInt(1000)); Events.Write(1); })); writing.Wait(); reading.Wait(); using (var db = new ReadModels1DbContext()) { var readModelInfoName = ReadModelInfo.NameForProjector(projector); db.Set <ReadModelInfo>() .Single(i => i.Name == readModelInfoName) .CurrentAsOfEventId .Should() .Be(HighestEventId + numberOfEvents); } }