public void ExecuteTaskWithTimeout() { // Arrange TaskAsyncActionDescriptor actionDescriptor = GetActionDescriptor( GetExecuteControllerMethodInfo("TaskTimeout") ); Dictionary <string, object> token = new Dictionary <string, object>() { { "cancellationToken", new CancellationToken() } }; // Act & assert Assert.Throws <TimeoutException>( () => actionDescriptor.EndExecute( actionDescriptor.BeginExecute( GetControllerContext(2000), parameters: token, callback: null, state: null ) ), "The operation has timed out." ); }
public void ExecuteTaskPreservesState() { // Arrange TaskAsyncActionDescriptor actionDescriptor = GetActionDescriptor( GetExecuteControllerMethodInfo("SimpleTask") ); Dictionary <string, object> parameters = new Dictionary <string, object>() { { "doWork", true } }; ControllerContext controllerContext = GetControllerContext(); // Act TaskWrapperAsyncResult result = (TaskWrapperAsyncResult)actionDescriptor.BeginExecute( GetControllerContext(), parameters, callback: null, state: "state" ); // Assert Assert.Equal("state", result.AsyncState); }
public void ExecuteTaskGenericPreservesStackTraceOnException() { // Arrange TaskAsyncActionDescriptor actionDescriptor = GetActionDescriptor( GetExecuteControllerMethodInfo("GenericTaskException") ); Dictionary <string, object> parameters = new Dictionary <string, object>() { { "taskId", "foo" }, { "throwException", true } }; // Act IAsyncResult result = actionDescriptor.BeginExecute( GetControllerContext(), parameters, null, null ); // Assert InvalidOperationException ex = Assert.Throws <InvalidOperationException>( () => actionDescriptor.EndExecute(result), "Test exception from action" ); Assert.Contains( "System.Web.Mvc.Async.Test.TaskAsyncActionDescriptorTest.ExecuteController.", ex.StackTrace ); }
public void Execute_ThrowsIfParametersIsNull() { // Arrange TaskAsyncActionDescriptor ad = GetActionDescriptor(_taskMethod); // Act & assert Assert.ThrowsArgumentNull( delegate { ad.BeginExecute(new ControllerContext(), null, null, null); }, "parameters"); }
public void Execute_ThrowsIfControllerContextIsNull() { // Arrange TaskAsyncActionDescriptor ad = GetActionDescriptor(_taskMethod); // Act & assert Assert.ThrowsArgumentNull( delegate { ad.BeginExecute(null, new Dictionary <string, object>(), null, null); }, "controllerContext"); }
public static object ExecuteHelper(TaskAsyncActionDescriptor actionDescriptor, Dictionary <string, object> parameters, ControllerContext controllerContext = null) { SignalContainer <object> resultContainer = new SignalContainer <object>(); AsyncCallback callback = ar => { object o = actionDescriptor.EndExecute(ar); resultContainer.Signal(o); }; actionDescriptor.BeginExecute(controllerContext ?? GetControllerContext(), parameters, callback, state: null); return(resultContainer.Wait()); }
public void Execute_ThrowsIfControllerIsNotAsyncManagerContainer() { // Arrange TaskAsyncActionDescriptor ad = GetActionDescriptor(_taskMethod); ControllerContext controllerContext = new ControllerContext() { Controller = new RegularSyncController() }; Dictionary <string, object> parameters = new Dictionary <string, object>() { { "doWork", true } }; // Act & assert Assert.Throws <InvalidOperationException>( delegate { ad.BeginExecute(controllerContext, parameters, null, null); }, @"The controller of type 'System.Web.Mvc.Async.Test.TaskAsyncActionDescriptorTest+RegularSyncController' must subclass AsyncController or implement the IAsyncManagerContainer interface."); }
public static object ExecuteHelper(TaskAsyncActionDescriptor actionDescriptor, Dictionary<string, object> parameters, ControllerContext controllerContext = null) { SignalContainer<object> resultContainer = new SignalContainer<object>(); AsyncCallback callback = ar => { object o = actionDescriptor.EndExecute(ar); resultContainer.Signal(o); }; actionDescriptor.BeginExecute(controllerContext ?? GetControllerContext(), parameters, callback, state: null); return resultContainer.Wait(); }