From 1d9b2d33b0d844eb3d0d787da38b7ef2eae694ed Mon Sep 17 00:00:00 2001 From: Leprox43 Date: Mon, 31 Oct 2022 16:22:43 +0100 Subject: [PATCH 1/2] EdgeHubTriggerAttribute resolve InputName param --- .../EdgeHubTriggerBindingProvider.cs | 18 +++++++++++++++--- ...oft.Azure.WebJobs.Extensions.EdgeHub.csproj | 6 +++--- .../config/EdgeHubExtensionConfigProvider.cs | 12 +++++++++--- 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/edge-modules/functions/binding/src/Microsoft.Azure.WebJobs.Extensions.EdgeHub/EdgeHubTriggerBindingProvider.cs b/edge-modules/functions/binding/src/Microsoft.Azure.WebJobs.Extensions.EdgeHub/EdgeHubTriggerBindingProvider.cs index 44a82cd0b7e..5d550f08079 100644 --- a/edge-modules/functions/binding/src/Microsoft.Azure.WebJobs.Extensions.EdgeHub/EdgeHubTriggerBindingProvider.cs +++ b/edge-modules/functions/binding/src/Microsoft.Azure.WebJobs.Extensions.EdgeHub/EdgeHubTriggerBindingProvider.cs @@ -7,6 +7,7 @@ namespace Microsoft.Azure.WebJobs.Extensions.EdgeHub using System.Reflection; using System.Threading.Tasks; using Microsoft.Azure.Devices.Client; + using Microsoft.Azure.WebJobs.Host; using Microsoft.Azure.WebJobs.Host.Triggers; /// @@ -14,10 +15,16 @@ namespace Microsoft.Azure.WebJobs.Extensions.EdgeHub /// It's TryCreateAsync method is called by the runtime for all job parameters, giving it a chance to return a binding. /// Please see Trigger Binding Extensions /// - class EdgeHubTriggerBindingProvider : ITriggerBindingProvider + public class EdgeHubTriggerBindingProvider : ITriggerBindingProvider { readonly ConcurrentDictionary> receivers = new ConcurrentDictionary>(); ModuleClient moduleClient; + readonly INameResolver nameResolver; + + public EdgeHubTriggerBindingProvider(INameResolver nameResolver) + { + this.nameResolver = nameResolver; + } public async Task TryCreateAsync(TriggerBindingProviderContext context) { @@ -33,13 +40,16 @@ public async Task TryCreateAsync(TriggerBindingProviderContext return null; } + var inputName = nameResolver?.ResolveWholeString(attribute.InputName) ?? attribute.InputName; + inputName = inputName.ToLowerInvariant(); + await this.TrySetEventDefaultHandlerAsync(); var messageProcessor = new EdgeHubMessageProcessor(); var triggerBinding = new EdgeHubTriggerBinding(context.Parameter, messageProcessor); this.receivers.AddOrUpdate( - attribute.InputName.ToLowerInvariant(), + inputName, // The function used to generate a value for an absent. // Creates a new List and adds the message processor (k) => new List() @@ -70,8 +80,10 @@ async Task TrySetEventDefaultHandlerAsync() async Task FunctionsMessageHandler(Message message, object userContext) { + var inputName = message.InputName.ToLowerInvariant(); byte[] payload = message.GetBytes(); - if (this.receivers.TryGetValue(message.InputName.ToLowerInvariant(), out IList functionReceivers)) + + if (this.receivers.TryGetValue(inputName, out IList functionReceivers)) { foreach (EdgeHubMessageProcessor edgeHubTriggerBinding in functionReceivers) { diff --git a/edge-modules/functions/binding/src/Microsoft.Azure.WebJobs.Extensions.EdgeHub/Microsoft.Azure.WebJobs.Extensions.EdgeHub.csproj b/edge-modules/functions/binding/src/Microsoft.Azure.WebJobs.Extensions.EdgeHub/Microsoft.Azure.WebJobs.Extensions.EdgeHub.csproj index dad6db84025..e029adebc8f 100644 --- a/edge-modules/functions/binding/src/Microsoft.Azure.WebJobs.Extensions.EdgeHub/Microsoft.Azure.WebJobs.Extensions.EdgeHub.csproj +++ b/edge-modules/functions/binding/src/Microsoft.Azure.WebJobs.Extensions.EdgeHub/Microsoft.Azure.WebJobs.Extensions.EdgeHub.csproj @@ -28,13 +28,13 @@ - - + + - + diff --git a/edge-modules/functions/binding/src/Microsoft.Azure.WebJobs.Extensions.EdgeHub/config/EdgeHubExtensionConfigProvider.cs b/edge-modules/functions/binding/src/Microsoft.Azure.WebJobs.Extensions.EdgeHub/config/EdgeHubExtensionConfigProvider.cs index 2cb83030e2c..b58d455fcbb 100644 --- a/edge-modules/functions/binding/src/Microsoft.Azure.WebJobs.Extensions.EdgeHub/config/EdgeHubExtensionConfigProvider.cs +++ b/edge-modules/functions/binding/src/Microsoft.Azure.WebJobs.Extensions.EdgeHub/config/EdgeHubExtensionConfigProvider.cs @@ -15,8 +15,15 @@ namespace Microsoft.Azure.WebJobs.Extensions.EdgeHub.Config /// Extension configuration provider used to register EdgeHub triggers and binders /// [Extension("EdgeHub")] - class EdgeHubExtensionConfigProvider : IExtensionConfigProvider + public class EdgeHubExtensionConfigProvider : IExtensionConfigProvider { + readonly INameResolver nameResolver; + + public EdgeHubExtensionConfigProvider(INameResolver nameResolver) + { + this.nameResolver = nameResolver; + } + public void Initialize(ExtensionConfigContext context) { if (context == null) @@ -24,11 +31,10 @@ public void Initialize(ExtensionConfigContext context) throw new ArgumentNullException(nameof(context)); } - var bindingProvider = new EdgeHubTriggerBindingProvider(); var rule = context.AddBindingRule(); rule.AddConverter(ConvertMessageToString); rule.AddConverter(ConvertMessageToBytes); - rule.BindToTrigger(bindingProvider); + rule.BindToTrigger(new EdgeHubTriggerBindingProvider(nameResolver)); var rule2 = context.AddBindingRule(); rule2.BindToCollector(typeof(EdgeHubCollectorBuilder)); From 0c538cd48090a360aa9ce5923dac29465c3ab045 Mon Sep 17 00:00:00 2001 From: Leprox43 Date: Mon, 31 Oct 2022 16:43:39 +0100 Subject: [PATCH 2/2] fix code coverage --- .../EdgeHubTriggerBindingProvider.cs | 5 ++--- .../config/EdgeHubExtensionConfigProvider.cs | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/edge-modules/functions/binding/src/Microsoft.Azure.WebJobs.Extensions.EdgeHub/EdgeHubTriggerBindingProvider.cs b/edge-modules/functions/binding/src/Microsoft.Azure.WebJobs.Extensions.EdgeHub/EdgeHubTriggerBindingProvider.cs index 5d550f08079..502cfa4b5b7 100644 --- a/edge-modules/functions/binding/src/Microsoft.Azure.WebJobs.Extensions.EdgeHub/EdgeHubTriggerBindingProvider.cs +++ b/edge-modules/functions/binding/src/Microsoft.Azure.WebJobs.Extensions.EdgeHub/EdgeHubTriggerBindingProvider.cs @@ -17,9 +17,9 @@ namespace Microsoft.Azure.WebJobs.Extensions.EdgeHub /// public class EdgeHubTriggerBindingProvider : ITriggerBindingProvider { + readonly INameResolver nameResolver; readonly ConcurrentDictionary> receivers = new ConcurrentDictionary>(); ModuleClient moduleClient; - readonly INameResolver nameResolver; public EdgeHubTriggerBindingProvider(INameResolver nameResolver) { @@ -40,8 +40,7 @@ public async Task TryCreateAsync(TriggerBindingProviderContext return null; } - var inputName = nameResolver?.ResolveWholeString(attribute.InputName) ?? attribute.InputName; - inputName = inputName.ToLowerInvariant(); + var inputName = (this.nameResolver?.ResolveWholeString(attribute.InputName) ?? attribute.InputName).ToLowerInvariant(); await this.TrySetEventDefaultHandlerAsync(); diff --git a/edge-modules/functions/binding/src/Microsoft.Azure.WebJobs.Extensions.EdgeHub/config/EdgeHubExtensionConfigProvider.cs b/edge-modules/functions/binding/src/Microsoft.Azure.WebJobs.Extensions.EdgeHub/config/EdgeHubExtensionConfigProvider.cs index b58d455fcbb..8a42a651d2d 100644 --- a/edge-modules/functions/binding/src/Microsoft.Azure.WebJobs.Extensions.EdgeHub/config/EdgeHubExtensionConfigProvider.cs +++ b/edge-modules/functions/binding/src/Microsoft.Azure.WebJobs.Extensions.EdgeHub/config/EdgeHubExtensionConfigProvider.cs @@ -34,7 +34,7 @@ public void Initialize(ExtensionConfigContext context) var rule = context.AddBindingRule(); rule.AddConverter(ConvertMessageToString); rule.AddConverter(ConvertMessageToBytes); - rule.BindToTrigger(new EdgeHubTriggerBindingProvider(nameResolver)); + rule.BindToTrigger(new EdgeHubTriggerBindingProvider(this.nameResolver)); var rule2 = context.AddBindingRule(); rule2.BindToCollector(typeof(EdgeHubCollectorBuilder));