예제 #1
0
        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));
        }
예제 #2
0
        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);
        }