public async Task CancelTaskShouldCancelTheOperationAndSendNotification() { serviceHostMock.AddEventHandling(TaskCreatedNotification.Type, null); serviceHostMock.AddEventHandling(TaskStatusChangedNotification.Type, null); DatabaseOperationStub operation = new DatabaseOperationStub(); SqlTask sqlTask = service.TaskManager.CreateTask(taskMetaData, operation.FunctionToRun, operation.FunctionToCancel); Task taskToVerify = sqlTask.RunAsync().ContinueWith(task => { serviceHostMock.Verify(x => x.SendEvent(TaskStatusChangedNotification.Type, It.Is <TaskProgressInfo>(t => t.Status == SqlTaskStatus.Canceled)), Times.AtLeastOnce()); }); CancelTaskParams cancelParams = new CancelTaskParams { TaskId = sqlTask.TaskId.ToString() }; await RunAndVerify <bool>( test : (requestContext) => service.HandleCancelTaskRequest(cancelParams, requestContext), verify : ((result) => { })); serviceHostMock.Verify(x => x.SendEvent(TaskCreatedNotification.Type, It.Is <TaskInfo>(t => t.TaskId == sqlTask.TaskId.ToString())), Times.Once()); await taskToVerify; }
internal async Task HandleCancelTaskRequest(CancelTaskParams cancelTaskParams, RequestContext <bool> context) { Logger.Write(TraceEventType.Verbose, "HandleCancelTaskRequest"); Func <Task <bool> > cancelTask = () => { Validate.IsNotNull(nameof(cancelTaskParams), cancelTaskParams); return(Task.Factory.StartNew(() => { Guid taskId; if (Guid.TryParse(cancelTaskParams.TaskId, out taskId)) { TaskManager.CancelTask(taskId); return true; } else { return false; } })); }; await HandleRequestAsync(cancelTask, context, "HandleCancelTaskRequest"); }