示例#1
0
        public void FormatReason_BlobTriggeredFunction_ReturnsExpectedReason()
        {
            FunctionStartedMessage message = new FunctionStartedMessage();

            message.Reason = ExecutionReason.AutomaticTrigger;

            BlobTriggerParameterDescriptor triggerParameterDescriptor = new BlobTriggerParameterDescriptor
            {
                Name = "paramName"
            };
            FunctionDescriptor function = new FunctionDescriptor()
            {
                Parameters = new ParameterDescriptor[] { triggerParameterDescriptor },
                TriggerParameterDescriptor = triggerParameterDescriptor
            };

            message.Function  = function;
            message.Arguments = new Dictionary <string, string>()
            {
                { "paramName", "blob/path" }
            };

            string result = message.FormatReason();

            Assert.Equal("New blob detected: blob/path", result);
        }
        public void TestHasBlobAndUnboundParameter()
        {
            var entry = IndexMethod("HasBlobAndUnboundParameter");

            Assert.NotNull(entry);

            IFunctionDefinition definiton = entry.Item2;

            Assert.NotNull(definiton);
            Assert.Null(definiton.ListenerFactory);

            FunctionDescriptor descriptor = entry.Item1;

            Assert.NotNull(descriptor);
            var parameters = descriptor.Parameters;

            Assert.Equal(2, parameters.Count());

            ParameterDescriptor firstParameter = parameters.ElementAt(0);

            Assert.Equal("input", firstParameter.Name);
            Assert.IsType <BlobTriggerParameterDescriptor>(firstParameter);
            BlobTriggerParameterDescriptor blobParameter = (BlobTriggerParameterDescriptor)firstParameter;

            Assert.Equal("container", blobParameter.ContainerName);

            ParameterDescriptor secondParameter = parameters.ElementAt(1);

            Assert.Equal("unbound", secondParameter.Name);
            Assert.IsType <CallerSuppliedParameterDescriptor>(secondParameter);
        }
        internal static FunctionInstanceArgument CreateFunctionInstanceArgument(string value,
                                                                                ParameterDescriptor descriptor)
        {
            BlobParameterDescriptor        blobDescriptor        = descriptor as BlobParameterDescriptor;
            BlobTriggerParameterDescriptor blobTriggerDescriptor = null;

            string accountName = null;

            if (blobDescriptor != null)
            {
                accountName = blobDescriptor.AccountName;
            }
            else
            {
                blobTriggerDescriptor = descriptor as BlobTriggerParameterDescriptor;
                if (blobTriggerDescriptor != null)
                {
                    accountName = blobTriggerDescriptor.AccountName;
                }
            }

            return(new FunctionInstanceArgument
            {
                Value = value,
                IsBlob = blobDescriptor != null || blobTriggerDescriptor != null,
                IsBlobOutput = blobDescriptor != null && blobDescriptor.Access == FileAccess.Write,
                AccountName = accountName
            });
        }
        public void FormatReason_BlobTriggeredFunction_ReturnsExpectedReason()
        {
            FunctionStartedMessage message = new FunctionStartedMessage();
            message.Reason = ExecutionReason.AutomaticTrigger;

            BlobTriggerParameterDescriptor triggerParameterDescriptor = new BlobTriggerParameterDescriptor
            {
                Name = "paramName"
            };
            FunctionDescriptor function = new FunctionDescriptor();
            function.Parameters = new ParameterDescriptor[] { triggerParameterDescriptor };
            message.Function = function;
            message.Arguments = new Dictionary<string, string>() { { "paramName", "blob/path" } };

            string result = message.FormatReason();
            Assert.Equal("New blob detected: blob/path", result);
        }
        public void TestHasBlobAndBoundParameter()
        {
            FunctionDescriptor func = IndexMethod("HasBlobAndBoundParameter").Item1;

            Assert.NotNull(func);
            var parameters = func.Parameters;

            Assert.Equal(2, parameters.Count());

            ParameterDescriptor firstParameter = parameters.ElementAt(0);

            Assert.Equal("input", firstParameter.Name);
            Assert.IsType <BlobTriggerParameterDescriptor>(firstParameter);
            BlobTriggerParameterDescriptor blobParameter = (BlobTriggerParameterDescriptor)firstParameter;

            Assert.Equal("container", blobParameter.ContainerName);

            ParameterDescriptor secondParameter = parameters.ElementAt(1);

            Assert.Equal("bound", secondParameter.Name);
            Assert.IsType <BindingDataParameterDescriptor>(secondParameter);
        }
