Skip to content

Commit 35abdb6

Browse files
committed
Re-enabling ServiceBus tests
1 parent 73ecd41 commit 35abdb6

File tree

26 files changed

+341
-155
lines changed

26 files changed

+341
-155
lines changed

src/WebJobs.Script.WebHost/WebJobs.Script.WebHost.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,13 @@
3737
<PackageReference Include="Microsoft.Azure.AppService.Proxy.Client.Contract" Version="0.3.1.1">
3838
<NoWarn>NU1701</NoWarn>
3939
</PackageReference>
40-
<PackageReference Include="Microsoft.Azure.WebJobs" Version="3.0.0-beta4-11268" />
40+
<PackageReference Include="Microsoft.Azure.WebJobs" Version="3.0.0-beta4-11270" />
4141
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions" Version="3.0.0-beta4-10578" />
4242
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.Http" Version="3.0.0-beta4-10578">
4343
<NoWarn>NU1701</NoWarn>
4444
</PackageReference>
45-
<PackageReference Include="Microsoft.Azure.WebJobs.Logging" Version="3.0.0-beta4-11268" />
46-
<PackageReference Include="Microsoft.Azure.WebJobs.Logging.ApplicationInsights" Version="3.0.0-beta4-11268" />
45+
<PackageReference Include="Microsoft.Azure.WebJobs.Logging" Version="3.0.0-beta4-11270" />
46+
<PackageReference Include="Microsoft.Azure.WebJobs.Logging.ApplicationInsights" Version="3.0.0-beta4-11270" />
4747
<PackageReference Include="Microsoft.Azure.WebSites.DataProtection" Version="2.1.88-alpha" />
4848
<PackageReference Include="System.Net.Primitives" Version="4.3.0" />
4949
<PackageReference Include="WindowsAzure.Storage" Version="8.6.0" />

src/WebJobs.Script/WebJobs.Script.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,13 @@
2525
<PackageReference Include="Microsoft.Azure.Functions.NodeJsWorker" Version="1.0.0-beta1-10026">
2626
<PrivateAssets>None</PrivateAssets>
2727
</PackageReference>
28-
<PackageReference Include="Microsoft.Azure.WebJobs" Version="3.0.0-beta4-11268" />
28+
<PackageReference Include="Microsoft.Azure.WebJobs" Version="3.0.0-beta4-11270" />
2929
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions" Version="3.0.0-beta4-10578" />
3030
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.Http" Version="3.0.0-beta4-10578">
3131
<NoWarn>NU1701</NoWarn>
3232
</PackageReference>
33-
<PackageReference Include="Microsoft.Azure.WebJobs.Logging" Version="3.0.0-beta4-11268" />
34-
<PackageReference Include="Microsoft.Azure.WebJobs.Logging.ApplicationInsights" Version="3.0.0-beta4-11268" />
33+
<PackageReference Include="Microsoft.Azure.WebJobs.Logging" Version="3.0.0-beta4-11270" />
34+
<PackageReference Include="Microsoft.Azure.WebJobs.Logging.ApplicationInsights" Version="3.0.0-beta4-11270" />
3535
<PackageReference Include="Microsoft.Build" Version="15.3.409" />
3636
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Scripting" Version="2.4.0" />
3737
<PackageReference Include="Microsoft.Extensions.Logging" Version="2.0.0" />

test/WebJobs.Script.Tests.Integration/ScriptHostEndToEnd/ScriptHostEndToEndTestFixture.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -156,9 +156,6 @@ protected virtual async Task CreateTestStorageEntities()
156156
batch.Insert(new TestEntity { PartitionKey = "BBB", RowKey = "002", Region = "West", Name = "Test Entity 2", Status = 1 });
157157
batch.Insert(new TestEntity { PartitionKey = "BBB", RowKey = "003", Region = "West", Name = "Test Entity 3", Status = 0 });
158158
await TestTable.ExecuteBatchAsync(batch);
159-
160-
string serviceBusQueueName = string.Format("test-input-{0}", FixtureId);
161-
string connectionString = AmbientConnectionStringProvider.Instance.GetConnectionString(ConnectionStringNames.ServiceBus);
162159
}
163160

