private static FunctionDefinition CreateTriggeredFunctionDefinitionImpl <TTriggerValue>( ITriggerBinding triggerBinding, string parameterName, IFunctionExecutor executor, FunctionDescriptor descriptor, IReadOnlyDictionary <string, IBinding> nonTriggerBindings, IFunctionInvoker invoker, SingletonManager singletonManager) { ITriggeredFunctionBinding <TTriggerValue> functionBinding = new TriggeredFunctionBinding <TTriggerValue>(descriptor, parameterName, triggerBinding, nonTriggerBindings, singletonManager); ITriggeredFunctionInstanceFactory <TTriggerValue> instanceFactory = new TriggeredFunctionInstanceFactory <TTriggerValue>(functionBinding, invoker, descriptor); ITriggeredFunctionExecutor triggerExecutor = new TriggeredFunctionExecutor <TTriggerValue>(descriptor, executor, instanceFactory); IListenerFactory listenerFactory = new ListenerFactory(descriptor, triggerExecutor, triggerBinding); return(new FunctionDefinition(descriptor, instanceFactory, listenerFactory)); }
public async Task TryExecuteAsync_WithInvokeHandler_InvokesHandler() { var mockExecutor = new Mock <IFunctionExecutor>(); mockExecutor.Setup(m => m.TryExecuteAsync(It.IsAny <IFunctionInstance>(), It.IsAny <CancellationToken>())). Returns <IFunctionInstance, CancellationToken>((x, y) => { x.Invoker.InvokeAsync(null, null).Wait(); return(Task.FromResult <IDelayedException>(null)); }); bool innerInvokerInvoked = false; Mock <IFunctionInvokerEx> mockInvoker = new Mock <IFunctionInvokerEx>(); mockInvoker.Setup(m => m.InvokeAsync(null, null)).Returns(() => { innerInvokerInvoked = true; return(Task.FromResult <object>(null)); }); bool customInvokerInvoked = false; Func <Func <Task>, Task> invokeHandler = async(inner) => { customInvokerInvoked = true; await inner(); }; var mockTriggerBinding = new Mock <ITriggeredFunctionBinding <int> >(); var functionDescriptor = new FunctionDescriptor(); var instanceFactory = new TriggeredFunctionInstanceFactory <int>(mockTriggerBinding.Object, mockInvoker.Object, functionDescriptor); var triggerExecutor = new TriggeredFunctionExecutor <int>(functionDescriptor, mockExecutor.Object, instanceFactory); // specify a custom handler on the trigger data and // verify it is invoked when the trigger executes var triggerData = new TriggeredFunctionData { TriggerValue = 123, InvokeHandler = invokeHandler }; var result = await triggerExecutor.TryExecuteAsync(triggerData, CancellationToken.None); Assert.True(result.Succeeded); Assert.True(customInvokerInvoked); Assert.True(innerInvokerInvoked); }