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 @@
+
-
-
+
+
+