Skip to content

Commit ec6ef3e

Browse files
amamounelsayedpragnagopa
authored andcommitted
Add support for new TypedData Collections
1 parent 51768bb commit ec6ef3e

File tree

20 files changed

+1018
-21
lines changed

20 files changed

+1018
-21
lines changed

endtoendtests/Azure.Functions.Java.Tests.E2E/Azure.Functions.Java.Tests.E2E/Constants.cs

+16
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,26 @@ public static class Constants
3737
// EventHubs
3838
public static string OutputEventHubQueueName = "test-eventhuboutput-java";
3939
public static string InputEventHubName = "test-input-java";
40+
4041
public static string OutputJsonEventHubQueueName = "test-eventhuboutputjson-java";
4142
public static string InputJsonEventHubName = "test-inputjson-java";
43+
4244
public static string OutputOneEventHubQueueName = "test-eventhuboutputone-java";
4345
public static string InputCardinalityOneEventHubName = "test-inputOne-java";
46+
47+
public static string OutputBinaryOneQueueName = "test-binary-output-cardinality-one-java";
48+
public static string InputBinaryOneEventHubQueueName = "test-binary-input-cardinality-one-java";
49+
50+
public static string OutputBinaryManyQueueName = "test-binary-output-cardinality-many-list-java";
51+
public static string InputBinaryManyEventHubQueueName = "test-binary-input-cardinality-many-list-java";
52+
53+
public static string OutputBinaryArrayManyQueueName = "test-binary-output-cardinality-many-array-java";
54+
public static string InputBinaryManyArrayEventHubQueueName = "test-binary-input-cardinality-many-array-java";
55+
56+
// Settings
57+
public static string EventHubsConnectionStringSenderSetting = Environment.GetEnvironmentVariable("AzureWebJobsEventHubSender");
58+
public static string EventHubsConnectionStringSenderSetting2 = Environment.GetEnvironmentVariable("AzureWebJobsEventHubSender_2");
59+
4460
public static string EventHubsConnectionStringSetting = Environment.GetEnvironmentVariable("AzureWebJobsEventHubSender");
4561

4662
// Xunit Fixtures and Collections

endtoendtests/Azure.Functions.Java.Tests.E2E/Azure.Functions.Java.Tests.E2E/EventHubsEndToEndTests.cs

+70-3
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using System;
66
using System.Collections.Generic;
77
using System.Linq;
8+
using System.Reflection.Metadata;
89
using System.Threading.Tasks;
910
using Xunit;
1011

@@ -29,7 +30,7 @@ public async Task EventHubTriggerAndOutputJSON_Succeeds()
2930
await SetupQueue(Constants.OutputJsonEventHubQueueName);
3031

3132
// Need to setup EventHubs: test-inputjson-java and test-outputjson-java
32-
await EventHubsHelpers.SendJSONMessagesAsync(expectedEventId);
33+
await EventHubsHelpers.SendJSONMessagesAsync(expectedEventId, Constants.EventHubsConnectionStringSenderSetting);
3334

3435
//Verify
3536
var queueMessage = await StorageHelpers.ReadFromQueue(Constants.OutputJsonEventHubQueueName);
@@ -52,7 +53,7 @@ public async Task EventHubTriggerAndOutputString_Succeeds()
5253
await SetupQueue(Constants.OutputEventHubQueueName);
5354

5455
// Need to setup EventHubs: test-input-java and test-output-java
55-
await EventHubsHelpers.SendMessagesAsync(expectedEventId, Constants.InputEventHubName);
56+
await EventHubsHelpers.SendMessagesAsync(expectedEventId, Constants.InputEventHubName, Constants.EventHubsConnectionStringSenderSetting);
5657

5758
//Verify
5859
var queueMessage = await StorageHelpers.ReadFromQueue(Constants.OutputEventHubQueueName);
@@ -74,7 +75,7 @@ public async Task EventHubTriggerCardinalityOne_Succeeds()
7475
await SetupQueue(Constants.OutputOneEventHubQueueName);
7576

7677
// Need to setup EventHubs: test-inputOne-java and test-outputone-java
77-
await EventHubsHelpers.SendMessagesAsync(expectedEventId, Constants.InputCardinalityOneEventHubName);
78+
await EventHubsHelpers.SendMessagesAsync(expectedEventId, Constants.InputCardinalityOneEventHubName, Constants.EventHubsConnectionStringSenderSetting);
7879

