Example #1
0
        public void Progress_WebTaskRunning_ProgressReportedInStatus()
        {
            ManualResetEventSlim mEvent = new ManualResetEventSlim(false);

            Guid webTaskId = _runner.RunWebTask(context =>
            {
                context.ReportProgress(new WebTaskProgress {
                    Current = 1, Total = 2, Message = "Half done!"
                });

                mEvent.Wait();

                return(new TestWebTaskResult {
                    Foo = "Test"
                });
            });

            Thread.Sleep(1000); // Give some time to webtask for reporting progress.
            WebTaskStatus webTaskStatusInProgress = _runner.GetWebTaskStatus(webTaskId);

            mEvent.Set();

            Assert.AreEqual(webTaskStatusInProgress.State, WebTaskState.Running);
            Assert.IsNotNull(webTaskStatusInProgress.Progresses);
            Assert.AreEqual(1, webTaskStatusInProgress.Progresses.Length);
            Assert.AreEqual(1, webTaskStatusInProgress.Progresses[0].Current);
            Assert.AreEqual(2, webTaskStatusInProgress.Progresses[0].Total);
            Assert.AreEqual("Half done!", webTaskStatusInProgress.Progresses[0].Message);
        }
Example #2
0
        public void RunWebTask_Canceled()
        {
            ManualResetEventSlim mEvent = new ManualResetEventSlim(false);

            Guid webTaskId = _runner.RunWebTask((context) =>
            {
                mEvent.Wait();

                context.CancellationToken.ThrowIfCancellationRequested();

                return(new TestWebTaskResult {
                    Foo = "Test"
                });
            });

            _runner.CancelTask(webTaskId);

            mEvent.Set();

            // Gives some time to cancel -> not determistics.
            Thread.Sleep(1000);
            WebTaskStatus webTaskStatus = _runner.GetWebTaskStatus(webTaskId);

            Assert.AreEqual(WebTaskState.Canceled, webTaskStatus.State);
            Assert.IsNull(webTaskStatus.Result);
        }
Example #3
0
        public void RunWebTask_Success()
        {
            SetSynchronousSchedulerForTpl();

            Guid webTaskId = _runner.RunWebTask(() => new TestWebTaskResult {
                Foo = "Test"
            });

            WebTaskStatus webTaskStatus = _runner.GetWebTaskStatus(webTaskId);

            Assert.AreEqual(WebTaskState.Finished, webTaskStatus.State);
            Assert.IsInstanceOf <TestWebTaskResult>(webTaskStatus.Result);
            Assert.AreEqual("Test", ((TestWebTaskResult)webTaskStatus.Result).Foo);
        }
Example #4
0
        public void RunWebTask_Failed()
        {
            SetSynchronousSchedulerForTpl();

            Guid webTaskId = _runner.RunWebTask(() =>
            {
                throw new DivideByZeroException();
            });

            WebTaskStatus webTaskStatus = _runner.GetWebTaskStatus(webTaskId);

            Assert.AreEqual(WebTaskState.Failed, webTaskStatus.State);
            Assert.IsNull(webTaskStatus.Result);
            Assert.AreEqual(new DivideByZeroException().Message, webTaskStatus.Error);
        }
Example #5
0
        public void GetWebTaskStatus_WebTaskFinished_ResultRemovesAfterPickedOut()
        {
            SetSynchronousSchedulerForTpl();

            Guid webTaskId = _runner.RunWebTask(context =>
            {
                return(new TestWebTaskResult {
                    Foo = "Test"
                });
            });

            WebTaskStatus webTaskStatus1 = _runner.GetWebTaskStatus(webTaskId);
            WebTaskStatus webTaskStatus2 = _runner.GetWebTaskStatus(webTaskId);

            Assert.IsNotNull(webTaskStatus1);
            Assert.IsNull(webTaskStatus2);
        }
Example #6
0
        public WebTaskStatus GetWebTaskStatus(Guid taskId)
        {
            WebTaskController controller;

            _taskControllers.TryGetValue(taskId, out controller);

            if (controller != null)
            {
                WebTaskStatus status = controller.GetStatus();

                if (status.State == WebTaskState.Finished && !controller.WebTask.PersistResultWhenPickedOut)
                {
                    _taskControllers.TryRemove(status.WebTaskId, out controller);
                }

                return(status);
            }

            return(null);
        }
