public void ShouldReportProgressByUpdatingSequenceViaCallback() { var ringBuffer = new RingBuffer <StubEvent>(() => new StubEvent(0), 16); var sequenceBarrier = ringBuffer.NewBarrier(); var handler = new TestSequenceReportingEventHandler(_callbackLatch); var batchEventProcessor = new BatchEventProcessor <StubEvent>(ringBuffer, sequenceBarrier, handler); ringBuffer.SetGatingSequences(batchEventProcessor.Sequence); var thread = new Thread(batchEventProcessor.Run) { IsBackground = true }; thread.Start(); Assert.AreEqual(-1L, batchEventProcessor.Sequence.Value); ringBuffer.Publish(ringBuffer.Next()); _callbackLatch.WaitOne(); Assert.AreEqual(0L, batchEventProcessor.Sequence.Value); _onEndOfBatchLatch.Set(); Assert.AreEqual(0L, batchEventProcessor.Sequence.Value); batchEventProcessor.Halt(); thread.Join(); }
public void ShouldReportProgressByUpdatingSequenceViaCallback() { var ringBuffer = RingBuffer <StubEvent> .CreateMultiProducer(() => new StubEvent(-1), 16); var sequenceBarrier = ringBuffer.NewBarrier(); ISequenceReportingEventHandler <StubEvent> handler = new TestSequenceReportingEventHandler(_callbackSignal, _onEndOfBatchSignal); var batchEventProcessor = BatchEventProcessorFactory.Create(ringBuffer, sequenceBarrier, handler); ringBuffer.AddGatingSequences(batchEventProcessor.Sequence); var thread = new Thread(batchEventProcessor.Run) { IsBackground = true }; thread.Start(); Assert.AreEqual(-1L, batchEventProcessor.Sequence.Value); ringBuffer.Publish(ringBuffer.Next()); _callbackSignal.WaitOne(); Assert.AreEqual(0L, batchEventProcessor.Sequence.Value); _onEndOfBatchSignal.Set(); Assert.AreEqual(0L, batchEventProcessor.Sequence.Value); batchEventProcessor.Halt(); thread.Join(); }
public void ShouldReportValueEventHandlerProgressByUpdatingSequenceViaCallback() { var ringBuffer = ValueRingBuffer <StubValueEvent> .CreateMultiProducer(() => new StubValueEvent(-1), 16); var sequenceBarrier = ringBuffer.NewBarrier(); var handler = new TestSequenceReportingEventHandler(); var batchEventProcessor = BatchEventProcessorFactory.Create(ringBuffer, sequenceBarrier, handler); ringBuffer.AddGatingSequences(batchEventProcessor.Sequence); var task = Task.Run(batchEventProcessor.Run); Assert.AreEqual(-1L, batchEventProcessor.Sequence.Value); ringBuffer.Publish(ringBuffer.Next()); handler.CallbackSignal.WaitOne(); Assert.AreEqual(0L, batchEventProcessor.Sequence.Value); handler.OnEndOfBatchSignal.Set(); Assert.AreEqual(0L, batchEventProcessor.Sequence.Value); batchEventProcessor.Halt(); Assert.IsTrue(task.Wait(TimeSpan.FromSeconds(10))); }