示例#6
0
        internal static ParameterSnapshot CreateParameterSnapshot(ParameterDescriptor parameter)
        {
            // If display hints have already been provided by the descriptor
            // use them. Otherwise, we construct a new snapshot below. Note that
            // for extensibility (e.g. custom binding extensions), this is the
            // mechanism that must be used, since the Dashboard doesn't share type info
            // with custom extensions, we won't have access to the actual type as we do below.
            if (parameter.DisplayHints != null)
            {
                return(new DisplayHintsParameterSnapshot(parameter.DisplayHints));
            }

            switch (parameter.Type)
            {
            case "Blob":
                BlobParameterDescriptor blobParameter = (BlobParameterDescriptor)parameter;
                return(new BlobParameterSnapshot
                {
                    ContainerName = blobParameter.ContainerName,
                    BlobName = blobParameter.BlobName,
                    IsInput = blobParameter.Access == FileAccess.Read
                });

            case "BlobTrigger":
                BlobTriggerParameterDescriptor blobTriggerParameter = (BlobTriggerParameterDescriptor)parameter;
                return(new BlobParameterSnapshot
                {
                    ContainerName = blobTriggerParameter.ContainerName,
                    BlobName = blobTriggerParameter.BlobName,
                    IsInput = true
                });

            case "Queue":
                QueueParameterDescriptor queueParameter = (QueueParameterDescriptor)parameter;
                return(new QueueParameterSnapshot
                {
                    QueueName = queueParameter.QueueName,
                    IsInput = queueParameter.Access == FileAccess.Read
                });

            case "QueueTrigger":
                QueueTriggerParameterDescriptor queueTriggerParameter = (QueueTriggerParameterDescriptor)parameter;
                return(new QueueParameterSnapshot
                {
                    QueueName = queueTriggerParameter.QueueName,
                    IsInput = true
                });

            case "Table":
                TableParameterDescriptor tableParameter = (TableParameterDescriptor)parameter;
                return(new TableParameterSnapshot
                {
                    TableName = tableParameter.TableName
                });

            case "TableEntity":
                TableEntityParameterDescriptor tableEntityParameter = (TableEntityParameterDescriptor)parameter;
                return(new TableEntityParameterSnapshot
                {
                    TableName = tableEntityParameter.TableName,
                    PartitionKey = tableEntityParameter.PartitionKey,
                    RowKey = tableEntityParameter.RowKey
                });

            case "ServiceBus":
                // TEMP: This is here for back compat
                // Latest versions of the SDK send a display info
                // via ParameterDescriptor.DisplayHints
                ServiceBusParameterDescriptor serviceBusParameter = (ServiceBusParameterDescriptor)parameter;
                return(new ServiceBusParameterSnapshot
                {
                    EntityPath = serviceBusParameter.QueueOrTopicName,
                    IsInput = false
                });

            case "ServiceBusTrigger":
                // TEMP: This is here for back compat
                // Latest versions of the SDK send display info
                // via ParameterDescriptor.DisplayHints
                ServiceBusTriggerParameterDescriptor serviceBusTriggerParameter = (ServiceBusTriggerParameterDescriptor)parameter;
                return(new ServiceBusParameterSnapshot
                {
                    EntityPath = serviceBusTriggerParameter.QueueName != null ?
                                 serviceBusTriggerParameter.QueueName :
                                 serviceBusTriggerParameter.TopicName + "/Subscriptions/" + serviceBusTriggerParameter.SubscriptionName,
                    IsInput = true
                });

            case "CallerSupplied":
            case "BindingData":
                return(new InvokeParameterSnapshot());

            default:
                // Don't convert parameters that aren't used for invoke purposes.
                return(null);
            }
        }
示例#7
0
        internal static ParameterSnapshot CreateParameterSnapshot(ParameterDescriptor parameter)
        {
            switch (parameter.Type)
            {
            case "Blob":
                BlobParameterDescriptor blobParameter = (BlobParameterDescriptor)parameter;
                return(new BlobParameterSnapshot
                {
                    ContainerName = blobParameter.ContainerName,
                    BlobName = blobParameter.BlobName,
                    IsInput = blobParameter.Access == FileAccess.Read
                });

            case "BlobTrigger":
                BlobTriggerParameterDescriptor blobTriggerParameter = (BlobTriggerParameterDescriptor)parameter;
                return(new BlobParameterSnapshot
                {
                    ContainerName = blobTriggerParameter.ContainerName,
                    BlobName = blobTriggerParameter.BlobName,
                    IsInput = true
                });

            case "Queue":
                QueueParameterDescriptor queueParameter = (QueueParameterDescriptor)parameter;
                return(new QueueParameterSnapshot
                {
                    QueueName = queueParameter.QueueName,
                    IsInput = queueParameter.Access == FileAccess.Read
                });

            case "QueueTrigger":
                QueueTriggerParameterDescriptor queueTriggerParameter = (QueueTriggerParameterDescriptor)parameter;
                return(new QueueParameterSnapshot
                {
                    QueueName = queueTriggerParameter.QueueName,
                    IsInput = true
                });

            case "Table":
                TableParameterDescriptor tableParameter = (TableParameterDescriptor)parameter;
                return(new TableParameterSnapshot
                {
                    TableName = tableParameter.TableName
                });

            case "TableEntity":
                TableEntityParameterDescriptor tableEntityParameter = (TableEntityParameterDescriptor)parameter;
                return(new TableEntityParameterSnapshot
                {
                    TableName = tableEntityParameter.TableName,
                    PartitionKey = tableEntityParameter.PartitionKey,
                    RowKey = tableEntityParameter.RowKey
                });

            case "ServiceBus":
                ServiceBusParameterDescriptor serviceBusParameter = (ServiceBusParameterDescriptor)parameter;
                return(new ServiceBusParameterSnapshot
                {
                    EntityPath = serviceBusParameter.QueueOrTopicName,
                    IsInput = false
                });

            case "ServiceBusTrigger":
                ServiceBusTriggerParameterDescriptor serviceBusTriggerParameter = (ServiceBusTriggerParameterDescriptor)parameter;
                return(new ServiceBusParameterSnapshot
                {
                    EntityPath = serviceBusTriggerParameter.QueueName != null ?
                                 serviceBusTriggerParameter.QueueName :
                                 serviceBusTriggerParameter.TopicName + "/Subscriptions/" + serviceBusTriggerParameter.SubscriptionName,
                    IsInput = true
                });

            case "CallerSupplied":
            case "BindingData":
                return(new InvokeParameterSnapshot());

            default:
                // Don't convert parameters that aren't used for invoke purposes.
                return(null);
            }
        }