public ConsumerRepositoryTest()
        {
            _repository = new ConsumerRepository <TestEvent>();
            _processor1 = new DummyEventProcessor();
            _processor2 = new DummyEventProcessor();

            _processor1.Run();
            _processor2.Run();

            _handler1 = new SleepingEventHandler();
            _handler2 = new SleepingEventHandler();

            _barrier1 = new DummySequenceBarrier();
            _barrier2 = new DummySequenceBarrier();
        }
示例#2
0
    public long Run(ThroughputSessionContext sessionContext)
    {
        long expectedCount = _eventProcessor.Sequence.Value + _iterations;

        _eventHandler.Reset(expectedCount);

        var processorTask = PerfTestUtil.StartLongRunning(() =>
        {
            using var _ = ThreadAffinityUtil.SetThreadAffinity(0);

            Thread.CurrentThread.Priority = ThreadPriority.Highest;

            _eventProcessor.Run();
        });

        _eventProcessor.WaitUntilStarted(TimeSpan.FromSeconds(5));

        using var _ = ThreadAffinityUtil.SetThreadAffinity(1);

        Thread.CurrentThread.Priority = ThreadPriority.Highest;

        sessionContext.Start();

        var ringBuffer = _ringBuffer;

        for (long i = 0; i < _iterations; i++)
        {
            var s = ringBuffer.Next();
            ringBuffer[s].Value = i;
            ringBuffer.Publish(s);
        }

        _eventHandler.WaitForSequence();
        sessionContext.Stop();
        PerfTestUtil.WaitForEventProcessorSequence(expectedCount, _eventProcessor);
        _eventProcessor.Halt();
        processorTask.Wait(2000);

        sessionContext.SetBatchData(_eventHandler.BatchesProcessed, _iterations);

        PerfTestUtil.FailIfNot(_expectedResult, _eventHandler.Value, $"Handler should have processed {_expectedResult} events, but was: {_eventHandler.Value}");

        return(_iterations);
    }
示例#3
0
        public static async Task <HttpResponseMessage> Run(IEventProcessor eventProcessor)
        {
            try
            {
                await eventProcessor.Run();
            }
            catch (ValidationException e)
            {
                eventProcessor.Logger.LogError($"Invalid request: {e.Message}");
                return(new HttpResponseMessage(HttpStatusCode.BadRequest));
            }
            catch (Exception e)
            {
                eventProcessor.Logger.LogError($"An error occured: {e}");
                return(new HttpResponseMessage(HttpStatusCode.InternalServerError));
            }

            return(new HttpResponseMessage(HttpStatusCode.OK));
        }