コード例 #1
0
ファイル: EventStoreDbTest.cs プロジェクト: yuanfeiw/Its.Cqrs
        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;
            }
        }
コード例 #2
0
        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);
            }
        }