Example #7
0
        public void GetWebTaskStatus_PersistResultEnabled_ResultPersistAfterPickedOut()
        {
            SetSynchronousSchedulerForTpl();

            Guid webTaskId = _runner.RunWebTask(context =>
            {
                return(new TestWebTaskResult {
                    Foo = "Test"
                });
            }, new WebTaskConfiguration()
            {
                PersistResultWhenPickedOut = true
            });

            WebTaskStatus webTaskStatus1 = _runner.GetWebTaskStatus(webTaskId);
            WebTaskStatus webTaskStatus2 = _runner.GetWebTaskStatus(webTaskId);

            Assert.IsNotNull(webTaskStatus1);
            Assert.IsNotNull(webTaskStatus2);
        }
Example #8
0
        public void ResultExpiration_ResultDontPickedUp_ExpiredResultDeleted()
        {
            // Sets cleaning interval.
            _runner = new WebTaskRunner(TimeSpan.FromMilliseconds(10));

            Guid webTaskId = _runner.RunWebTask(context =>
            {
                return(new TestWebTaskResult {
                    Foo = "Test"
                });
            }, new WebTaskConfiguration()
            {
                ResultExpiration = TimeSpan.FromMilliseconds(1)
            });

            Thread.Sleep(100);

            WebTaskStatus webTaskStatus = _runner.GetWebTaskStatus(webTaskId);

            Assert.IsNull(webTaskStatus);
        }
Example #9
0
        public void Progress_WebTaskFinished_ProgressesSavedInResult()
        {
            SetSynchronousSchedulerForTpl();

            int progressesCount = new Random().Next(0, 100);

            Guid webTaskId = _runner.RunWebTask(context =>
            {
                for (int i = 1; i <= progressesCount; i++)
                {
                    context.ReportProgress(new WebTaskProgress()
                    {
                        Current = i,
                        Total   = progressesCount,
                        Message = "Progress " + i
                    });
                }

                return(new TestWebTaskResult {
                    Foo = "Test"
                });
            });

            WebTaskStatus webTaskStatus = _runner.GetWebTaskStatus(webTaskId);

            Assert.AreEqual(webTaskStatus.State, WebTaskState.Finished);
            Assert.IsNotNull(webTaskStatus.Progresses);
            Assert.AreEqual(progressesCount, webTaskStatus.Progresses.Length);

            for (int i = 0; i < progressesCount; i++)
            {
                WebTaskProgress progressUnderTest = webTaskStatus.Progresses[i];

                Assert.AreEqual(progressesCount, progressUnderTest.Total);
                Assert.AreEqual(i + 1, progressUnderTest.Current);
                Assert.AreEqual("Progress " + (i + 1), progressUnderTest.Message);
            }
        }
Example #10
0
        public void RunWebTask_MoreWebTask_Success()
        {
            const int taskCount = 10;

            Guid[] taskIds = new Guid[taskCount];
            ManualResetEventSlim mEvent = new ManualResetEventSlim(false);

            foreach (var foo in Enumerable.Range(0, taskCount))
            {
                Guid webTaskId = _runner.RunWebTask((context) =>
                {
                    // Last webtask signal event.
                    if (foo == taskCount - 1)
                    {
                        mEvent.Set();
                    }

                    return(new TestWebTaskResult {
                        Foo = foo.ToString()
                    });
                });

                taskIds[foo] = webTaskId;
            }

            // We will wait for the last webtask when is finished.
            mEvent.Wait();
            Thread.Sleep(1000);

            for (int i = 0; i < taskIds.Length; i++)
            {
                WebTaskStatus status = _runner.GetWebTaskStatus(taskIds[i]);

                Assert.AreEqual(WebTaskState.Finished, status.State);
                Assert.IsInstanceOf <TestWebTaskResult>(status.Result);
                Assert.AreEqual(i.ToString(), ((TestWebTaskResult)status.Result).Foo);
            }
        }