7980
//Verify
8081
IEnumerable<string> queueMessages = await StorageHelpers.ReadMessagesFromQueue(Constants.OutputOneEventHubQueueName);
@@ -87,6 +88,72 @@ public async Task EventHubTriggerCardinalityOne_Succeeds()
8788
}
8889
}
8990

91+
/*
92+
[Fact]
93+
public async Task EventHubTriggerAndOutputBinaryListMany_Succeeds()
94+
{
95+
string expectedEventId = Guid.NewGuid().ToString();
96+
try
97+
{
98+
await SetupQueue(Constants.OutputBinaryManyQueueName);
99+
100+
await EventHubsHelpers.SendMessagesAsync(expectedEventId, Constants.InputBinaryManyEventHubQueueName, Constants.EventHubsConnectionStringSenderSetting2);
101+
102+
//Verify
103+
var queueMessage = await StorageHelpers.ReadFromQueue(Constants.OutputBinaryManyQueueName);
104+
Assert.Contains(expectedEventId, queueMessage);
105+
}
106+
finally
107+
{
108+
//Clear queue
109+
await StorageHelpers.ClearQueue(Constants.OutputEventHubQueueName);
110+
}
111+
}
112+
*/
113+
[Fact]
114+
public async Task EventHubTriggerAndOutputBinaryOne_Succeeds()
115+
{
116+
string expectedEventId = Guid.NewGuid().ToString();
117+
try
118+
{
119+
await SetupQueue(Constants.OutputBinaryOneQueueName);
120+
121+
await EventHubsHelpers.SendMessagesAsync(expectedEventId, Constants.InputBinaryOneEventHubQueueName, Constants.EventHubsConnectionStringSenderSetting2);
122+
123+
//Verify
124+
var queueMessage = await StorageHelpers.ReadFromQueue(Constants.OutputBinaryOneQueueName);
125+
Assert.Contains(expectedEventId, queueMessage);
126+
}
127+
finally
128+
{
129+
//Clear queue
130+
await StorageHelpers.ClearQueue(Constants.OutputEventHubQueueName);
131+
}
132+
}
133+
/*
134+
[Fact]
135+
public async Task EventHubTriggerAndOutputBinaryArrayMany_Succeeds()
136+
{
137+
string expectedEventId = Guid.NewGuid().ToString();
138+
try
139+
{
140+
await SetupQueue(Constants.OutputBinaryArrayManyQueueName);
141+
142+
await EventHubsHelpers.SendMessagesAsync(expectedEventId, Constants.InputBinaryManyArrayEventHubQueueName, Constants.EventHubsConnectionStringSenderSetting2);
143+
144+
//Verify
145+
var queueMessage = await StorageHelpers.ReadFromQueue(Constants.OutputBinaryArrayManyQueueName);
146+
Assert.Contains(expectedEventId, queueMessage);
147+
}
148+
finally
149+
{
150+
//Clear queue
151+
await StorageHelpers.ClearQueue(Constants.OutputEventHubQueueName);
152+
}
153+
}
154+
*/
155+
156+
90157
private static async Task SetupQueue(string queueName)
91158
{
92159
//Clear queue

endtoendtests/Azure.Functions.Java.Tests.E2E/Azure.Functions.Java.Tests.E2E/Helpers/EventHubsHelpers.cs

+4-4
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ namespace Azure.Functions.Java.Tests.E2E
1212
{
1313
public class EventHubsHelpers
1414
{
15-
public static async Task SendJSONMessagesAsync(string eventId)
15+
public static async Task SendJSONMessagesAsync(string eventId, string connectionString)
1616
{
1717
// write 3 events
1818
List<EventData> events = new List<EventData>();
@@ -29,13 +29,13 @@ public static async Task SendJSONMessagesAsync(string eventId)
2929
events.Add(evt);
3030
}
3131

32-
EventHubsConnectionStringBuilder builder = new EventHubsConnectionStringBuilder(Constants.EventHubsConnectionStringSetting);
32+
EventHubsConnectionStringBuilder builder = new EventHubsConnectionStringBuilder(connectionString);
3333
builder.EntityPath = Constants.InputJsonEventHubName;
3434
EventHubClient eventHubClient = EventHubClient.CreateFromConnectionString(builder.ToString());
3535
await eventHubClient.SendAsync(events);
3636
}
3737

38-
public static async Task SendMessagesAsync(string eventId, string evenHubName)
38+
public static async Task SendMessagesAsync(string eventId, string evenHubName, string connectionString)
3939
{
4040
// write 3 events
4141
List<EventData> events = new List<EventData>();
@@ -48,7 +48,7 @@ public static async Task SendMessagesAsync(string eventId, string evenHubName)
4848
events.Add(evt);
4949
}
5050

51-
EventHubsConnectionStringBuilder builder = new EventHubsConnectionStringBuilder(Constants.EventHubsConnectionStringSetting);
51+
EventHubsConnectionStringBuilder builder = new EventHubsConnectionStringBuilder(connectionString);
5252
builder.EntityPath = evenHubName;
5353
EventHubClient eventHubClient = EventHubClient.CreateFromConnectionString(builder.ToString());
5454
await eventHubClient.SendAsync(events);

endtoendtests/local.settings.json

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
"AzureWebJobsServiceBus": "",
55
"AzureWebJobsEventHubReceiver":"",
66
"AzureWebJobsEventHubSender":"",
7+
"AzureWebJobsEventHubSender_2":"",
78
"AzureWebJobsEventHubPath":"",
89
"CosmosDBDatabaseName":"",
910
"CosmosDBCollectionName":"",

endtoendtests/src/main/java/com/microsoft/azure/functions/endtoend/EventHubTriggerTests.java

+33-4
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public void EventHubTriggerCardinalityOne(
4747
/**
4848
* This function verifies the above functions
4949
*/
50-
@FunctionName("TestEventHubOutputJson")
50+
@FunctionName("EventHubOutputJson")
5151
public void TestEventHubOutputJson(
5252
@EventHubTrigger(name = "message", eventHubName = "test-outputjson-java", connection = "AzureWebJobsEventHubSender") String message,
5353
@QueueOutput(name = "output", queueName = "test-eventhuboutputjson-java", connection = "AzureWebJobsStorage") OutputBinding<String> output,
@@ -57,7 +57,7 @@ public void TestEventHubOutputJson(
5757
output.setValue(message);
5858
}
5959

60-
@FunctionName("TestEventHubOutput")
60+
@FunctionName("EventHubOutput")
6161
public void TestEventHubOutput(
6262
@EventHubTrigger(name = "message", eventHubName = "test-output-java", connection = "AzureWebJobsEventHubSender", cardinality = Cardinality.ONE) String message,
6363
@QueueOutput(name = "output", queueName = "test-eventhuboutput-java", connection = "AzureWebJobsStorage") OutputBinding<String> output,
@@ -67,7 +67,7 @@ public void TestEventHubOutput(
6767
output.setValue(message);
6868
}
6969

70-
@FunctionName("TestEventHubOutputInputOne")
70+
@FunctionName("EventHubOutputInputOne")
7171
public void TestEventHubOutputInputOne(
7272
@EventHubTrigger(name = "message", eventHubName = "test-outputone-java", connection = "AzureWebJobsEventHubSender", cardinality = Cardinality.ONE) String message,
7373
@QueueOutput(name = "output", queueName = "test-eventhuboutputone-java", connection = "AzureWebJobsStorage") OutputBinding<String> output,
@@ -77,11 +77,40 @@ public void TestEventHubOutputInputOne(
7777
output.setValue(message);
7878
}
7979

80+
@FunctionName("EventHubTriggerAndOutputBinaryCardinalityManyListBinary")
81+
public void EventHubTriggerAndOutputBinaryCardinalityManyListBinary(
82+
@EventHubTrigger(name = "messages", eventHubName = "test-binary-input-cardinality-many-list-java", connection = "AzureWebJobsEventHubSender_2", dataType = "binary", cardinality = Cardinality.MANY) List<byte[]> messages,
83+
@QueueOutput(name = "output", queueName = "test-binary-output-cardinality-many-list-java", connection = "AzureWebJobsStorage") OutputBinding<byte[]> output,
84+
final ExecutionContext context
85+
) {
86+
context.getLogger().info("Java Event Hub trigger received " + messages.size() +" messages");
87+
output.setValue(messages.get(0));
88+
}
89+
90+
@FunctionName("EventHubTriggerAndOutputBinaryCardinalityOne")
91+
public void EventHubTriggerAndOutputBinaryCardinalityOne(
92+
@EventHubTrigger(name = "message", eventHubName = "test-binary-input-cardinality-one-java", connection = "AzureWebJobsEventHubSender_2", dataType = "binary", cardinality = Cardinality.ONE) byte[] message,
93+
@QueueOutput(name = "output", queueName = "test-binary-output-cardinality-one-java",connection = "AzureWebJobsStorage") OutputBinding<byte[]> output,
94+
final ExecutionContext context
95+
) {
96+
context.getLogger().info("Java Event Hub trigger received message" + message);
97+
output.setValue(message);
98+
}
99+
100+
@FunctionName("EventHubTriggerAndOutputBinaryCardinalityManyArrayBinary")
101+
public void EventHubTriggerAndOutputBinaryCardinalityManyArrayBinary(
102+
@EventHubTrigger(name = "messages", eventHubName = "test-binary-input-cardinality-many-array-java", connection = "AzureWebJobsEventHubSender_2", dataType = "binary", cardinality = Cardinality.MANY) byte[][] messages,
103+
@QueueOutput(name = "output", queueName = "test-binary-output-cardinality-many-array-java", connection = "AzureWebJobsStorage") OutputBinding<byte[]> output,
104+
final ExecutionContext context
105+
) {
106+
context.getLogger().info("Java Event Hub trigger received " + messages.length +" messages");
107+
output.setValue(messages[0]);
108+
}
109+
80110
public static class SystemProperty {
81111
public String SequenceNumber;
82112
public String Offset;
83113
public String PartitionKey;
84114
public String EnqueuedTimeUtc;
85115
}
86-
87116
}

src/main/azure-functions-language-worker-protobuf/README.md

+18-7
Original file line numberDiff line numberDiff line change
@@ -26,19 +26,30 @@ From within the Azure Functions language worker repo:
2626
1. Define remote branch for cleaner git commands
2727
- `git remote add proto-file https://github.com/azure/azure-functions-language-worker-protobuf.git`
2828
- `git fetch proto-file`
29-
2. Merge updates
30-
- `git merge -s subtree proto-file/<version branch> --squash --allow-unrelated-histories`
31-
- You can also merge with an explicit path to subtree: `git merge -X subtree=<path in language worker repo> --squash proto-file/<version branch> --allow-unrelated-histories`
32-
3. Finalize with commit
33-
- `git commit -m "Updated subtree from https://github.com/azure/azure-functions-language-worker-protobuf. Branch: <version branch>. Commit: <latest protobuf commit hash>"`
29+
2. Pull a specific release tag
30+
- `git fetch proto-file refs/tags/<tag-name>`
31+
- Example: `git fetch proto-file refs/tags/v1.1.0-protofile`
32+
3. Merge updates
33+
- Merge with an explicit path to subtree: `git merge -X subtree=<path in language worker repo> --squash <tag-name> --allow-unrelated-histories --strategy-option theirs`
34+
- Example: `git merge -X subtree=src/WebJobs.Script.Grpc/azure-functions-language-worker-protobuf --squash v1.1.0-protofile --allow-unrelated-histories --strategy-option theirs`
35+
4. Finalize with commit
36+
- `git commit -m "Updated subtree from https://github.com/azure/azure-functions-language-worker-protobuf. Tag: <tag-name>. Commit: <commit hash>"`
3437
- `git push`
35-
38+
39+
## Releasing a Language Worker Protobuf version
40+
41+
1. Draft a release in the GitHub UI
42+
- Be sure to inculde details of the release
43+
2. Create a release version, following semantic versioning guidelines ([semver.org](https://semver.org/))
44+
3. Tag the version with the pattern: `v<M>.<m>.<p>-protofile` (example: `v1.1.0-protofile`)
45+
3. Merge `dev` to `master`
46+
3647
## Consuming FunctionRPC.proto
3748
*Note: Update versionNumber before running following commands*
3849

3950
## CSharp
4051
```
41-
set NUGET_PATH=%UserProfile%\.nuget\packages
52+
set NUGET_PATH="%UserProfile%\.nuget\packages"
4253
set GRPC_TOOLS_PATH=%NUGET_PATH%\grpc.tools\<versionNumber>\tools\windows_x86
4354
set PROTO_PATH=.\azure-functions-language-worker-protobuf\src\proto
4455
set PROTO=.\azure-functions-language-worker-protobuf\src\proto\FunctionRpc.proto

0 commit comments

Comments
 (0)