Ejemplo n.º 1
0
    public void ShouldPollForEvents_Batch()
    {
        var gatingSequence = new Sequence();
        var sequencer      = new SingleProducerSequencer(16, new BusySpinWaitStrategy());

        void Handler(EventBatch <object> batch, long s)
        {
        }

        var provider = new ArrayDataProvider <object>(new object[16]);

        provider.Data[0] = new object();

        var poller = sequencer.NewPoller(provider, gatingSequence);

        Assert.That(poller.Poll(Handler), Is.EqualTo(EventPoller.PollState.Idle));

        // Publish Event.
        sequencer.Publish(sequencer.Next());
        Assert.That(poller.Poll(Handler), Is.EqualTo(EventPoller.PollState.Gating));

        gatingSequence.IncrementAndGet();

        Assert.That(poller.Poll(Handler), Is.EqualTo(EventPoller.PollState.Processing));
    }
Ejemplo n.º 2
0
        public void GetEventAtIndex_IndexOutOfRange_ExceptionThrow(long index)
        {
            var arraySize    = 6;
            var array        = _fixture.CreateMany <PayloadEvent>(arraySize).ToArray();
            var dataProvider = new ArrayDataProvider(array);

            Assert.ThrowsAsync <IndexOutOfRangeException>(async() => await dataProvider.GetEventAtIndexAsync(index));
        }
Ejemplo n.º 3
0
        public void GetGlobalStopTick_ShouldReturnTicksOfLastEvent()
        {
            var arraySize    = 6;
            var array        = _fixture.CreateMany <PayloadEvent>(arraySize).ToArray();
            var dataProvider = new ArrayDataProvider(array);
            var stopTicks    = dataProvider.GetGlobalStopTick();

            stopTicks.Should().Be(array[arraySize - 1].Ticks);
        }
Ejemplo n.º 4
0
        public void GetGlobalEventsCount_ReturnsCount_ShouldBeSuccess()
        {
            var arraySize    = 6;
            var array        = _fixture.CreateMany <PayloadEvent>(arraySize).ToArray();
            var dataProvider = new ArrayDataProvider(array);
            var globalCount  = dataProvider.GetGlobalEventsCount();

            globalCount.Should().Be(arraySize);
        }
Ejemplo n.º 5
0
        public async Task GetEventsBetween_GetAllElements_ArrayShouldBeEquivalentToSource()
        {
            var arraySize    = 6;
            var array        = _fixture.CreateMany <PayloadEvent>(arraySize).ToArray();
            var dataProvider = new ArrayDataProvider(array);
            var actual       = await dataProvider.GetEventsBetweenAsync(0, 5);

            actual.Should().BeEquivalentTo(array);
        }
Ejemplo n.º 6
0
        public async Task GetEventsBetween_GetSubsequence_EquivalentElements()
        {
            var arraySize    = 6;
            var array        = _fixture.CreateMany <PayloadEvent>(arraySize).ToArray();
            var dataProvider = new ArrayDataProvider(array);
            var events       = await dataProvider.GetEventsBetweenAsync(2, 3);

            var actual = events.ToArray();

            actual.Length.Should().Be(2);
            actual[0].Should().BeEquivalentTo(array[2]);
            actual[1].Should().BeEquivalentTo(array[3]);
        }
Ejemplo n.º 7
0
        public async Task GetEventAtIndex_SimpleValue_ReturnedEquals()
        {
            var arraySize    = 6;
            var array        = _fixture.CreateMany <PayloadEvent>(arraySize).ToArray();
            var dataProvider = new ArrayDataProvider(array);

            for (int i = 0; i < arraySize; i++)
            {
                var value = await dataProvider.GetEventAtIndexAsync(i);

                value.Should().BeEquivalentTo(array[i]);
            }
        }
        public void Init()
        {
            _array          = _fixture.CreateMany <PayloadEvent>(6).ToArray();
            _array[0].Ticks = 50;
            _array[1].Ticks = 70;
            _array[2].Ticks = 100;
            _array[3].Ticks = 120;
            _array[4].Ticks = 150;
            _array[5].Ticks = 200;

            var loggerMock   = new Mock <ILogger>();
            var dataProvider = new ArrayDataProvider(_array);

            _densityApi = new DensityApi(loggerMock.Object, dataProvider);
        }
Ejemplo n.º 9
0
    public void ShouldAlwaysHalt()
    {
        var waitStrategy = new AsyncWaitStrategy();
        var sequencer    = new SingleProducerSequencer(8, waitStrategy);
        var barrier      = new AsyncSequenceBarrier(sequencer, waitStrategy, new Sequence(-1), new Sequence[0]);
        var dp           = new ArrayDataProvider <object>(sequencer.BufferSize);

        var h1 = new LifeCycleHandler();
        var p1 = CreateEventProcessor(dp, barrier, h1);

        p1.Halt();
        p1.Start();

        Assert.IsTrue(h1.WaitStart(TimeSpan.FromSeconds(2)));
        Assert.IsTrue(h1.WaitShutdown(TimeSpan.FromSeconds(2)));

        for (int i = 0; i < 1000; i++)
        {
            var h2 = new LifeCycleHandler();
            var p2 = CreateEventProcessor(dp, barrier, h2);
            p2.Start();

            p2.Halt();

            Assert.IsTrue(h2.WaitStart(TimeSpan.FromSeconds(2)));
            Assert.IsTrue(h2.WaitShutdown(TimeSpan.FromSeconds(2)));
        }

        for (int i = 0; i < 1000; i++)
        {
            var h2 = new LifeCycleHandler();
            var p2 = CreateEventProcessor(dp, barrier, h2);

            p2.Start();
            Thread.Yield();
            p2.Halt();

            Assert.IsTrue(h2.WaitStart(TimeSpan.FromSeconds(2)));
            Assert.IsTrue(h2.WaitShutdown(TimeSpan.FromSeconds(2)));
        }
    }
Ejemplo n.º 10
0
        public void ShouldPollForEvents()
        {
            var gatingSequence = new Sequence();
            var sequencer      = new SingleProducerSequencer(16, new BusySpinWaitStrategy());

            bool Handler(ref decimal e, long s, bool b) => false;

            var provider = new ArrayDataProvider <decimal>(new decimal[16]);

            provider.Data[0] = 42m;

            var poller = sequencer.NewPoller(provider.AsValueDataProvider(), gatingSequence);

            Assert.That(poller.Poll(Handler), Is.EqualTo(EventPoller.PollState.Idle));

            // Publish Event.
            sequencer.Publish(sequencer.Next());
            Assert.That(poller.Poll(Handler), Is.EqualTo(EventPoller.PollState.Gating));

            gatingSequence.IncrementAndGet();

            Assert.That(poller.Poll(Handler), Is.EqualTo(EventPoller.PollState.Processing));
        }