Exemple #1
0
        public async Task A110_PoisonMessageAuditAndContinueException()
        {
            var pp = CreatePoisonPersistence();
            var f  = new FuncExe();
            var cp = new List <EventHubs.EventData>();
            var p  = CreateProcessor(f, cp);
            var c  = CreatePartitionContext();

            await p.OpenAsync(c);

            var e = CreateEvent(0);

            e.Properties.Add("StopInvalidData", true);

            await p.ProcessEventsAsync(c, new EventHubs.EventData[] { e });

            Assert.AreEqual(0, f.TotalSuccess);
            Assert.AreEqual(0, f.TotalError);
            Assert.AreEqual(1, cp.Count);
            Assert.AreSame(e, cp[0]);

            await p.CloseAsync(c, CloseReason.Shutdown);

            Assert.AreEqual(0, f.TotalSuccess);
            Assert.AreEqual(0, pp.AddedEvents.Count);
            Assert.AreEqual(0, pp.RemovedEvents.Count);
            Assert.AreEqual(1, pp.AuditedEvents.Count);
            Assert.AreEqual(PoisonMessageAction.NotPoison, pp.Result);
        }
Exemple #2
0
        public async Task A100_RestartFromPoisonSkip()
        {
            var pp = CreatePoisonPersistence();
            var f  = new FuncExe();
            var cp = new List <EventHubs.EventData>();
            var p  = CreateProcessor(f, cp);
            var c  = CreatePartitionContext();

            pp.SetResult(PoisonMessageAction.PoisonSkip);

            await p.OpenAsync(c);

            var e = CreateEvent(0);

            await p.ProcessEventsAsync(c, new EventHubs.EventData[] { e });

            Assert.AreEqual(0, f.TotalSuccess);
            Assert.AreEqual(0, f.TotalError);
            Assert.AreEqual(1, cp.Count);
            Assert.AreSame(e, cp[0]);

            await p.CloseAsync(c, CloseReason.Shutdown);

            Assert.AreEqual(0, pp.AddedEvents.Count);
            Assert.AreEqual(1, pp.RemovedEvents.Count);
            Assert.AreEqual(0, pp.AuditedEvents.Count);
            Assert.AreEqual(PoisonMessageAction.NotPoison, pp.Result);
        }
Exemple #3
0
        public async Task A070_MultiPoison()
        {
            var pp = CreatePoisonPersistence();
            var f  = new FuncExe();
            var cp = new List <EventHubs.EventData>();
            var p  = CreateProcessor(f, cp);
            var c  = CreatePartitionContext();

            await p.OpenAsync(c);

            var e1 = CreateEvent(5);
            var e2 = CreateEvent(0); // This is a good one!
            var e3 = CreateEvent(5);
            await p.ProcessEventsAsync(c, new EventHubs.EventData[] { e1, e2, e3 });

            Assert.AreEqual(3, f.TotalSuccess);
            Assert.AreEqual(10, f.TotalError);
            Assert.AreEqual(2, cp.Count);
            Assert.AreSame(e2, cp[0]);
            Assert.AreSame(e3, cp[1]);

            await p.CloseAsync(c, CloseReason.Shutdown);

            Assert.AreEqual(2, pp.AddedEvents.Count);
            Assert.AreSame(e1, pp.AddedEvents[0]);
            Assert.AreSame(e3, pp.AddedEvents[1]);
            Assert.AreEqual(2, pp.RemovedEvents.Count);
            Assert.AreSame(e1, pp.RemovedEvents[0]);
            Assert.AreSame(e3, pp.RemovedEvents[1]);
            Assert.AreEqual(0, pp.AuditedEvents.Count);
            Assert.AreEqual(PoisonMessageAction.NotPoison, pp.Result);
        }
Exemple #4
0
 private ResilientEventHubProcessor CreateProcessor(FuncExe exe, List <EventHubs.EventData> checkpoints) => new ResilientEventHubProcessor(exe, CreateOptions(), null, TestSetUp.CreateLogger())
 {
     Checkpointer = (c, e) =>
     {
         checkpoints.Add(e);
         return(Task.CompletedTask);
     }
 };
        public async Task A010_OpenAndClose()
        {
            var pp = CreatePoisonPersistence();
            var f  = new FuncExe();
            var cp = new List <EventHubs.EventData>();
            var p  = CreateProcessor(f, cp);
            var c  = CreatePartitionContext();

            await p.OpenAsync(c);

            await p.CloseAsync(c, CloseReason.Shutdown);

            Assert.AreEqual(0, cp.Count);
            Assert.AreEqual(0, pp.AddedEvents.Count);
            Assert.AreEqual(0, pp.RemovedEvents.Count);
            Assert.AreEqual(PoisonMessageAction.NotPoison, pp.Result);
        }
Exemple #6
0
        public async Task A080_PoisonManualSkip()
        {
            var pp = CreatePoisonPersistence();
            var f  = new FuncExe();
            var cp = new List <EventHubs.EventData>();
            var p  = CreateProcessor(f, cp);
            var c  = CreatePartitionContext();

            await p.OpenAsync(c);

            var e1 = CreateEvent(int.MaxValue);
            var e2 = CreateEvent(0);

            // Let it go run away.
            var t = p.ProcessEventsAsync(c, new EventHubs.EventData[] { e1, e2 });

            // Wait a wee bit before checking it is in retry loop.
            await Task.Delay(500);

            Assert.AreEqual(0, f.TotalSuccess);
            Console.WriteLine($"TotalError {f.TotalError}");
            Assert.IsTrue(f.TotalError > 0);
            Assert.AreEqual(0, cp.Count);

            Assert.AreEqual(1, pp.AddedEvents.Count);
            Assert.AreEqual(0, pp.RemovedEvents.Count);
            Assert.AreEqual(PoisonMessageAction.PoisonRetry, pp.Result);

            // Skip the poison message and wait until all events are done.
            pp.SetResult(PoisonMessageAction.PoisonSkip);
            t.Wait();

            await p.CloseAsync(c, CloseReason.Shutdown);

            Assert.AreEqual(1, f.TotalSuccess);
            Assert.AreEqual(1, pp.AddedEvents.Count);
            Assert.AreEqual(1, pp.RemovedEvents.Count);
            Assert.AreEqual(0, pp.AuditedEvents.Count);
            Assert.AreEqual(PoisonMessageAction.NotPoison, pp.Result);
        }