public async Task DispatcherMappingTest(string category, string @event, bool throwException) { var resolve = new TestRequestResolver(); var dispatcher = new SignalRTriggerDispatcher(resolve); var key = (hub : Guid.NewGuid().ToString(), category, @event); var tcs = new TaskCompletionSource <ITriggeredFunctionExecutor>(TaskCreationOptions.RunContinuationsAsynchronously); var executorMoc = new Mock <ITriggeredFunctionExecutor>(); executorMoc.Setup(f => f.TryExecuteAsync(It.IsAny <TriggeredFunctionData>(), It.IsAny <CancellationToken>())) .Returns(Task.FromResult(new FunctionResult(true))); var executor = executorMoc.Object; if (throwException) { Assert.ThrowsAny <Exception>(() => dispatcher.Map(key, new ExecutionContext { Executor = executor, AccessKeys = null })); return; } dispatcher.Map(key, new ExecutionContext { Executor = executor, AccessKeys = null }); var request = TestHelpers.CreateHttpRequestMessage(key.hub, key.category, key.@event, Guid.NewGuid().ToString()); await dispatcher.ExecuteAsync(request); executorMoc.Verify(e => e.TryExecuteAsync(It.IsAny <TriggeredFunctionData>(), It.IsAny <CancellationToken>()), Times.Once); // We can handle different word cases request = TestHelpers.CreateHttpRequestMessage(key.hub.ToUpper(), key.category.ToUpper(), [email protected](), Guid.NewGuid().ToString()); await dispatcher.ExecuteAsync(request); executorMoc.Verify(e => e.TryExecuteAsync(It.IsAny <TriggeredFunctionData>(), It.IsAny <CancellationToken>()), Times.Exactly(2)); }
public async Task ResolverInfluenceTests(string category, string @event, bool throwException) { if (throwException) { return; } var resolver = new TestRequestResolver(); var dispatcher = new SignalRTriggerDispatcher(resolver); var key = (hub : Guid.NewGuid().ToString(), category, @event); var tcs = new TaskCompletionSource <ITriggeredFunctionExecutor>(TaskCreationOptions.RunContinuationsAsynchronously); var executorMoc = new Mock <ITriggeredFunctionExecutor>(); executorMoc.Setup(f => f.TryExecuteAsync(It.IsAny <TriggeredFunctionData>(), It.IsAny <CancellationToken>())) .Returns(Task.FromResult(new FunctionResult(true))); var executor = executorMoc.Object; dispatcher.Map(key, new ExecutionContext { Executor = executor, AccessKeys = null }); // Test content type resolver.ValidateContentTypeResult = false; var request = TestHelpers.CreateHttpRequestMessage(key.hub, key.category, key.@event, Guid.NewGuid().ToString()); var res = await dispatcher.ExecuteAsync(request); Assert.Equal(HttpStatusCode.UnsupportedMediaType, res.StatusCode); resolver.ValidateContentTypeResult = true; // Test signature resolver.ValidateSignatureResult = false; request = TestHelpers.CreateHttpRequestMessage(key.hub, key.category, key.@event, Guid.NewGuid().ToString()); res = await dispatcher.ExecuteAsync(request); Assert.Equal(HttpStatusCode.Unauthorized, res.StatusCode); resolver.ValidateSignatureResult = true; // Test GetInvocationContext resolver.GetInvocationContextResult = false; request = TestHelpers.CreateHttpRequestMessage(key.hub, key.category, key.@event, Guid.NewGuid().ToString()); res = await dispatcher.ExecuteAsync(request); Assert.Equal(HttpStatusCode.InternalServerError, res.StatusCode); resolver.GetInvocationContextResult = true; }