public async Task Database_command_timeouts_during_catchup_do_not_interrupt_catchup() { // reset read model tracking to 0 ReadModelDbContext().DisposeAfter(c => { var projectorName = ReadModelInfo.NameForProjector(new Projector <Order.CustomerInfoChanged>()); c.Set <ReadModelInfo>() .SingleOrDefault(i => i.Name == projectorName) .IfNotNull() .ThenDo(i => { i.CurrentAsOfEventId = 0; }); c.SaveChanges(); }); var exceptions = new Stack <Exception>(Enumerable.Range(1, 2) .Select(_ => new InvalidOperationException("Invalid attempt to call IsDBNull when reader is closed."))); var count = 0; var flakyEvents = new FlakyEventStream( Enumerable.Range(1, 1000) .Select(i => new StorableEvent { AggregateId = Any.Guid(), Body = new Order.CustomerInfoChanged { CustomerName = i.ToString() }.ToJson(), SequenceNumber = i, StreamName = typeof(Order).Name, Timestamp = DateTimeOffset.Now, Type = typeof(Order.CustomerInfoChanged).Name, Id = i }).ToArray(), startFlakingOnEnumeratorNumber: 2, doSomethingFlaky: i => { if (count++ > 50) { count = 0; if (exceptions.Any()) { throw exceptions.Pop(); } } }); var names = new HashSet <string>(); var projector = new Projector <Order.CustomerInfoChanged> { OnUpdate = (work, e) => names.Add(e.CustomerName) }; using (var catchup = CreateReadModelCatchup(projector)) { await catchup.Run(); } projector.CallCount.Should().Be(1000); names.Count.Should().Be(1000); }
public FlakyEnumerator(FlakyEventStream eventStream) { this.eventStream = eventStream; }