Skip to content

Commit c740418

Browse files
committed
Better handling of unknown bindings
1 parent 37b9f7a commit c740418

File tree

2 files changed

+27
-4
lines changed

2 files changed

+27
-4
lines changed

src/WebJobs.Script/Description/FunctionDescriptorProvider.cs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -114,9 +114,15 @@ protected virtual Collection<ParameterDescriptor> GetFunctionParameters(IFunctio
114114

115115
protected virtual ParameterDescriptor CreateTriggerParameter(BindingMetadata triggerMetadata, Type parameterType = null)
116116
{
117-
ParameterDescriptor triggerParameter = null;
118-
TryParseTriggerParameter(triggerMetadata.Raw, out triggerParameter, parameterType);
119-
triggerParameter.IsTrigger = true;
117+
if (TryParseTriggerParameter(triggerMetadata.Raw, out ParameterDescriptor triggerParameter, parameterType))
118+
{
119+
triggerParameter.IsTrigger = true;
120+
}
121+
else
122+
{
123+
throw new ScriptConfigurationException($"The binding type '{triggerMetadata.Type}' is not registered. " +
124+
$"Please ensure the type is correct and the binding extension is installed.");
125+
}
120126

121127
return triggerParameter;
122128
}

test/WebJobs.Script.Tests/Description/FunctionDescriptorProviderTests.cs

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
using Microsoft.Azure.WebJobs.Script.Eventing;
1111
using Moq;
1212
using Xunit;
13+
using Newtonsoft.Json.Linq;
1314

1415
namespace Microsoft.Azure.WebJobs.Script.Tests
1516
{
@@ -79,6 +80,22 @@ public void ValidateFunction_NoTriggerBinding_Throws()
7980
Assert.Equal("No trigger binding specified. A function must have a trigger input binding.", ex.Message);
8081
}
8182

83+
[Fact]
84+
public void CreateTriggerParameter_WithNoBindingMatch_ThrowsExpectedException()
85+
{
86+
FunctionMetadata functionMetadata = new FunctionMetadata();
87+
BindingMetadata metadata = BindingMetadata.Create(JObject.Parse("{\"type\": \"someInvalidTrigger\",\"name\": \"req\",\"direction\": \"in\"}"));
88+
89+
functionMetadata.Bindings.Add(metadata);
90+
91+
var ex = Assert.Throws<ScriptConfigurationException>(() =>
92+
{
93+
_provider.TryCreate(functionMetadata, out FunctionDescriptor descriptor);
94+
});
95+
96+
Assert.Contains("someInvalidTrigger", ex.Message);
97+
}
98+
8299
[Theory]
83100
[InlineData(null)]
84101
[InlineData("")]
@@ -147,7 +164,7 @@ public TestDescriptorProvider(ScriptHost host, ScriptHostConfiguration config) :
147164

148165
protected override IFunctionInvoker CreateFunctionInvoker(string scriptFilePath, BindingMetadata triggerMetadata, FunctionMetadata functionMetadata, Collection<FunctionBinding> inputBindings, Collection<FunctionBinding> outputBindings)
149166
{
150-
throw new NotImplementedException();
167+
return new Mock<IFunctionInvoker>().Object;
151168
}
152169
}
153170
}

0 commit comments

Comments
 (0)