示例#1
0
        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);
        }
示例#2
0
 public FlakyEnumerator(FlakyEventStream eventStream)
 {
     this.eventStream = eventStream;
 }