Skip to content

Commit ac763b1

Browse files
committed
Fixing ManualTrigger input (#602)
1 parent 6c1f574 commit ac763b1

File tree

23 files changed

+243
-30
lines changed

23 files changed

+243
-30
lines changed

src/WebJobs.Script/Binding/FunctionBinding.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,9 @@ internal static Collection<FunctionBinding> GetBindings(ScriptHostConfiguration
5757
}
5858
bindings.Add(new HttpBinding(config, bindingMetadata, FileAccess.Write));
5959
break;
60+
case "manualtrigger":
61+
bindings.Add(new ManualBinding(config, bindingMetadata, FileAccess.Read));
62+
break;
6063
default:
6164
FunctionBinding binding = null;
6265
if (TryParseFunctionBinding(config, bindingMetadata.Raw, out binding))
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
// Copyright (c) .NET Foundation. All rights reserved.
2+
// Licensed under the MIT License. See License.txt in the project root for license information.
3+
4+
using System;
5+
using System.Collections.ObjectModel;
6+
using System.IO;
7+
using System.Reflection.Emit;
8+
using System.Threading.Tasks;
9+
using Microsoft.Azure.WebJobs.Script.Description;
10+
11+
namespace Microsoft.Azure.WebJobs.Script.Binding
12+
{
13+
public class ManualBinding : FunctionBinding
14+
{
15+
public ManualBinding(ScriptHostConfiguration config, BindingMetadata metadata, FileAccess access) : base (config, metadata, access)
16+
{
17+
}
18+
19+
public override Task BindAsync(BindingContext context)
20+
{
21+
throw new NotImplementedException();
22+
}
23+
24+
public override Collection<CustomAttributeBuilder> GetCustomAttributes(Type parameterType)
25+
{
26+
return new Collection<CustomAttributeBuilder>();
27+
}
28+
}
29+
}

src/WebJobs.Script/WebJobs.Script.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,7 @@
303303
<Compile Include="Binding\Http\HttpTriggerAttribute.cs" />
304304
<Compile Include="Binding\Http\HttpTriggerAttributeBindingProvider.cs" />
305305
<Compile Include="Binding\IResultProcessingBinding.cs" />
306+
<Compile Include="Binding\ManualBinding.cs" />
306307
<Compile Include="Binding\ServiceBusScriptBindingProvider.cs" />
307308
<Compile Include="Binding\TableBinding.cs" />
308309
<Compile Include="Binding\WebJobsCoreScriptBindingProvider.cs" />

test/WebJobs.Script.Tests/EndToEndTestsBase.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,28 @@ protected async Task TableOutputTest()
111111
}
112112
}
113113

114+
[Fact]
115+
public async Task ManualTrigger_Invoke_Succeeds()
116+
{
117+
TestHelpers.ClearFunctionLogs("ManualTrigger");
118+
119+
string testData = Guid.NewGuid().ToString();
120+
string inputName = "input";
121+
if (Fixture.FixtureId == "powershell")
122+
{
123+
inputName = "triggerInput";
124+
}
125+
Dictionary<string, object> arguments = new Dictionary<string, object>
126+
{
127+
{ inputName, testData }
128+
};
129+
await Fixture.Host.CallAsync("ManualTrigger", arguments);
130+
131+
// make sure the input string made it all the way through
132+
var logs = await TestHelpers.GetFunctionLogsAsync("ManualTrigger");
133+
Assert.True(logs.Any(p => p.Contains(testData)));
134+
}
135+
114136
[Fact]
115137
public async Task QueueTriggerToBlobTest()
116138
{

test/WebJobs.Script.Tests/NodeEndToEndTests.cs

Lines changed: 27 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -186,24 +186,6 @@ public async Task EventHub()
186186
Assert.Equal(testData, payload.Id);
187187
}
188188

189-
[Fact]
190-
public async Task ManualTrigger()
191-
{
192-
string testData = Guid.NewGuid().ToString();
193-
Dictionary<string, object> arguments = new Dictionary<string, object>
194-
{
195-
{ "input", testData }
196-
};
197-
await Fixture.Host.CallAsync("ManualTrigger", arguments);
198-
199-
// verify use of context.log to log complex objects
200-
TraceEvent scriptTrace = Fixture.TraceWriter.Traces.Single(p => p.Message.Contains(testData));
201-
Assert.Equal(TraceLevel.Info, scriptTrace.Level);
202-
JObject logEntry = JObject.Parse(scriptTrace.Message);
203-
Assert.Equal("Node.js manually triggered function called!", logEntry["message"]);
204-
Assert.Equal(testData, logEntry["input"]);
205-
}
206-
207189
[Fact]
208190
public async Task Scenario_DoneCalledMultipleTimes_ErrorIsLogged()
209191
{
@@ -232,6 +214,33 @@ public async Task Scenario_DoneCalledMultipleTimes_ErrorIsLogged()
232214
Assert.True(logs.Any(p => p.Contains("Function completed (Success")));
233215
}
234216

217+
[Fact]
218+
public async Task Scenario_Logging()
219+
{
220+
TestHelpers.ClearFunctionLogs("Scenarios");
221+
222+
string testData = Guid.NewGuid().ToString();
223+
JObject input = new JObject
224+
{
225+
{ "scenario", "logging" },
226+
{ "input", testData },
227+
};
228+
Dictionary<string, object> arguments = new Dictionary<string, object>
229+
{
230+
{ "input", input.ToString() }
231+
};
232+
await Fixture.Host.CallAsync("Scenarios", arguments);
233+
234+
var logs = await TestHelpers.GetFunctionLogsAsync("Scenarios");
235+
236+
// verify use of context.log to log complex objects
237+
TraceEvent scriptTrace = Fixture.TraceWriter.Traces.Single(p => p.Message.Contains(testData));
238+
Assert.Equal(TraceLevel.Info, scriptTrace.Level);
239+
JObject logEntry = JObject.Parse(scriptTrace.Message);
240+
Assert.Equal("This is a test", logEntry["message"]);
241+
Assert.Equal(testData, logEntry["input"]);
242+
}
243+
235244
[Fact]
236245
public async Task Scenario_RandGuidBinding_GeneratesRandomIDs()
237246
{

test/WebJobs.Script.Tests/TestScripts/PowerShellFunctionGenerationTests.cs renamed to test/WebJobs.Script.Tests/PowerShellFunctionGenerationTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
using Newtonsoft.Json.Linq;
1616
using Xunit;
1717

18-
namespace Microsoft.Azure.WebJobs.Script.Tests.TestScripts
18+
namespace Microsoft.Azure.WebJobs.Script.Tests
1919
{
2020
public class PowerShellFunctionGenerationTests
2121
{
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"bindings": [
3+
{
4+
"type": "manualTrigger",
5+
"name": "input",
6+
"direction": "in"
7+
}
8+
]
9+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
input=$(<$input)
2+
echo $input
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"bindings": [
3+
{
4+
"type": "manualTrigger",
5+
"name": "input",
6+
"direction": "in"
7+
}
8+
]
9+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
using System;
2+
using Microsoft.Azure.WebJobs.Host;
3+
4+
public static void Run(string input, TraceWriter log)
5+
{
6+
log.Info(input);
7+
}

0 commit comments

Comments
 (0)