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()); }
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."); }
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)); }
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); }
public void TestSetup() { _reader1 = new MongoReader <SampleReadModel, string>(Database); _reader2 = new MongoReader <SampleReadModel2, string>(Database); _reader3 = new MongoReader <SampleReadModel3, string>(Database); }