Skip to content

Commit 0790260

Browse files
committed
Retargeting E2E to .NET Core 2.1
1 parent 18537bd commit 0790260

File tree

8 files changed

+93
-294
lines changed

8 files changed

+93
-294
lines changed

WebJobs.Script.Tests.E2E.sln

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00
33
# Visual Studio 15
44
VisualStudioVersion = 15.1.26403.7
55
MinimumVisualStudioVersion = 15.0.0.0
6-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebJobs.Script.Tests.E2E", "test\WebJobs.Script.Tests.E2E\WebJobs.Script.Tests.E2E.csproj", "{A782A37B-5738-4250-ADA5-53A0AC441BA8}"
6+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WebJobs.Script.Tests.E2E", "test\WebJobs.Script.Tests.E2E\WebJobs.Script.Tests.E2E.csproj", "{A782A37B-5738-4250-ADA5-53A0AC441BA8}"
77
EndProject
88
Global
99
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -19,4 +19,7 @@ Global
1919
GlobalSection(SolutionProperties) = preSolution
2020
HideSolutionNode = FALSE
2121
EndGlobalSection
22+
GlobalSection(ExtensibilityGlobals) = postSolution
23+
SolutionGuid = {76B0C822-2FC4-48A6-B2D6-FCC0F329B789}
24+
EndGlobalSection
2225
EndGlobal
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
using Newtonsoft.Json;
2+
using System.Net.Http;
3+
using System.Net.Http.Headers;
4+
using System.Threading.Tasks;
5+
6+
namespace WebJobs.Script.EndToEndTests
7+
{
8+
public static class HttpClientExtensions
9+
{
10+
public static Task<HttpResponseMessage> PutAsJsonAsync<T>(
11+
this HttpClient httpClient, string url, T data)
12+
{
13+
var dataAsString = JsonConvert.SerializeObject(data);
14+
var content = new StringContent(dataAsString);
15+
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
16+
return httpClient.PutAsync(url, content);
17+
}
18+
19+
public static async Task<T> ReadAsAsync<T>(this HttpContent content)
20+
{
21+
string json = await content.ReadAsStringAsync();
22+
T value = JsonConvert.DeserializeObject<T>(json);
23+
return value;
24+
}
25+
}
26+
}

test/WebJobs.Script.Tests.E2E/FunctionAppFixture.cs

Lines changed: 36 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33

44
using System;
55
using System.Collections.Generic;
6-
using System.Diagnostics;
76
using System.IO;
87
using System.IO.Compression;
98
using System.Linq;
@@ -13,6 +12,7 @@
1312
using System.Threading.Tasks;
1413
using Microsoft.ApplicationInsights;
1514
using Microsoft.ApplicationInsights.DataContracts;
15+
using Microsoft.Extensions.Logging;
1616
using Newtonsoft.Json;
1717
using Newtonsoft.Json.Linq;
1818
using Xunit;
@@ -24,10 +24,12 @@ public class FunctionAppFixture : IDisposable
2424
private bool _disposed;
2525
private KuduClient _kuduClient;
2626
private readonly TrackedAssert _assert;
27+
private readonly ILogger _logger;
2728

