Example #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));
        }
Example #2
0
        public IFunctionDefinition CreateFunctionDefinition(IReadOnlyDictionary <string, IBinding> nonTriggerBindings,
                                                            IFunctionInvoker invoker, FunctionDescriptor functionDescriptor)
        {
            ITriggeredFunctionBinding <IStorageQueueMessage> functionBinding =
                new TriggeredFunctionBinding <IStorageQueueMessage>(_parameterName, this, nonTriggerBindings);
            ITriggeredFunctionInstanceFactory <IStorageQueueMessage> instanceFactory =
                new TriggeredFunctionInstanceFactory <IStorageQueueMessage>(functionBinding, invoker,
                                                                            functionDescriptor);
            IListenerFactory listenerFactory = new QueueListenerFactory(_queue, _queueConfiguration,
                                                                        _backgroundExceptionDispatcher, _messageEnqueuedWatcherSetter, _sharedContextProvider, _log,
                                                                        instanceFactory);

            return(new FunctionDefinition(instanceFactory, listenerFactory));
        }
Example #3
0
        public IFunctionDefinition CreateFunctionDefinition(IReadOnlyDictionary <string, IBinding> nonTriggerBindings,
                                                            IFunctionInvoker invoker, FunctionDescriptor functionDescriptor)
        {
            ITriggeredFunctionBinding <IStorageBlob> functionBinding =
                new TriggeredFunctionBinding <IStorageBlob>(_parameterName, this, nonTriggerBindings);
            ITriggeredFunctionInstanceFactory <IStorageBlob> instanceFactory =
                new TriggeredFunctionInstanceFactory <IStorageBlob>(functionBinding, invoker, functionDescriptor);
            IStorageBlobContainer container       = _client.GetContainerReference(_path.ContainerNamePattern);
            IListenerFactory      listenerFactory = new BlobListenerFactory(_hostIdProvider, _queueConfiguration,
                                                                            _backgroundExceptionDispatcher, _blobWrittenWatcherSetter, _messageEnqueuedWatcherSetter,
                                                                            _sharedContextProvider, _log, functionDescriptor.Id, _account, container, _path, instanceFactory);

            return(new FunctionDefinition(instanceFactory, listenerFactory));
        }
Example #4
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);
        }
Example #5
0
        public IFunctionDefinition CreateFunctionDefinition(IReadOnlyDictionary <string, IBinding> nonTriggerBindings,
                                                            IFunctionInvoker invoker, FunctionDescriptor functionDescriptor)
        {
            ITriggeredFunctionBinding <BrokeredMessage> functionBinding =
                new TriggeredFunctionBinding <BrokeredMessage>(_parameterName, this, nonTriggerBindings);
            ITriggeredFunctionInstanceFactory <BrokeredMessage> instanceFactory =
                new TriggeredFunctionInstanceFactory <BrokeredMessage>(functionBinding, invoker, functionDescriptor);
            IListenerFactory listenerFactory;

            if (_queueName != null)
            {
                listenerFactory = new ServiceBusQueueListenerFactory(_account, _queueName, instanceFactory);
            }
            else
            {
                listenerFactory = new ServiceBusSubscriptionListenerFactory(_account, _topicName, _subscriptionName,
                                                                            instanceFactory);
            }

            return(new FunctionDefinition(instanceFactory, listenerFactory));
        }