164161
public virtual void Dispose()
Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
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 Microsoft.Azure.ServiceBus;
5+
using Microsoft.Azure.ServiceBus.Core;
6+
using Microsoft.Azure.WebJobs.Host;
7+
using Microsoft.WindowsAzure.Storage.Blob;
8+
using System;
9+
using System.Collections.Generic;
10+
using System.Text;
11+
using System.Threading.Tasks;
12+
using Xunit;
13+
14+
namespace Microsoft.Azure.WebJobs.Script.Tests.Integration.ServiceBus
15+
{
16+
public abstract class ServiceBusEndToEndTestsBase<TTestFixture> :
17+
EndToEndTestsBase<TTestFixture> where TTestFixture : ServiceBusTestFixture, new()
18+
{
19+
public ServiceBusEndToEndTestsBase(TTestFixture fixture) : base(fixture)
20+
{
21+
}
22+
23+
protected async Task ServiceBusQueueTriggerAndOutputTest()
24+
{
25+
// ServiceBus tests need the following environment vars:
26+
// "AzureWebJobsServiceBus" -- the connection string to the account
27+
28+
var resultBlob = Fixture.TestOutputContainer.GetBlockBlobReference("servicebuse2e-queue-completed");
29+
await resultBlob.DeleteIfExistsAsync();
30+
31+
await Fixture.CleanUpEntity(Fixture.TestQueueName1);
32+
await Fixture.CleanUpEntity(Fixture.TestQueueName2);
33+
// trigger
34+
await Fixture.SendQueueMessage(Fixture.TestQueueName1, "test-queue");
35+
36+
// now wait for function to be invoked
37+
string result = await TestHelpers.WaitForBlobAndGetStringAsync(resultBlob,
38+
() => string.Join(Environment.NewLine, Fixture.Host.GetLogMessages()));
39+
40+
var list = await Fixture.CleanUpEntity(Fixture.TestQueueName2);
41+
Assert.Equal(list.Count, 1);
42+
Assert.Equal(list[0], "test-queue-completed");
43+
}
44+
45+
protected async Task ServiceBusTopicTriggerTest()
46+
{
47+
var resultBlob = Fixture.TestOutputContainer.GetBlockBlobReference("servicebuse2e-topic-completed");
48+
await resultBlob.DeleteIfExistsAsync();
49+
50+
await Fixture.CleanUpEntity(Fixture.TestTopicName1);
51+
// trigger
52+
await Fixture.SendTopicMessage(Fixture.TestTopicName1, "test-topic");
53+
54+
// now wait for function to be invoked
55+
string result = await TestHelpers.WaitForBlobAndGetStringAsync(resultBlob,
56+
() => string.Join(Environment.NewLine, Fixture.Host.GetLogMessages()));
57+
58+
Assert.Equal(result, "test-topic-completed");
59+
}
60+
61+
protected async Task ServiceBusTopicOutputTest()
62+
{
63+
64+
var resultBlob = Fixture.TestOutputContainer.GetBlockBlobReference("servicebuse2e-topic-completed");
65+
await resultBlob.DeleteIfExistsAsync();
66+
67+
await Fixture.CleanUpEntity(Fixture.TestTopicName2);
68+
await Fixture.Host.BeginFunctionAsync("ServiceBusTopicOutput", "test-topic");
69+
70+
// now wait for function to be invoked
71+
string result = await TestHelpers.WaitForBlobAndGetStringAsync(resultBlob,
72+
() => string.Join(Environment.NewLine, Fixture.Host.GetLogMessages()));
73+
74+
var list = await Fixture.CleanUpEntity(Fixture.TestTopicName2);
75+
Assert.Equal(list.Count, 1);
76+
Assert.Equal(list[0], "test-topic-completed");
77+
}
78+
}
79+
80+
public abstract class ServiceBusTestFixture : EndToEndTestFixture
81+
{
82+
// Azure Service Bus DotNet Core client does not allow to create new Service Bus entities(queues and topics).
83+
// So we are using same precreated entities as for WebJobs tests
84+
85+
public string TestQueueName1 = "core-test-queue1";
86+
public string TestQueueName2 = "core-test-queue2";
87+
public string TestTopicName1 = EntityNameHelper.FormatSubscriptionPath("core-test-topic1", "sub1");
88+
public string TestTopicName2 = EntityNameHelper.FormatSubscriptionPath("core-test-topic1", "sub2");
89+
private string connectionString = AmbientConnectionStringProvider.Instance.GetConnectionString(ConnectionStringNames.ServiceBus);
90+
91+
protected ServiceBusTestFixture(string rootPath, string testId) : base(rootPath, testId, "Microsoft.Azure.WebJobs.ServiceBus", "3.0.0-beta4-11270")
92+
{
93+
}
94+
95+
protected override IEnumerable<string> GetActiveFunctions() => new[] { "ServiceBusQueueTriggerAndOutput", "ServiceBusTopicTrigger", "ServiceBusTopicOutput"};
96+
97+
public async Task<List<string>> CleanUpEntity(string entityPath)
98+
{
99+
string connectionString = AmbientConnectionStringProvider.Instance.GetConnectionString(ConnectionStringNames.ServiceBus);
100+
var messageReceiver = new MessageReceiver(connectionString, entityPath, ReceiveMode.ReceiveAndDelete);
101+
Message message;
102+
List<string> result = new List<string>();
103+
do
104+
{
105+
message = await messageReceiver.ReceiveAsync(TimeSpan.FromSeconds(3)).ConfigureAwait(false);
106+
if (message != null)
107+
{
108+
result.Add(Encoding.UTF8.GetString(message.Body));
109+
}
110+
else
111+
{
112+
break;
113+
}
114+
} while (true);
115+
await messageReceiver.CloseAsync();
116+
return result;
117+
}
118+
119+
public async Task SendQueueMessage(string entityPath, string message)
120+
{
121+
var queueClient = new QueueClient(connectionString, entityPath);
122+
await queueClient.SendAsync(new Message(Encoding.UTF8.GetBytes(message)));
123+
}
124+
125+
public async Task SendTopicMessage(string entityPath, string message)
126+
{
127+
var topicClient = new TopicClient(connectionString, entityPath);
128+
await topicClient.SendAsync(new Message(Encoding.UTF8.GetBytes(message)));
129+
}
130+
}
131+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
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.Threading.Tasks;
5+
using Xunit;
6+
7+
namespace Microsoft.Azure.WebJobs.Script.Tests.Integration.ServiceBus
8+
{
9+
public class ServiceBusCSharpEndToEndTests:
10+
ServiceBusEndToEndTestsBase<ServiceBusCSharpEndToEndTests.TestFixture>
11+
{
12+
public ServiceBusCSharpEndToEndTests(TestFixture fixture) : base(fixture)
13+
{
14+
}
15+
16+
[Fact]
17+
public Task ServiceBusQueueTriggerAndOutput()
18+
{
19+
return ServiceBusQueueTriggerAndOutputTest();
20+
}
21+
22+
[Fact]
23+
public Task ServiceBusTopicTrigger()
24+
{
25+
return ServiceBusTopicTriggerTest();
26+
}
27+
28+
[Fact]
29+
public Task ServiceBusTopicOutput()
30+
{
31+
return ServiceBusTopicOutputTest();
32+
}
33+
34+
public class TestFixture : ServiceBusTestFixture
35+
{
36+
private const string ScriptRoot = @"TestScripts\CSharp";
37+
38+
public TestFixture() : base(ScriptRoot, "csharp")
39+
{
40+
}
41+
}
42+
}
43+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
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.Threading.Tasks;
5+
using Xunit;
6+
7+
namespace Microsoft.Azure.WebJobs.Script.Tests.Integration.ServiceBus
8+
{
9+
public class ServiceBusNodeEndToEndTests :
10+
ServiceBusEndToEndTestsBase<ServiceBusNodeEndToEndTests.TestFixture>
11+
{
12+
public ServiceBusNodeEndToEndTests(TestFixture fixture) : base(fixture)
13+
{
14+
}
15+
16+
[Fact]
17+
public Task ServiceBusQueueTriggerAndOutput()
18+
{
19+
return ServiceBusQueueTriggerAndOutputTest();
20+
}
21+
22+
[Fact]
23+
public Task ServiceBusTopicTrigger()
24+
{
25+
return ServiceBusTopicTriggerTest();
26+
}
27+
28+
[Fact]
29+
public Task ServiceBusTopicOutput()
30+
{
31+
return ServiceBusTopicOutputTest();
32+
}
33+
34+
public class TestFixture : ServiceBusTestFixture
35+
{
36+
private const string ScriptRoot = @"TestScripts\Node";
37+
38+
public TestFixture() : base(ScriptRoot, "node")
39+
{
40+
}
41+
}
42+
}
43+
}
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,21 @@
22
"bindings": [
33
{
44
"type": "serviceBusTrigger",
5-
"name": "input",
5+
"name": "trigger",
66
"direction": "in",
7-
"queueName": "test-input-fsharp"
7+
"queueName": "core-test-queue1"
88
},
99
{
1010
"type": "serviceBus",
11-
"name": "message",
11+
"name": "output",
1212
"direction": "out",
13-
"queueName": "test-input-fsharp"
13+
"queueName": "core-test-queue2"
1414
},
1515
{
1616
"type": "blob",
1717
"name": "completed",
1818
"direction": "out",
19-
"path": "test-output-fsharp/completed"
19+
"path": "test-output-csharp/servicebuse2e-queue-completed"
2020
}
2121
]
2222
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
public static void Run(string trigger, out string output, out string completed)
2+
{
3+
output = trigger + "-completed";
4+
completed = output;
5+
}

test/WebJobs.Script.Tests.Integration/TestScripts/CSharp/ServiceBusQueueTriggerToBlob/run.csx

Lines changed: 0 additions & 30 deletions
This file was deleted.
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
{
2+
"bindings": [
3+
{
4+
"type": "manualTrigger",
5+
"name": "trigger",
6+
"direction": "in"
7+
},
8+
{
9+
"type": "serviceBus",
10+
"name": "output",
11+
"direction": "out",
12+
"topicName": "core-test-topic1"
13+
},
14+
{
15+
"type": "blob",
16+
"name": "completed",
17+
"direction": "out",
18+
"path": "test-output-csharp/servicebuse2e-topic-completed"
19+
}
20+
]
21+
}

0 commit comments

Comments
 (0)