2829
public FunctionAppFixture()
2930
{
30-
Trace.Listeners.Add(new ConsoleTraceListener());
31+
ILoggerFactory loggerFactory = new LoggerFactory().AddConsole();
32+
_logger = loggerFactory.CreateLogger<FunctionAppFixture>();
3133

3234
_assert = new TrackedAssert(Telemetry);
3335

@@ -49,7 +51,7 @@ public FunctionAppFixture()
4951
private async Task Initialize()
5052
{
5153
Telemetry.TrackEvent(new EventTelemetry("EnvironmentInitialization"));
52-
Trace.WriteLine("Initializing environment...");
54+
_logger.LogInformation("Initializing environment...");
5355

5456
_kuduClient = new KuduClient($"https://{Settings.SiteName}.scm.azurewebsites.net", Settings.SitePublishingUser, Settings.SitePublishingPassword);
5557
FunctionAppMasterKey = await _kuduClient.GetFunctionsMasterKey();
@@ -65,10 +67,10 @@ private async Task Initialize()
6567
// after all initialization is done, do a final restart for good measure
6668
await RestartSite();
6769

68-
Trace.WriteLine("Environment initialized");
70+
_logger.LogInformation("Environment initialized");
6971
Telemetry.TrackEvent(new EventTelemetry("EnvironmentInitialized"));
7072

71-
Trace.WriteLine("Test run starting...");
73+
_logger.LogInformation("Test run starting...");
7274
}
7375

7476
private async Task RedeployTestSite()
@@ -88,7 +90,7 @@ private async Task RedeployTestSite()
8890

8991
private async Task InitializeFunctionKeys()
9092
{
91-
Trace.WriteLine("Initializing keys...");
93+
_logger.LogInformation("Initializing keys...");
9294

9395
using (var keysUpdate = Telemetry.StartOperation<RequestTelemetry>("KeysUpdate"))
9496
{
@@ -111,10 +113,13 @@ private async Task InitializeFunctionKeys()
111113
}
112114
}
113115
}
114-
116+
115117
private async Task WaitForSite()
116118
{
117-
Trace.WriteLine("Waiting for site...");
119+
_logger.LogInformation("Waiting for site...");
120+
121+
TimeSpan delay = TimeSpan.FromSeconds(3);
122+
int attemptsCount = 5;
118123

119124
using (var client = new HttpClient())
120125
{
@@ -124,35 +129,42 @@ private async Task WaitForSite()
124129
{
125130
if (attempts++ > 0)
126131
{
127-
await Task.Delay(TimeSpan.FromSeconds(3));
132+
await Task.Delay(delay);
128133
}
129134

130135
// Workaround for https://github.com/Azure/azure-functions-host/issues/2397 as the base URL
131136
// doesn't currently start the host.
132137
// var result = await client.GetAsync($"{Settings.SiteBaseAddress}");
133138
var functions = await _kuduClient.GetFunctions();
134-
var result = await client.GetAsync($"{Settings.SiteBaseAddress}/admin/functions/{functions.First().Name}/status?code={FunctionAppMasterKey}");
139+
var result = await client.GetAsync($"{Settings.SiteBaseAddress}/admin/functions/{functions.First().Name}/status?code={FunctionAppMasterKey}");
135140
statusCode = result.StatusCode;
141+
if (statusCode == HttpStatusCode.OK)
142+
{
143+
_logger.LogInformation("Site is up and running!");
144+
return;
145+
}
136146
}
137-
while (statusCode != HttpStatusCode.OK && attempts < 5);
147+
while (attempts < attemptsCount);
148+
138149
}
139150

140-
Trace.WriteLine("Site is up and running!");
151+
throw new InvalidOperationException("Wait for site timeout: {delay.TotalSeconds * 5} seconds.");
152+
141153
}
142154

143155
private async Task AddSettings()
144156
{
145-
Trace.WriteLine("Updating app settings...");
157+
_logger.LogInformation("Updating app settings...");
146158
Telemetry.TrackEvent("SettingsUpdate");
147159

148160
await AddAppSetting(Constants.ServiceBusKey, Environment.GetEnvironmentVariable(Constants.ServiceBusKey));
149161

150-
Trace.WriteLine("App settings updated");
162+
_logger.LogInformation("App settings updated");
151163
}
152164

153165
private async Task UpdateSiteContents()
154166
{
155-
Trace.WriteLine("Updating site contents...");
167+
_logger.LogInformation("Updating site contents...");
156168
Telemetry.TrackEvent("ContentUpdate");
157169

158170
await _kuduClient.DeleteDirectory("site/wwwroot", true);
@@ -161,12 +173,12 @@ private async Task UpdateSiteContents()
161173

162174
await _kuduClient.UploadZip("site", filePath);
163175

164-
Trace.WriteLine("Site contents updated");
176+
_logger.LogInformation("Site contents updated");
165177
}
166178

