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); }
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); }
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); }
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); }
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); }