public EventProcessingLoopTests() { fixture = new Fixture(); mediator = Substitute.For <IMediator>(); eventStream = new InMemoryEventStream(); tokenSource = new CancellationTokenSource(); loop = new EventProcessingLoop(tokenSource.Token, mediator, eventStream); }
public EventProcessingLoop( CancellationToken stoppingToken, IMediator mediator, InMemoryEventStream eventStream ) { StoppingToken = stoppingToken; Mediator = mediator; EventStream = eventStream; }
public async Task Events_added_to_the_in_memory_context_but_failing_on_concurrency_cannot_be_queried_back() { var eventStream = new InMemoryEventStream(); var aggregateId = Any.Guid(); Func <EventStoreDbContext> createDbContext = () => { // return TestDatabases.EventStoreDbContext(); return(new InMemoryEventStoreDbContext(eventStream)); }; using (var db = createDbContext()) { db.Events.Add(new Order.Created { AggregateId = aggregateId, SequenceNumber = 1, OrderNumber = "one" }.ToStorableEvent()); db.SaveChanges(); } using (var db = createDbContext()) { db.Events.Add(new Order.Created { AggregateId = aggregateId, SequenceNumber = 1, OrderNumber = "two" }.ToStorableEvent()); Action save = () => db.SaveChanges(); save.ShouldThrow <DbUpdateException>() .Which .IsConcurrencyException() .Should() .BeTrue(); } using (var db = createDbContext()) { var created = db.Events.Single(e => e.AggregateId == aggregateId && e.SequenceNumber == 1) .ToDomainEvent() as Order.Created; created.Should().NotBeNull(); created.OrderNumber.Should().Be("one"); } }
protected override IEventSourcedRepository <TAggregate> CreateRepository <TAggregate>( Action onSave = null) { if (onSave != null) { var eventStream = new InMemoryEventStream(); Configuration.Current.UseDependency(_ => eventStream); eventStream.BeforeSave += (sender, @event) => onSave(); } return(Configuration.Current.Repository <TAggregate>()); }
public async Task Trigger_Message_IsDelivered() { // arrange var sent = new EventMessage("foo", "bar"); var eventStream = new InMemoryEventStream(); // act eventStream.Trigger(sent); // assert IEventMessage received = await eventStream.ReadAsync(); Assert.Equal(sent, received); }
public async Task Trigger_Message_IsDelivered() { // arrange using var cts = new CancellationTokenSource(30000); var sent = new EventMessage("foo", "bar"); var eventStream = new InMemoryEventStream(); IAsyncEnumerator <IEventMessage> enumerator = eventStream.GetAsyncEnumerator(cts.Token); // act await eventStream.TriggerAsync(sent, cts.Token); // assert Assert.True(await enumerator.MoveNextAsync()); Assert.Equal(sent, enumerator.Current); }
public async Task HandlesMultipleEventsOK() { // SETUP var es = new InMemoryEventStream(); var eStorage = new InMemoryEventStorage(); var sStorage = new InMemorySnapShotStorage(); var buildup = BuildUp.Initialize(t => { t.SetEventStream(es); t.SetEventProvider(eStorage); t.SetEventStorage(eStorage); t.SetSnapshotProvider(sStorage); t.SetSnapshotStorage(sStorage); }); var @event = new BuildUpEvent <RandomEvent> { StreamId = Guid.NewGuid(), Data = new RandomEvent { I = 5 }, EventDate = DateTime.UtcNow, Version = 1 }; var eventTwo = new BuildUpEvent <RandomEvent> { StreamId = @event.StreamId, Data = new RandomEvent { I = 72 }, EventDate = DateTime.UtcNow, Version = 2 }; //ACT es.PublishEvent(@event); es.PublishEvent(eventTwo); es.EndStream(); Thread.Sleep(25); //ASSERT var projections = await sStorage.GetSnapshots(@event.StreamId); var buildUpSnapshots = projections as IBuildUpSnapshot[] ?? projections.ToArray(); Assert.Single(buildUpSnapshots); var projection = (RandomProjection)buildUpSnapshots.First().Snapshot; Assert.Equal(72, projection.I); }
public void Dispose_CompletedEventIsRaised() { // arrange var sent = new EventMessage("foo", "bar"); var eventStream = new InMemoryEventStream(); bool eventRaised = false; eventStream.Completed += (s, e) => eventRaised = true; // act eventStream.Dispose(); // assert Assert.True(eventRaised); Assert.True(eventStream.IsCompleted); }
protected override async Task ExecuteAsync(CancellationToken stoppingToken) { using (IServiceScope scope = ServiceScopeFactory.CreateScope()) { IServiceProvider serviceProvider = scope.ServiceProvider; IMediator mediator = serviceProvider.GetRequiredService <IMediator>(); InMemoryEventStream eventStream = serviceProvider.GetRequiredService <InMemoryEventStream>(); EventProcessingLoop eventProcessingLoop = new EventProcessingLoop( stoppingToken, mediator, eventStream ); await eventProcessingLoop.Run(); } }
public async Task Dispose_CompletedEventIsRaised() { // arrange using var cts = new CancellationTokenSource(30000); var sent = new EventMessage("foo", "bar"); var eventStream = new InMemoryEventStream(); IAsyncEnumerator <IEventMessage> enumerator = eventStream.GetAsyncEnumerator(cts.Token); bool eventRaised = false; eventStream.Completed += (s, e) => eventRaised = true; // act await enumerator.DisposeAsync(); // assert Assert.True(eventRaised); Assert.False(await enumerator.MoveNextAsync()); }
public async Task Events_saved_to_the_in_memory_context_have_their_id_set() { var eventStream = new InMemoryEventStream(); using (var db = new InMemoryEventStoreDbContext(eventStream)) { Events.Write(5, createEventStore: () => db); await db.SaveChangesAsync(); Console.WriteLine(db.Events.Count()); } using (var db = new InMemoryEventStoreDbContext(eventStream)) { db.Events .Select(e => e.Id) .Should() .BeEquivalentTo(1L, 2L, 3L, 4L, 5L); } }
public async Task Events_in_the_currently_configured_event_stream_can_be_queried_from_the_In_memory_context() { var aggregateId = Any.Guid(); var storableEvent = new Order.Created { CustomerName = Any.FullName(), AggregateId = aggregateId }.ToStorableEvent(); var eventStream = new InMemoryEventStream(); await eventStream.Append(new[] { storableEvent.ToInMemoryStoredEvent() }); Configuration.Current.UseDependency(_ => eventStream); using (var db = new InMemoryEventStoreDbContext()) { var orderCreated = db.Events.Single(e => e.AggregateId == aggregateId); orderCreated.Should().NotBeNull(); } }
public async Task Events_can_be_added_to_the_context_and_queried_back() { var aggregateId = Any.Guid(); var storableEvent = new Order.Created { CustomerName = Any.FullName(), AggregateId = aggregateId }.ToStorableEvent(); var eventStream = new InMemoryEventStream(); using (var db = new InMemoryEventStoreDbContext(eventStream)) { db.Events.Add(storableEvent); await db.SaveChangesAsync(); var orderCreated = db.Events.Single(e => e.AggregateId == aggregateId); orderCreated.Should().NotBeNull(); } }
public async Task Events_saved_to_the_in_memory_context_have_their_id_set() { var eventStream = new InMemoryEventStream(); using (var db = new InMemoryEventStoreDbContext(eventStream)) { Events.Write(5, createEventStore: () => db); await db.SaveChangesAsync(); Console.WriteLine(db.Events.Count()); } using (var db = new InMemoryEventStoreDbContext(eventStream)) { Console.WriteLine(db.Events.Count()); db.Events .Select(e => e.Id) .Should() .BeEquivalentTo(1L, 2L, 3L, 4L, 5L); } }
public override void SetUp() { eventStream = new InMemoryEventStream(); base.SetUp(); }
public override void SetUp() { eventStream = new InMemoryEventStream(AggregateType <Order> .EventStreamName); base.SetUp(); }
public InMemoryEventPublisher(InMemoryEventStream eventStream) { EventStream = eventStream; }
public InMemoryEventPublisherTests() { fixture = new Fixture(); eventStream = new InMemoryEventStream(); eventPublisher = new InMemoryEventPublisher(eventStream); }