diff --git a/WebJobs.Script.sln b/WebJobs.Script.sln index 8aaeaff844..eef7d9f12f 100644 --- a/WebJobs.Script.sln +++ b/WebJobs.Script.sln @@ -172,6 +172,18 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "EasyTable-Node", "EasyTable sample\EasyTables-Node\index.js = sample\EasyTables-Node\index.js EndProjectSection EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DocumentDB-CSharp", "DocumentDB-CSharp", "{437EB182-8CB9-42BD-9019-E5F6E69D1DB3}" + ProjectSection(SolutionItems) = preProject + sample\DocumentDB-CSharp\function.json = sample\DocumentDB-CSharp\function.json + sample\DocumentDB-CSharp\run.csx = sample\DocumentDB-CSharp\run.csx + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DocumentDB-Node", "DocumentDB-Node", "{8811DCFB-1023-4577-AB9C-B4F191200082}" + ProjectSection(SolutionItems) = preProject + sample\DocumentDB-Node\function.json = sample\DocumentDB-Node\function.json + sample\DocumentDB-Node\index.js = sample\DocumentDB-Node\index.js + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -232,5 +244,7 @@ Global {C23BB3D1-6921-4FCF-8E45-09540E1F986E} = {FF9C0818-30D3-437A-A62D-7A61CA44F459} {B51AE854-21D2-49D2-B83D-9FA18780A175} = {FF9C0818-30D3-437A-A62D-7A61CA44F459} {87E44645-EA02-4F12-8C3E-820B5710292D} = {FF9C0818-30D3-437A-A62D-7A61CA44F459} + {437EB182-8CB9-42BD-9019-E5F6E69D1DB3} = {FF9C0818-30D3-437A-A62D-7A61CA44F459} + {8811DCFB-1023-4577-AB9C-B4F191200082} = {FF9C0818-30D3-437A-A62D-7A61CA44F459} EndGlobalSection EndGlobal diff --git a/sample/DocumentDB-CSharp/function.json b/sample/DocumentDB-CSharp/function.json new file mode 100644 index 0000000000..da3f322963 --- /dev/null +++ b/sample/DocumentDB-CSharp/function.json @@ -0,0 +1,17 @@ +{ + "bindings": [ + { + "type": "queueTrigger", + "direction": "in", + "queueName": "samples-documentdb-csharp" + }, + { + "type": "documentdb", + "direction": "out", + "name": "newItem", + "databaseName": "ItemDb", + "collectionName": "ItemCollection", + "createIfNotExists": false + } + ] +} diff --git a/sample/DocumentDB-CSharp/run.csx b/sample/DocumentDB-CSharp/run.csx new file mode 100644 index 0000000000..44b48272a3 --- /dev/null +++ b/sample/DocumentDB-CSharp/run.csx @@ -0,0 +1,9 @@ +using System; + +public static void Run(string input, out object newItem) +{ + newItem = new + { + text = "Hello from C#! " + input + }; +} \ No newline at end of file diff --git a/sample/DocumentDB-Node/function.json b/sample/DocumentDB-Node/function.json new file mode 100644 index 0000000000..f288020c35 --- /dev/null +++ b/sample/DocumentDB-Node/function.json @@ -0,0 +1,17 @@ +{ + "bindings": [ + { + "type": "queueTrigger", + "direction": "in", + "queueName": "samples-documentdb-node" + }, + { + "type": "documentdb", + "direction": "out", + "name": "item", + "databaseName": "ItemDb", + "collectionName": "ItemCollection", + "createIfNotExists": false + } + ] +} diff --git a/sample/DocumentDB-Node/index.js b/sample/DocumentDB-Node/index.js new file mode 100644 index 0000000000..f635e9e74c --- /dev/null +++ b/sample/DocumentDB-Node/index.js @@ -0,0 +1,9 @@ +module.exports = function (context, input) { + context.log('Node.js queue-triggered DocumentDB function called with input ' + input); + + context.bindings.item = { + text: "Hello from Node! " + input + }; + + context.done(); +} \ No newline at end of file diff --git a/sample/EasyTables-Node/index.js b/sample/EasyTables-Node/index.js index 08cde417f9..9af1ee3dd4 100644 --- a/sample/EasyTables-Node/index.js +++ b/sample/EasyTables-Node/index.js @@ -1,5 +1,5 @@ module.exports = function (context, input) { - context.log('Node.js triggered function via EasyTables called with input ' + input); + context.log('Node.js queue-triggered EasyTable function called with input ' + input); context.bindings.item = { Text: "Hello from Node! " + input diff --git a/src/WebJobs.Script.Host/WebJobs.Script.Host.csproj b/src/WebJobs.Script.Host/WebJobs.Script.Host.csproj index dacd9ac16a..de05242e57 100644 --- a/src/WebJobs.Script.Host/WebJobs.Script.Host.csproj +++ b/src/WebJobs.Script.Host/WebJobs.Script.Host.csproj @@ -63,16 +63,24 @@ ..\..\packages\Microsoft.AspNet.WebHooks.Receivers.1.2.0-beta6\lib\net45\Microsoft.AspNet.WebHooks.Receivers.dll True + + ..\..\packages\Microsoft.Azure.DocumentDB.1.5.3\lib\net40\Microsoft.Azure.Documents.Client.dll + True + ..\..\packages\Microsoft.Azure.WebJobs.Core.1.1.2-alpha-10267\lib\net45\Microsoft.Azure.WebJobs.dll True - ..\..\packages\Microsoft.Azure.WebJobs.Extensions.1.0.2-alpha-10251\lib\net45\Microsoft.Azure.WebJobs.Extensions.dll + ..\..\packages\Microsoft.Azure.WebJobs.Extensions.1.0.2-alpha-10252\lib\net45\Microsoft.Azure.WebJobs.Extensions.dll + True + + + ..\..\packages\Microsoft.Azure.WebJobs.Extensions.DocumentDB.1.0.0-alpha-10252\lib\net45\Microsoft.Azure.WebJobs.Extensions.DocumentDB.dll True - ..\..\packages\Microsoft.Azure.WebJobs.Extensions.EasyTables.1.0.0-alpha-10251\lib\net45\Microsoft.Azure.WebJobs.Extensions.EasyTables.dll + ..\..\packages\Microsoft.Azure.WebJobs.Extensions.EasyTables.1.0.0-alpha-10252\lib\net45\Microsoft.Azure.WebJobs.Extensions.EasyTables.dll True diff --git a/src/WebJobs.Script.Host/packages.config b/src/WebJobs.Script.Host/packages.config index cce389ff8f..3d4ca41368 100644 --- a/src/WebJobs.Script.Host/packages.config +++ b/src/WebJobs.Script.Host/packages.config @@ -6,12 +6,14 @@ + - - + + + diff --git a/src/WebJobs.Script.WebHost/WebJobs.Script.WebHost.csproj b/src/WebJobs.Script.WebHost/WebJobs.Script.WebHost.csproj index c6df486312..6d70763f25 100644 --- a/src/WebJobs.Script.WebHost/WebJobs.Script.WebHost.csproj +++ b/src/WebJobs.Script.WebHost/WebJobs.Script.WebHost.csproj @@ -119,16 +119,24 @@ ..\..\packages\Microsoft.AspNet.WebHooks.Receivers.WordPress.1.2.0-beta6\lib\net45\Microsoft.AspNet.WebHooks.Receivers.WordPress.dll True + + ..\..\packages\Microsoft.Azure.DocumentDB.1.5.3\lib\net40\Microsoft.Azure.Documents.Client.dll + True + ..\..\packages\Microsoft.Azure.WebJobs.Core.1.1.2-alpha-10267\lib\net45\Microsoft.Azure.WebJobs.dll True - ..\..\packages\Microsoft.Azure.WebJobs.Extensions.1.0.2-alpha-10251\lib\net45\Microsoft.Azure.WebJobs.Extensions.dll + ..\..\packages\Microsoft.Azure.WebJobs.Extensions.1.0.2-alpha-10252\lib\net45\Microsoft.Azure.WebJobs.Extensions.dll + True + + + ..\..\packages\Microsoft.Azure.WebJobs.Extensions.DocumentDB.1.0.0-alpha-10252\lib\net45\Microsoft.Azure.WebJobs.Extensions.DocumentDB.dll True - ..\..\packages\Microsoft.Azure.WebJobs.Extensions.EasyTables.1.0.0-alpha-10251\lib\net45\Microsoft.Azure.WebJobs.Extensions.EasyTables.dll + ..\..\packages\Microsoft.Azure.WebJobs.Extensions.EasyTables.1.0.0-alpha-10252\lib\net45\Microsoft.Azure.WebJobs.Extensions.EasyTables.dll True diff --git a/src/WebJobs.Script.WebHost/packages.config b/src/WebJobs.Script.WebHost/packages.config index b87e7a8688..b88aee0dc8 100644 --- a/src/WebJobs.Script.WebHost/packages.config +++ b/src/WebJobs.Script.WebHost/packages.config @@ -22,11 +22,13 @@ + - - + + + diff --git a/src/WebJobs.Script/Binding/DocumentDBBinding.cs b/src/WebJobs.Script/Binding/DocumentDBBinding.cs new file mode 100644 index 0000000000..fd6cba3ee4 --- /dev/null +++ b/src/WebJobs.Script/Binding/DocumentDBBinding.cs @@ -0,0 +1,88 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. + +using System; +using System.IO; +using System.Reflection; +using System.Reflection.Emit; +using System.Text; +using System.Threading.Tasks; +using Microsoft.Azure.WebJobs.Script.Description; +using Newtonsoft.Json.Linq; + +namespace Microsoft.Azure.WebJobs.Script.Binding +{ + internal class DocumentDBBinding : FunctionBinding + { + private BindingDirection _bindingDirection; + + public DocumentDBBinding(ScriptHostConfiguration config, string name, string databaseName, string collectionName, bool createIfNotExists, FileAccess access, BindingDirection direction) : + base(config, name, BindingType.DocumentDB, access, false) + { + DatabaseName = databaseName; + CollectionName = collectionName; + CreateIfNotExists = createIfNotExists; + _bindingDirection = direction; + } + + public string DatabaseName { get; private set; } + + public string CollectionName { get; private set; } + + public bool CreateIfNotExists { get; private set; } + + public override bool HasBindingParameters + { + get + { + return false; + } + } + + public override CustomAttributeBuilder GetCustomAttribute() + { + Type attributeType = typeof(DocumentDBAttribute); + PropertyInfo[] props = new[] + { + attributeType.GetProperty("DatabaseName"), + attributeType.GetProperty("CollectionName"), + attributeType.GetProperty("CreateIfNotExists") + }; + + object[] propValues = new object[] + { + DatabaseName, + CollectionName, + CreateIfNotExists + }; + + ConstructorInfo constructor = attributeType.GetConstructor(System.Type.EmptyTypes); + + return new CustomAttributeBuilder(constructor, new object[] { }, props, propValues); + } + + public override async Task BindAsync(BindingContext context) + { + DocumentDBAttribute attribute = new DocumentDBAttribute + { + DatabaseName = DatabaseName, + CollectionName = CollectionName, + CreateIfNotExists = CreateIfNotExists + }; + + // Only output bindings are supported. + if (Access == FileAccess.Write && _bindingDirection == BindingDirection.Out) + { + IAsyncCollector collector = context.Binder.Bind>(attribute); + byte[] bytes; + using (MemoryStream ms = new MemoryStream()) + { + context.Value.CopyTo(ms); + bytes = ms.ToArray(); + } + JObject entity = JObject.Parse(Encoding.UTF8.GetString(bytes)); + await collector.AddAsync(entity); + } + } + } +} diff --git a/src/WebJobs.Script/Binding/EasyTableBinding.cs b/src/WebJobs.Script/Binding/EasyTableBinding.cs index ba18b72e02..b5f0fedda5 100644 --- a/src/WebJobs.Script/Binding/EasyTableBinding.cs +++ b/src/WebJobs.Script/Binding/EasyTableBinding.cs @@ -18,8 +18,8 @@ public class EasyTableBinding : FunctionBinding public EasyTableBinding(ScriptHostConfiguration config, string name, string tableName, string id, FileAccess access, BindingDirection direction) : base(config, name, BindingType.EasyTable, access, false) { - this.TableName = tableName; - this.Id = id; + TableName = tableName; + Id = id; _bindingDirection = direction; } @@ -45,8 +45,8 @@ public override CustomAttributeBuilder GetCustomAttribute() object[] propValues = new[] { - this.TableName, - this.Id + TableName, + Id }; ConstructorInfo constructor = typeof(EasyTableAttribute).GetConstructor(System.Type.EmptyTypes); @@ -58,12 +58,12 @@ public override async Task BindAsync(BindingContext context) { EasyTableAttribute attribute = new EasyTableAttribute { - TableName = this.TableName, - Id = this.Id + TableName = TableName, + Id = Id }; // Only output bindings are supported. - if (this.Access == FileAccess.Write && _bindingDirection == BindingDirection.Out) + if (Access == FileAccess.Write && _bindingDirection == BindingDirection.Out) { IAsyncCollector collector = context.Binder.Bind>(attribute); byte[] bytes; diff --git a/src/WebJobs.Script/Binding/FunctionBinding.cs b/src/WebJobs.Script/Binding/FunctionBinding.cs index b466764da0..8000aa2a06 100644 --- a/src/WebJobs.Script/Binding/FunctionBinding.cs +++ b/src/WebJobs.Script/Binding/FunctionBinding.cs @@ -114,6 +114,10 @@ internal static Collection GetBindings(ScriptHostConfiguration EasyTableBindingMetadata easyTableMetadata = (EasyTableBindingMetadata)bindingMetadata; bindings.Add(new EasyTableBinding(config, name, easyTableMetadata.TableName, easyTableMetadata.Id, fileAccess, bindingMetadata.Direction)); break; + case BindingType.DocumentDB: + DocumentDBBindingMetadata docDBMetadata = (DocumentDBBindingMetadata)bindingMetadata; + bindings.Add(new DocumentDBBinding(config, name, docDBMetadata.DatabaseName, docDBMetadata.CollectionName, docDBMetadata.CreateIfNotExists, fileAccess, bindingMetadata.Direction)); + break; } } } diff --git a/src/WebJobs.Script/Description/BindingType.cs b/src/WebJobs.Script/Description/BindingType.cs index 88baad81ef..77a2718a83 100644 --- a/src/WebJobs.Script/Description/BindingType.cs +++ b/src/WebJobs.Script/Description/BindingType.cs @@ -18,6 +18,7 @@ public enum BindingType Table, ManualTrigger, TimerTrigger, - EasyTable + EasyTable, + DocumentDB } } diff --git a/src/WebJobs.Script/Description/DocumentDBBindingMetadata.cs b/src/WebJobs.Script/Description/DocumentDBBindingMetadata.cs new file mode 100644 index 0000000000..f1dc3fe9c4 --- /dev/null +++ b/src/WebJobs.Script/Description/DocumentDBBindingMetadata.cs @@ -0,0 +1,36 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. + +using System; +using Microsoft.Azure.WebJobs.Extensions.DocumentDB; + +namespace Microsoft.Azure.WebJobs.Script.Description +{ + internal class DocumentDBBindingMetadata : BindingMetadata + { + public string DatabaseName { get; set; } + + public string CollectionName { get; set; } + + public bool CreateIfNotExists { get; set; } + + [AllowNameResolution] + public string ConnectionString { get; set; } + + public override void ApplyToConfig(JobHostConfigurationBuilder configBuilder) + { + if (configBuilder == null) + { + throw new ArgumentNullException("configBuilder"); + } + + DocumentDBConfiguration config = new DocumentDBConfiguration(); + if (!string.IsNullOrEmpty(ConnectionString)) + { + config.ConnectionString = ConnectionString; + } + + configBuilder.Config.UseDocumentDB(config); + } + } +} diff --git a/src/WebJobs.Script/Host/ScriptHost.cs b/src/WebJobs.Script/Host/ScriptHost.cs index fd1900812c..d547fb37ec 100644 --- a/src/WebJobs.Script/Host/ScriptHost.cs +++ b/src/WebJobs.Script/Host/ScriptHost.cs @@ -321,6 +321,9 @@ private static BindingMetadata ParseBindingMetadata(JObject binding, INameResolv case BindingType.EasyTable: bindingMetadata = binding.ToObject(); break; + case BindingType.DocumentDB: + bindingMetadata = binding.ToObject(); + break; } bindingMetadata.Type = bindingType; @@ -352,7 +355,7 @@ private Collection ReadFunctions(ScriptHostConfiguration con functionName = Path.GetFileNameWithoutExtension(scriptDir); - if (ScriptConfig.Functions != null && + if (ScriptConfig.Functions != null && !ScriptConfig.Functions.Contains(functionName, StringComparer.OrdinalIgnoreCase)) { // a functions filter has been specified and the current function is diff --git a/src/WebJobs.Script/WebJobs.Script.csproj b/src/WebJobs.Script/WebJobs.Script.csproj index ab9c149b30..2bae138a53 100644 --- a/src/WebJobs.Script/WebJobs.Script.csproj +++ b/src/WebJobs.Script/WebJobs.Script.csproj @@ -60,16 +60,24 @@ ..\..\packages\Microsoft.AspNet.WebHooks.Receivers.1.2.0-beta6\lib\net45\Microsoft.AspNet.WebHooks.Receivers.dll True + + ..\..\packages\Microsoft.Azure.DocumentDB.1.5.3\lib\net40\Microsoft.Azure.Documents.Client.dll + True + ..\..\packages\Microsoft.Azure.WebJobs.Core.1.1.2-alpha-10267\lib\net45\Microsoft.Azure.WebJobs.dll True - ..\..\packages\Microsoft.Azure.WebJobs.Extensions.1.0.2-alpha-10251\lib\net45\Microsoft.Azure.WebJobs.Extensions.dll + ..\..\packages\Microsoft.Azure.WebJobs.Extensions.1.0.2-alpha-10252\lib\net45\Microsoft.Azure.WebJobs.Extensions.dll + True + + + ..\..\packages\Microsoft.Azure.WebJobs.Extensions.DocumentDB.1.0.0-alpha-10252\lib\net45\Microsoft.Azure.WebJobs.Extensions.DocumentDB.dll True - ..\..\packages\Microsoft.Azure.WebJobs.Extensions.EasyTables.1.0.0-alpha-10251\lib\net45\Microsoft.Azure.WebJobs.Extensions.EasyTables.dll + ..\..\packages\Microsoft.Azure.WebJobs.Extensions.EasyTables.1.0.0-alpha-10252\lib\net45\Microsoft.Azure.WebJobs.Extensions.EasyTables.dll True @@ -221,6 +229,7 @@ + @@ -251,6 +260,7 @@ + diff --git a/src/WebJobs.Script/packages.config b/src/WebJobs.Script/packages.config index 07cb3e43ed..af93344067 100644 --- a/src/WebJobs.Script/packages.config +++ b/src/WebJobs.Script/packages.config @@ -7,12 +7,14 @@ + - - + + + diff --git a/test/WebJobs.Script.Tests/CSharpEndToEndTests.cs b/test/WebJobs.Script.Tests/CSharpEndToEndTests.cs index 7e75ee5fd6..d7c6bc3da1 100644 --- a/test/WebJobs.Script.Tests/CSharpEndToEndTests.cs +++ b/test/WebJobs.Script.Tests/CSharpEndToEndTests.cs @@ -22,7 +22,13 @@ public CSharpEndToEndTests(TestFixture fixture) : base(fixture) [Fact] public async Task EasyTables() { - await this.EasyTablesTest(); + await EasyTablesTest(); + } + + [Fact] + public async Task DocumentDB() + { + await DocumentDBTest(); } [Fact] diff --git a/test/WebJobs.Script.Tests/EndToEndTestsBase.cs b/test/WebJobs.Script.Tests/EndToEndTestsBase.cs index d659ac5829..52059a72bb 100644 --- a/test/WebJobs.Script.Tests/EndToEndTestsBase.cs +++ b/test/WebJobs.Script.Tests/EndToEndTestsBase.cs @@ -3,11 +3,15 @@ using System; using System.Collections.Generic; +using System.Data.Common; using System.Diagnostics; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; +using Microsoft.Azure.Documents; +using Microsoft.Azure.Documents.Client; +using Microsoft.Azure.WebJobs.Extensions.DocumentDB; using Microsoft.Azure.WebJobs.Extensions.EasyTables; using Microsoft.Azure.WebJobs.Host; using Microsoft.WindowsAzure.MobileServices; @@ -49,6 +53,22 @@ public async Task QueueTriggerToBlobTest() Assert.True(trace.Contains(TestHelpers.RemoveByteOrderMarkAndWhitespace(messageContent))); } + protected async Task DocumentDBTest() + { + // DocumentDB tests need the following environment vars: + // "AzureWebJobsDocumentDBConnectionString" -- the connection string to the account + string id = Guid.NewGuid().ToString(); + Dictionary arguments = new Dictionary + { + { "input", id } + }; + await Fixture.Host.CallAsync("DocumentDBOut", arguments); + + Document doc = await WaitForDocumentAsync(id); + + Assert.Equal(doc.Id, id); + } + protected async Task EasyTablesTest(bool writeToQueue = true) { // EasyTables needs the following environment vars: @@ -117,6 +137,37 @@ await TestHelpers.Await(() => return item; } + protected async Task WaitForDocumentAsync(string itemId) + { + var docUri = UriFactory.CreateDocumentUri("ItemDb", "ItemCollection", itemId); + + // Get the connection string via the config + var connectionString = new DocumentDBConfiguration().ConnectionString; + var builder = new DbConnectionStringBuilder(); + builder.ConnectionString = connectionString; + var serviceUri = new Uri(builder["AccountEndpoint"].ToString()); + var client = new DocumentClient(serviceUri, builder["AccountKey"].ToString()); + + Document doc = null; + await TestHelpers.Await(() => + { + bool result = false; + try + { + var response = Task.Run(() => client.ReadDocumentAsync(docUri)).Result; + doc = response.Resource; + result = true; + } + catch (Exception) + { + } + + return result; + }, 10 * 1000); + + return doc; + } + protected async Task WaitForTraceAsync() { await TestHelpers.Await(() => diff --git a/test/WebJobs.Script.Tests/NodeEndToEndTests.cs b/test/WebJobs.Script.Tests/NodeEndToEndTests.cs index eda662e095..f2f22f4b89 100644 --- a/test/WebJobs.Script.Tests/NodeEndToEndTests.cs +++ b/test/WebJobs.Script.Tests/NodeEndToEndTests.cs @@ -37,11 +37,17 @@ public void ErrorFunction_DoesNotBringDownHost() Assert.Equal("'invalid' is not a valid binding direction.", error); } + [Fact] + public async Task DocumentDB() + { + await DocumentDBTest(); + } + [Fact] public async Task EasyTables() { // Only out bindings are supported in node right now: https://github.com/Azure/azure-webjobs-sdk-script/issues/107 - await this.EasyTablesTest(writeToQueue: false); + await EasyTablesTest(writeToQueue: false); } [Fact] diff --git a/test/WebJobs.Script.Tests/TestScripts/CSharp/DocumentDBOut/function.json b/test/WebJobs.Script.Tests/TestScripts/CSharp/DocumentDBOut/function.json new file mode 100644 index 0000000000..768f625557 --- /dev/null +++ b/test/WebJobs.Script.Tests/TestScripts/CSharp/DocumentDBOut/function.json @@ -0,0 +1,16 @@ +{ + "bindings": [ + { + "type": "manualTrigger", + "direction": "in" + }, + { + "type": "documentdb", + "name": "item", + "direction": "out", + "databaseName": "ItemDb", + "collectionName": "ItemCollection", + "createIfNotExists": true + } + ] +} diff --git a/test/WebJobs.Script.Tests/TestScripts/CSharp/DocumentDBOut/run.csx b/test/WebJobs.Script.Tests/TestScripts/CSharp/DocumentDBOut/run.csx new file mode 100644 index 0000000000..dccc2fa85b --- /dev/null +++ b/test/WebJobs.Script.Tests/TestScripts/CSharp/DocumentDBOut/run.csx @@ -0,0 +1,10 @@ +using System; + +public static void Run(string input, out object item) +{ + item = new + { + id = input, + text = "Hello from C#!" + }; +} \ No newline at end of file diff --git a/test/WebJobs.Script.Tests/TestScripts/Node/DocumentDBOut/function.json b/test/WebJobs.Script.Tests/TestScripts/Node/DocumentDBOut/function.json new file mode 100644 index 0000000000..768f625557 --- /dev/null +++ b/test/WebJobs.Script.Tests/TestScripts/Node/DocumentDBOut/function.json @@ -0,0 +1,16 @@ +{ + "bindings": [ + { + "type": "manualTrigger", + "direction": "in" + }, + { + "type": "documentdb", + "name": "item", + "direction": "out", + "databaseName": "ItemDb", + "collectionName": "ItemCollection", + "createIfNotExists": true + } + ] +} diff --git a/test/WebJobs.Script.Tests/TestScripts/Node/DocumentDBOut/index.js b/test/WebJobs.Script.Tests/TestScripts/Node/DocumentDBOut/index.js new file mode 100644 index 0000000000..c8efe76994 --- /dev/null +++ b/test/WebJobs.Script.Tests/TestScripts/Node/DocumentDBOut/index.js @@ -0,0 +1,10 @@ +module.exports = function (context, input) { + context.log('Node.js triggered function via EasyTables called with input ' + input); + + context.bindings.item = { + id: input, + text: "Hello from Node!" + }; + + context.done(); +} \ No newline at end of file diff --git a/test/WebJobs.Script.Tests/WebJobs.Script.Tests.csproj b/test/WebJobs.Script.Tests/WebJobs.Script.Tests.csproj index c75ec3f5af..4c6d22f858 100644 --- a/test/WebJobs.Script.Tests/WebJobs.Script.Tests.csproj +++ b/test/WebJobs.Script.Tests/WebJobs.Script.Tests.csproj @@ -51,16 +51,24 @@ ..\..\packages\Microsoft.AspNet.WebHooks.Receivers.1.2.0-beta6\lib\net45\Microsoft.AspNet.WebHooks.Receivers.dll True + + ..\..\packages\Microsoft.Azure.DocumentDB.1.5.3\lib\net40\Microsoft.Azure.Documents.Client.dll + True + ..\..\packages\Microsoft.Azure.WebJobs.Core.1.1.2-alpha-10267\lib\net45\Microsoft.Azure.WebJobs.dll True - ..\..\packages\Microsoft.Azure.WebJobs.Extensions.1.0.2-alpha-10251\lib\net45\Microsoft.Azure.WebJobs.Extensions.dll + ..\..\packages\Microsoft.Azure.WebJobs.Extensions.1.0.2-alpha-10252\lib\net45\Microsoft.Azure.WebJobs.Extensions.dll + True + + + ..\..\packages\Microsoft.Azure.WebJobs.Extensions.DocumentDB.1.0.0-alpha-10252\lib\net45\Microsoft.Azure.WebJobs.Extensions.DocumentDB.dll True - ..\..\packages\Microsoft.Azure.WebJobs.Extensions.EasyTables.1.0.0-alpha-10251\lib\net45\Microsoft.Azure.WebJobs.Extensions.EasyTables.dll + ..\..\packages\Microsoft.Azure.WebJobs.Extensions.EasyTables.1.0.0-alpha-10252\lib\net45\Microsoft.Azure.WebJobs.Extensions.EasyTables.dll True @@ -238,6 +246,12 @@ Always + + Always + + + Always + Always @@ -274,6 +288,9 @@ Always + + Always + Always @@ -357,6 +374,9 @@ Always + + Always + Always diff --git a/test/WebJobs.Script.Tests/packages.config b/test/WebJobs.Script.Tests/packages.config index 815dabae1a..39e7fff55e 100644 --- a/test/WebJobs.Script.Tests/packages.config +++ b/test/WebJobs.Script.Tests/packages.config @@ -6,11 +6,13 @@ + - - + + +