Esempio n. 1
0
        public async Task TestDoNowExecutesInstantlyAsync()
        {
            using var scheduler = new EspeonScheduler(Logger);
            var task             = scheduler.DoNow(10, EmptyCallback);
            var expecectedResult = task.WaitUntilExecutedAsync();
            var actualResult     = await Task.WhenAny(expecectedResult, Task.Delay(Tolerance));

            Assert.AreEqual(expecectedResult, actualResult);
        }
Esempio n. 2
0
        public async Task TestEalierDoInExecutesBeforeLaterDoInAsync()
        {
            using var scheduler = new EspeonScheduler(Logger);
            var task1          = scheduler.DoIn(TimeSpan.FromSeconds(5), 10, EmptyCallback);
            var task2          = scheduler.DoIn(TimeSpan.FromSeconds(2), 10, EmptyCallback);
            var expectedResult = task2.WaitUntilExecutedAsync();
            var timeout        = Task.Delay(TimeSpan.FromSeconds(20));
            var actualResult   = await Task.WhenAny(task1.WaitUntilExecutedAsync(), expectedResult, timeout);

            Assert.AreEqual(expectedResult, actualResult);
        }
Esempio n. 3
0
        public async Task TestAllTasksGetExecutedAsync()
        {
            using var scheduler = new EspeonScheduler(Logger);
            var tasks = Enumerable.Range(0, 10)
                        .Select(i => scheduler.DoIn(TimeSpan.FromSeconds(i), 10, EmptyCallback))
                        .Select(task => task.WaitUntilExecutedAsync());
            var timeout        = Task.Delay(TimeSpan.FromSeconds(20));
            var expectedResult = Task.WhenAll(tasks);
            var actualResult   = await Task.WhenAny(expectedResult, timeout);

            Assert.AreEqual(actualResult, expectedResult);
        }
Esempio n. 4
0
        public async Task TestDoInExecutesOnTimeAsync()
        {
            var executesIn = TimeSpan.FromSeconds(5);

            using var scheduler = new EspeonScheduler(Logger);
            var task     = scheduler.DoIn(executesIn, 10, EmptyCallback);
            var timeout  = Task.Delay(TimeSpan.FromSeconds(20));
            var sw       = Stopwatch.StartNew();
            var expected = task.WaitUntilExecutedAsync();
            var result   = await Task.WhenAny(expected, timeout);

            sw.Stop();
            Assert.AreEqual(expected, result);
            AssertWithinTolerance(executesIn, sw.Elapsed);
        }
Esempio n. 5
0
        public async Task TestCallbackGetsCalledAsync()
        {
            using var scheduler = new EspeonScheduler(Logger);
            var executed = false;
            var task     = scheduler.DoIn(TimeSpan.FromSeconds(5), 10, _ => {
                executed = true;
                return(Task.CompletedTask);
            });
            var timeout  = Task.Delay(TimeSpan.FromSeconds(20));
            var expected = task.WaitUntilExecutedAsync();
            var result   = await Task.WhenAny(expected, timeout);

            Assert.AreEqual(expected, result);
            Assert.IsTrue(executed);
        }
Esempio n. 6
0
        public async Task TestOnErrorExecutesWhenCallbackThrowsAsync()
        {
            const string exceptionMessage = "Espeon";

            using var scheduler = new EspeonScheduler(Logger);
            var tcs = new TaskCompletionSource <Exception>();

            scheduler.OnError += ex => tcs.SetResult(ex);
            scheduler.DoIn(TimeSpan.FromSeconds(5), 10, _ => throw new InvalidOperationException(exceptionMessage));
            var timeout        = Task.Delay(TimeSpan.FromSeconds(20));
            var expectedResult = tcs.Task;
            var actualResult   = await Task.WhenAny(expectedResult, timeout);

            Assert.AreEqual(expectedResult, actualResult);
            var res = await expectedResult;

            Assert.IsTrue(res is InvalidOperationException {
                Message: exceptionMessage
            });
Esempio n. 7
0
        public async Task TestUnorderedTasksExecuteInCorrectOrderAsync()
        {
            using var scheduler = new EspeonScheduler(Logger);
            var random       = new Random();
            var executedList = new List <int>();
            var tasks        = Enumerable.Range(0, 10)
                               .Select(_ => {
                var executeIn = random.Next(10);
                return(scheduler.DoIn(TimeSpan.FromSeconds(executeIn), executeIn, num => {
                    executedList.Add(num);
                    return Task.CompletedTask;
                }));
            })
                               .Select(task => task.WaitUntilExecutedAsync());
            var timeout        = Task.Delay(TimeSpan.FromSeconds(20));
            var expectedResult = Task.WhenAll(tasks);
            var actualResult   = await Task.WhenAny(expectedResult, timeout);

            Assert.AreEqual(actualResult, expectedResult);
            var rolling = -1;

            Assert.IsTrue(executedList.TrueForAll(i => rolling <= (rolling = i)));
        }