示例#1
0
        public async Task run_poll_and_wait()
        {
            var reader    = new MongoReader <SampleReadModel, string>(Database);
            var aggregate = await Repository.GetByIdAsync <SampleAggregate>(new SampleAggregateId(1)).ConfigureAwait(false);

            aggregate.Create();
            await Repository.SaveAsync(aggregate, Guid.NewGuid().ToString(), h => { }).ConfigureAwait(false);

            Thread.Sleep(50);
            await Engine.UpdateAndWaitAsync().ConfigureAwait(false);

            Assert.AreEqual(1, reader.AllSortedById.Count());

            // now stop the engine
            Engine.Stop();

            // now simulate an interrupted rebuild
            var checkpoint = _checkpoints.AsQueryable().First();

            checkpoint.Current = null;
            _checkpoints.Save(checkpoint, checkpoint.Id);

            try
            {
                Engine.StartSync();
                Assert.Fail("Exception expected");
            }
            catch (AggregateException aex)
            {
                var ex = aex.Flatten();
                Assert.That(ex.InnerException, Is.InstanceOf <JarvisFrameworkEngineException>());
            }
        }
        public async void verify_projection_removed()
        {
            var reader    = new MongoReader <SampleReadModel, string>(Database);
            var aggregate = TestAggregateFactory.Create <SampleAggregate, SampleAggregate.State>(new SampleAggregateId(1));

            aggregate.Create();
            Repository.Save(aggregate, Guid.NewGuid(), h => { });

            aggregate = TestAggregateFactory.Create <SampleAggregate, SampleAggregate.State>(new SampleAggregateId(2));
            aggregate.Create();
            Repository.Save(aggregate, Guid.NewGuid(), h => { });

            var stream     = _eventStore.Advanced.GetFrom("0");
            var lastCommit = stream.Last();
            await Engine.UpdateAndWait();

            Assert.That(_statusChecker.IsCheckpointProjectedByAllProjection(lastCommit.CheckpointToken), Is.True);

            //now projection 3 is not returned anymore, it simulates a projection that is no more active
            returnProjection3 = false;
            ConfigureEventStore();
            ConfigureProjectionEngine();

            aggregate = TestAggregateFactory.Create <SampleAggregate, SampleAggregate.State>(new SampleAggregateId(3));
            aggregate.Create();
            Repository.Save(aggregate, Guid.NewGuid(), h => { });

            stream     = _eventStore.Advanced.GetFrom("0");
            lastCommit = stream.Last();
            await Engine.UpdateAndWait();

            Assert.That(_statusChecker.IsCheckpointProjectedByAllProjection(lastCommit.CheckpointToken), Is.True);
        }
        public virtual void TestFixtureSetUp()
        {
            _eventStoreConnectionString = ConfigurationManager.ConnectionStrings["eventstore"].ConnectionString;

            var url    = new MongoUrl(_eventStoreConnectionString);
            var client = new MongoClient(url);

            _db = client.GetDatabase(url.DatabaseName);
            _db.Drop();

            ProjectionEngineConfig config = new ProjectionEngineConfig();

            config.EventStoreConnectionString = _eventStoreConnectionString;
            config.Slots      = new string[] { "*" };
            config.TenantId   = new TenantId("A");
            config.BucketInfo = new List <BucketInfo>();
            config.BucketInfo.Add(new BucketInfo()
            {
                Slots = new[] { "*" }, BufferSize = 10000
            });

            _identityConverter = new IdentityManager(new CounterService(_db));
            _identityConverter.RegisterIdentitiesFromAssembly(typeof(SampleAggregateId).Assembly);
            ConfigureEventStore();
            CommitEnhancer commitEnhancer = new CommitEnhancer(_identityConverter);

            _eventUnwinder = new EventUnwinder(config, new TestLogger(LoggerLevel.Info));

            _unwindedEventCollection = _db.GetCollection <UnwindedDomainEvent>("UnwindedEvents");
            MongoFlatMapper.EnableFlatMapping(true);
            MongoFlatIdSerializerHelper.Initialize(_identityConverter);

            var rebuildContext = new RebuildContext(NitroEnabled);

            _storageFactory = new MongoStorageFactory(_db, rebuildContext);

            _reader1 = new MongoReader <SampleReadModel, string>(_db);
            _reader2 = new MongoReader <SampleReadModel2, string>(_db);
            _reader3 = new MongoReader <SampleReadModel3, string>(_db);

            //now configure RebuildProjectionEngine
            _tracker = new ConcurrentCheckpointTracker(_db);


            var projections = BuildProjections().ToArray();

            _tracker.SetUp(projections, 1, false);
            ProjectionEventInspector inspector = new ProjectionEventInspector();

            inspector.AddAssembly(Assembly.GetExecutingAssembly());
            sut        = new RebuildProjectionEngine(_eventUnwinder, _tracker, projections, rebuildContext, config, inspector);
            sut.Logger = new TestLogger(LoggerLevel.Debug);

            _checkpointCollection = _db.GetCollection <Checkpoint>("checkpoints");
        }
        public async void run_poll_and_wait()
        {
            var reader    = new MongoReader <SampleReadModel, string>(Database);
            var aggregate = TestAggregateFactory.Create <SampleAggregate, SampleAggregate.State>(new SampleAggregateId(1));

            aggregate.Create();
            Repository.Save(aggregate, Guid.NewGuid(), h => { });
            Thread.Sleep(50);
            await Engine.UpdateAndWait();

            Assert.AreEqual(1, reader.AllSortedById.Count());
        }
