Beispiel #1
0
        public async Task Should_NotInvokeAnyEventHandlers_When_AGlobalRefreshIsScheduled()
        {
            _target = new ProtocolEventDebouncer(new TaskBasedTimerFactory(), TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(20));

            var callbacks = new List <Task>
            {
                _target.HandleEventAsync(CreateProtocolEvent("ks", true), false),
                _target.HandleEventAsync(CreateProtocolEvent("ks2", true), false),
                _target.HandleEventAsync(CreateProtocolEvent("ks", false), false),
                _target.HandleEventAsync(CreateProtocolEvent("ks2", false), false),
                _target.HandleEventAsync(CreateProtocolEvent(), false),
                _target.HandleEventAsync(CreateProtocolEvent(), true),
            };
            var tasks        = _tasks.ToArray();
            var handlerTask1 = tasks[0];
            var handlerTask2 = tasks[1];
            var handlerTask3 = tasks[2];
            var handlerTask4 = tasks[3];
            var handlerTask5 = tasks[4];
            var handlerTask6 = tasks[5];

            await Task.WhenAll(callbacks).ConfigureAwait(false);

            Assert.IsFalse(handlerTask1.IsCompleted);
            Assert.IsFalse(handlerTask2.IsCompleted);
            Assert.IsFalse(handlerTask3.IsCompleted);
            Assert.IsFalse(handlerTask4.IsCompleted);

            // last global event wins
            Assert.IsFalse(handlerTask5.IsCompleted);
            Assert.IsTrue(handlerTask6.IsCompleted);
        }
Beispiel #2
0
        public async Task Should_OnlyCreateOneTimerAndNotInvokeChange_When_OneKeyspaceEventIsScheduled(bool refreshEvent)
        {
            var mockResult = MockTimerFactory(10, 10000);

            _target = mockResult.Debouncer;

            await _target.ScheduleEventAsync(CreateProtocolEvent("ks", refreshEvent), false).ConfigureAwait(false);

            TestHelper.RetryAssert(() =>
            {
                VerifyTimerChange(mockResult.Timers.Single(), 10, Times.Once());
            });
            await Task.Delay(100).ConfigureAwait(false); // assert that no more timers are invoked

            VerifyTimerChange(mockResult.Timers.Single(), 10, Times.Once());
        }
Beispiel #3
0
        private TimerMockResult MockTimerFactory(long delayMs, long maxDelayMs)
        {
            var mockResult   = new TimerMockResult();
            var timerFactory = Mock.Of <ITimerFactory>();

            Mock.Get(timerFactory)
            .Setup(t => t.Create(It.IsAny <TaskScheduler>()))
            .Returns(() =>
            {
                var timer = Mock.Of <ITimer>();
                mockResult.Timers.Enqueue(timer);
                return(timer);
            });
            var target = new ProtocolEventDebouncer(timerFactory, TimeSpan.FromMilliseconds(delayMs), TimeSpan.FromMilliseconds(maxDelayMs));

            mockResult.Debouncer    = target;
            mockResult.TimerFactory = timerFactory;
            return(mockResult);
        }
Beispiel #4
0
        public async Task Should_CreateTwoTimersAndDisposeFirstOne_When_TwoGlobalEventsAreScheduled()
        {
            var mockResult = MockTimerFactory(10, 10000);

            _target = mockResult.Debouncer;

            await _target.ScheduleEventAsync(CreateProtocolEvent(), false).ConfigureAwait(false);

            await _target.ScheduleEventAsync(CreateProtocolEvent(), false).ConfigureAwait(false);

            TestHelper.RetryAssert(() =>
            {
                var timers = mockResult.Timers.ToArray();
                Assert.AreEqual(1, timers.Length);
                VerifyTimerChange(timers[0], 10, Times.Exactly(2));
            });
            await Task.Delay(100).ConfigureAwait(false);

            VerifyTimerChange(mockResult.Timers.Single(), 10, Times.Exactly(2));
        }
Beispiel #5
0
        public async Task Should_DelayButNotAddKeyspaceEvent_When_AGlobalEventIsScheduled()
        {
            var mockResult = MockTimerFactory(10, 10000);

            _target = mockResult.Debouncer;

            await _target.ScheduleEventAsync(CreateProtocolEvent(), false).ConfigureAwait(false);

            await _target.ScheduleEventAsync(CreateProtocolEvent("ks", true), false).ConfigureAwait(false);

            await _target.ScheduleEventAsync(CreateProtocolEvent("ks2", false), false).ConfigureAwait(false);

            TestHelper.RetryAssert(() =>
            {
                var timers = mockResult.Timers.ToArray();
                Assert.AreEqual(1, timers.Length);
                VerifyTimerChange(timers[0], 10, Times.Exactly(3));
            });
            await Task.Delay(100).ConfigureAwait(false);

            VerifyTimerChange(mockResult.Timers.Single(), 10, Times.Exactly(3));
            Assert.AreEqual(0, _target.GetQueue().Keyspaces.Count);
        }