167179
private async Task UpdateRuntime()
168180
{
169-
Trace.WriteLine($"Updating runtime from: {Settings.RuntimeExtensionPackageUrl}");
181+
_logger.LogInformation($"Updating runtime from: {Settings.RuntimeExtensionPackageUrl}");
170182
Telemetry.TrackEvent("RuntimeUpdate", new Dictionary<string, string> { { "runtimeSource", Settings.RuntimeExtensionPackageUrl } });
171183

172184
string extensionFilePath = Path.ChangeExtension(Path.GetTempFileName(), "zip");
@@ -192,34 +204,34 @@ private async Task UpdateRuntime()
192204
await _kuduClient.DeleteDirectory("SiteExtensions", true);
193205
await _kuduClient.UploadZip("/", extensionFilePath);
194206

195-
Trace.WriteLine($"Updated to function runtime version: {Settings.RuntimeVersion}");
207+
_logger.LogInformation($"Updated to function runtime version: {Settings.RuntimeVersion}");
196208
}
197209

198210
public async Task RestartSite()
199211
{
200-
Trace.WriteLine("Restarting site...");
212+
_logger.LogInformation("Restarting site...");
201213

202214
await IssueSiteCommand($"/subscriptions/{Settings.SiteSubscriptionId}/resourceGroups/{Settings.SiteResourceGroup}/providers/Microsoft.Web/sites/{Settings.SiteName}/restart?api-version=2015-08-01&softRestart=true&synchronous=true");
203215

204-
Trace.WriteLine("Site restarted");
216+
_logger.LogInformation("Site restarted");
205217
}
206218

207219
public async Task StopSite()
208220
{
209-
Trace.WriteLine("Stopping site...");
221+
_logger.LogInformation("Stopping site...");
210222

211223
await IssueSiteCommand($"/subscriptions/{Settings.SiteSubscriptionId}/resourceGroups/{Settings.SiteResourceGroup}/providers/Microsoft.Web/sites/{Settings.SiteName}/stop?api-version=2015-08-01");
212224

213-
Trace.WriteLine("Site stopped");
225+
_logger.LogInformation("Site stopped");
214226
}
215227

216228
public async Task StartSite()
217229
{
218-
Trace.WriteLine("Starting site...");
230+
_logger.LogInformation("Starting site...");
219231

220232
await IssueSiteCommand($"/subscriptions/{Settings.SiteSubscriptionId}/resourceGroups/{Settings.SiteResourceGroup}/providers/Microsoft.Web/sites/{Settings.SiteName}/start?api-version=2015-08-01");
221233

222-
Trace.WriteLine("Site started");
234+
_logger.LogInformation("Site started");
223235
}
224236

225237
public async Task AddAppSetting(string name, string value)

test/WebJobs.Script.Tests.E2E/Functions/wwwroot/ServiceBusNode/function.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
"name": "outputSbMsg",
1717
"queueName": "node",
1818
"connection": "AzureWebJobsServiceBus",
19-
"accessRights_": "Manage",
2019
"direction": "out"
2120
}
2221
],

test/WebJobs.Script.Tests.E2E/GeneralEndToEndTests.cs

Lines changed: 8 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,7 @@
1010
using System.Threading.Tasks;
1111
using Microsoft.ApplicationInsights;
1212
using Microsoft.ApplicationInsights.DataContracts;
13-
using Microsoft.ServiceBus;
14-
using Microsoft.ServiceBus.Messaging;
13+
using Microsoft.Azure.ServiceBus.Management;
1514
using Newtonsoft.Json.Linq;
1615
using Xunit;
1716