示例#5
0
        public async Task run_poll_and_wait()
        {
            var reader    = new MongoReader <SampleReadModel, string>(Database);
            var aggregate = await Repository.GetByIdAsync <SampleAggregate>(new SampleAggregateId(1)).ConfigureAwait(false);

            aggregate.Create();
            await Repository.SaveAsync(aggregate, Guid.NewGuid().ToString(), h => { }).ConfigureAwait(false);

            Thread.Sleep(50);
            await Engine.UpdateAndWaitAsync().ConfigureAwait(false);

            Assert.AreEqual(1, reader.AllSortedById.Count());
        }
        public async void start_with_rebuild_then_stop_rebuild()
        {
            var reader    = new MongoReader <SampleReadModel, string>(Database);
            var aggregate = TestAggregateFactory.Create <SampleAggregate, SampleAggregate.State>(new SampleAggregateId(1));

            aggregate.Create();
            Repository.Save(aggregate, Guid.NewGuid(), h => { });
            Thread.Sleep(50);
            await Engine.UpdateAndWait();

            Assert.AreEqual(1, reader.AllSortedById.Count());
            var checkpoint = _checkpoints.FindOneById("Projection");

            Assert.That(checkpoint.Value, Is.EqualTo("1"), "Checkpoint is written after rebuild.");
        }
示例#7
0
        public async Task start_with_rebuild_then_stop_rebuild()
        {
            var reader    = new MongoReader <SampleReadModel, string>(Database);
            var aggregate = await Repository.GetByIdAsync <SampleAggregate>(new SampleAggregateId(1)).ConfigureAwait(false);

            aggregate.Create();
            await Repository.SaveAsync(aggregate, Guid.NewGuid().ToString(), h => { }).ConfigureAwait(false);

            Thread.Sleep(50);
            await Engine.UpdateAndWaitAsync().ConfigureAwait(false);

            Assert.AreEqual(1, reader.AllSortedById.Count());
            var checkpoint = _checkpoints.FindOneById("Projection");

            Assert.That(checkpoint.Value, Is.EqualTo(1), "Checkpoint is written after rebuild.");
        }
        public async void verify_priority_is_maintained()
        {
            var reader    = new MongoReader <SampleReadModel, string>(Database);
            var reader2   = new MongoReader <SampleReadModel2, string>(Database);
            var aggregate = TestAggregateFactory.Create <SampleAggregate, SampleAggregate.State>(new SampleAggregateId(1));

            aggregate.Create();
            Repository.Save(aggregate, Guid.NewGuid(), h => { });
            Thread.Sleep(100);
            await Engine.UpdateAndWait();

            var rm  = reader.AllUnsorted.Single();
            var rm2 = reader2.AllUnsorted.Single();

            Assert.That(rm2.Timestamp, Is.LessThan(rm.Timestamp));
        }
        public async Task verify_priority_is_maintained()
        {
            var reader    = new MongoReader <SampleReadModel, string>(Database);
            var reader2   = new MongoReader <SampleReadModel2, string>(Database);
            var aggregate = await Repository.GetByIdAsync <SampleAggregate>(new SampleAggregateId(1)).ConfigureAwait(false);

            aggregate.Create();
            await Repository.SaveAsync(aggregate, Guid.NewGuid().ToString(), h => { }).ConfigureAwait(false);

            Thread.Sleep(100);
            await Engine.UpdateAndWaitAsync().ConfigureAwait(false);

            var rm  = reader.AllUnsorted.Single();
            var rm2 = reader2.AllUnsorted.Single();

            Assert.That(rm2.Timestamp, Is.LessThan(rm.Timestamp));
        }
示例#10
0
        public async void run_poller()
        {
            var reader    = new MongoReader <SampleReadModel, string>(Database);
            var aggregate = TestAggregateFactory.Create <SampleAggregate, SampleAggregate.State>(new SampleAggregateId(1));

            aggregate.Create();
            Repository.Save(aggregate, Guid.NewGuid(), h => { });

            aggregate = TestAggregateFactory.Create <SampleAggregate, SampleAggregate.State>(new SampleAggregateId(2));
            aggregate.Create();
            Repository.Save(aggregate, Guid.NewGuid(), h => { });

            var stream     = _eventStore.Advanced.GetFrom("0");
            var lastCommit = stream.Last();

            Assert.That(_statusChecker.IsCheckpointProjectedByAllProjection(lastCommit.CheckpointToken), Is.False);

            await Engine.UpdateAndWait();

            Assert.That(_statusChecker.IsCheckpointProjectedByAllProjection(lastCommit.CheckpointToken), Is.True);
        }
示例#11
0
 public void TestSetup()
 {
     _reader1 = new MongoReader <SampleReadModel, string>(Database);
     _reader2 = new MongoReader <SampleReadModel2, string>(Database);
     _reader3 = new MongoReader <SampleReadModel3, string>(Database);
 }