@@ -151,10 +150,13 @@ public async Task Invocation_Logs_AreReturned()
151150
public async Task ServiceBus_Node_DoesNotExhaustConnections()
152151
{
153152
var connectionString = Environment.GetEnvironmentVariable("AzureWebJobsServiceBus");
154-
NamespaceManager manager = NamespaceManager.CreateFromConnectionString(connectionString);
153+
ManagementClient manager = new ManagementClient(connectionString);
155154

156155
// Start with an empty queue
157-
await manager.DeleteQueueAsync("node");
156+
if (await manager.QueueExistsAsync("node"))
157+
{
158+
await manager.DeleteQueueAsync("node");
159+
}
158160

159161
// Pre-create the queue as we can end up with 409s if a bunch of requests
160162
// try to create the queue at once
@@ -199,50 +201,8 @@ public async Task ServiceBus_Node_DoesNotExhaustConnections()
199201
}
200202
}
201203

202-
QueueDescription queueDescription = manager.GetQueue("node");
203-
Assert.Equal(i * j, queueDescription.MessageCountDetails.ActiveMessageCount);
204-
}
205-
206-
[Fact(Skip = "Proxy not yet enabled.")]
207-
[TestTrace]
208-
public async Task FileExtension()
209-
{
210-
using (var client = CreateClient())
211-
{
212-
HttpResponseMessage response = await client.GetAsync($"test.txt");
213-
214-
string content = await response.Content.ReadAsStringAsync();
215-
_fixture.Assert.Equals("200", response.StatusCode.ToString("D"));
216-
_fixture.Assert.Equals("test", content);
217-
}
218-
}
219-
220-
[Fact(Skip = "Proxy not yet enabled.")]
221-
[TestTrace]
222-
public async Task RootCheck()
223-
{
224-
using (var client = CreateClient())
225-
{
226-
HttpResponseMessage response = await client.GetAsync("/");
227-
228-
string content = await response.Content.ReadAsStringAsync();
229-
_fixture.Assert.Equals("200", response.StatusCode.ToString("D"));
230-
_fixture.Assert.Equals("Root", content);
231-
}
232-
}
233-
234-
[Fact(Skip = "Proxy not yet enabled.")]
235-
[TestTrace]
236-
public async Task LocalFunctionCall()
237-
{
238-
using (var client = CreateClient())
239-
{
240-
HttpResponseMessage response = await client.GetAsync($"myhttptrigger?code={_fixture.FunctionDefaultKey}");
241-
242-
string content = await response.Content.ReadAsStringAsync();
243-
_fixture.Assert.Equals("200", response.StatusCode.ToString("D"));
244-
_fixture.Assert.Equals("Pong", content);
245-
}
204+
var queueInfo = await manager.GetQueueRuntimeInfoAsync("node");
205+
Assert.Equal(i * j, queueInfo.MessageCount);
246206
}
247207

248208
// Assumes we have a valid function name.

test/WebJobs.Script.Tests.E2E/Properties/AssemblyInfo.cs

Lines changed: 0 additions & 36 deletions
This file was deleted.

test/WebJobs.Script.Tests.E2E/ProxyEndToEndTests.cs

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,8 @@
22
// Licensed under the MIT License. See License.txt in the project root for license information.
33

44
using System;
5-
using System.Collections.Generic;
6-
using System.Globalization;
75
using System.Net.Http;
8-
using System.Net.Http.Headers;
9-
using System.Text;
106
using System.Threading.Tasks;
11-
using Microsoft.ApplicationInsights;
12-
using Microsoft.ApplicationInsights.DataContracts;
13-
using Microsoft.ServiceBus;
14-
using Microsoft.ServiceBus.Messaging;
15-
using Newtonsoft.Json.Linq;
167
using Xunit;
178

189
namespace WebJobs.Script.EndToEndTests
@@ -79,7 +70,7 @@ public async Task LongRoute()
7970
HttpResponseMessage response = await client.GetAsync(longRoute);
8071

8172
string content = await response.Content.ReadAsStringAsync();
82-
73+
8374
// This is to make sure the url is greater than the default asp.net 260 characters.
8475
_fixture.Assert.True(longRoute.Length > 260);
8576
_fixture.Assert.Equals("200", response.StatusCode.ToString("D"));

0 commit comments

Comments
 (0)