Skip to content

Commit 9dc1ca4

Browse files
committed
E2E test updates
1 parent 88360e7 commit 9dc1ca4

File tree

5 files changed

+113
-119
lines changed

5 files changed

+113
-119
lines changed

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

Lines changed: 44 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
using System.IO;
88
using System.IO.Compression;
99
using System.Linq;
10+
using System.Net;
1011
using System.Net.Http;
1112
using System.Text;
1213
using System.Threading.Tasks;
@@ -32,7 +33,7 @@ public FunctionAppFixture()
3233

3334
FunctionDefaultKey = Guid.NewGuid().ToString().ToLower();
3435

35-
InitializeSite().Wait();
36+
Initialize().Wait();
3637
}
3738

3839
public TrackedAssert Assert => _assert;
@@ -45,47 +46,56 @@ public FunctionAppFixture()
4546

4647
public string FunctionAppMasterKey { get; private set; }
4748

48-
private async Task InitializeSite()
49+
private async Task Initialize()
4950
{
5051
Telemetry.TrackEvent(new EventTelemetry("EnvironmentInitialization"));
51-
5252
Trace.WriteLine("Initializing environment...");
5353

54+
_kuduClient = new KuduClient($"https://{Settings.SiteName}.scm.azurewebsites.net", Settings.SitePublishingUser, Settings.SitePublishingPassword);
55+
FunctionAppMasterKey = await _kuduClient.GetFunctionsMasterKey();
56+
57+
// to run tests against currently deployed site, skip
58+
// this step (can take over 2 minutes)
59+
await RedeployTestSite();
60+
61+
// ensure that our current client key is set as
62+
// the default key for all http functions
63+
await InitializeFunctionKeys();
64+
65+
// after all initialization is done, do a final restart for good measure
66+
await RestartSite();
67+
68+
Trace.WriteLine("Environment initialized.");
69+
Telemetry.TrackEvent(new EventTelemetry("EnvironmentInitialized"));
70+
}
71+
72+
private async Task RedeployTestSite()
73+
{
5474
await StopSite();
5575

5676
await AddSettings();
5777

58-
_kuduClient = new KuduClient($"https://{Settings.SiteName}.scm.azurewebsites.net", Settings.SitePublishingUser, Settings.SitePublishingPassword);
59-
6078
await UpdateRuntime();
6179

6280
await UpdateSiteContents();
6381

6482
await StartSite();
6583

66-
await InitializeFunctionKeys();
67-
68-
Trace.WriteLine("Restarting site...");
69-
await RestartSite();
70-
71-
Trace.WriteLine("Environment initialized.");
72-
Telemetry.TrackEvent(new EventTelemetry("EnvironmentInitialized"));
84+
await WaitForSite();
7385
}
7486

7587
private async Task InitializeFunctionKeys()
7688
{
7789
Trace.WriteLine("Initializing keys...");
7890

79-
FunctionAppMasterKey = await _kuduClient.GetFunctionsMasterKey();
80-
8191
using (var keysUpdate = Telemetry.StartOperation<RequestTelemetry>("KeysUpdate"))
8292
{
8393
List<Function> functions = await _kuduClient.GetFunctions();
84-
8594
using (var client = new HttpClient())
8695
{
8796
client.BaseAddress = Settings.SiteBaseAddress;
8897

98+
// update the default key for all http functions
8999
var requests = new List<Task<HttpResponseMessage>>();
90100
foreach (var function in functions.Where(f => f.Configuration.Bindings.Any(b => string.Equals(b.Type, "httpTrigger", StringComparison.OrdinalIgnoreCase))))
91101
{
@@ -100,6 +110,25 @@ private async Task InitializeFunctionKeys()
100110
}
101111
}
102112

113+
private async Task WaitForSite()
114+
{
115+
using (var client = new HttpClient())
116+
{
117+
HttpStatusCode statusCode;
118+
int attempts = 0;
119+
do
120+
{
121+
if (attempts++ > 0)
122+
{
123+
await Task.Delay(TimeSpan.FromSeconds(3));
124+
}
125+
var result = await client.GetAsync($"{Settings.SiteBaseAddress}");
126+
statusCode = result.StatusCode;
127+
}
128+
while (statusCode != HttpStatusCode.OK && attempts < 5);
129+
}
130+
}
131+
103132
private async Task AddSettings()
104133
{
105134
Trace.WriteLine("Updating app settings...");

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

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,48 @@ public async Task ServiceBus_Node_DoesNotExhaustConnections()
203203
Assert.Equal(i * j, queueDescription.MessageCountDetails.ActiveMessageCount);
204204
}
205205

206+
[Fact]
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]
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]
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+
}
246+
}
247+
206248
// Assumes we have a valid function name.
207249
// Function names are case-insensitive, case-preserving.
208250
// Table storage is case-sensitive. So need to normalize case to use as table keys.

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

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

test/WebJobs.Script.Tests.E2E/WebJobs.Script.Tests.E2E.csproj

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3-
<Import Project="..\..\packages\xunit.runner.visualstudio.2.2.0\build\net20\xunit.runner.visualstudio.props" Condition="Exists('..\..\packages\xunit.runner.visualstudio.2.2.0\build\net20\xunit.runner.visualstudio.props')" />
3+
<Import Project="..\..\packages\xunit.runner.visualstudio.2.3.1\build\net20\xunit.runner.visualstudio.props" Condition="Exists('..\..\packages\xunit.runner.visualstudio.2.3.1\build\net20\xunit.runner.visualstudio.props')" />
4+
<Import Project="..\..\packages\xunit.core.2.3.1\build\xunit.core.props" Condition="Exists('..\..\packages\xunit.core.2.3.1\build\xunit.core.props')" />
45
<PropertyGroup>
56
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
67
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@@ -66,17 +67,14 @@
6667
<HintPath>..\..\packages\xunit.abstractions.2.0.1\lib\net35\xunit.abstractions.dll</HintPath>
6768
<Private>True</Private>
6869
</Reference>
69-
<Reference Include="xunit.assert, Version=2.2.0.3545, Culture=neutral, PublicKeyToken=8d05b1bb7a6fdb6c, processorArchitecture=MSIL">
70-
<HintPath>..\..\packages\xunit.assert.2.2.0\lib\netstandard1.1\xunit.assert.dll</HintPath>
71-
<Private>True</Private>
70+
<Reference Include="xunit.assert, Version=2.3.1.3858, Culture=neutral, PublicKeyToken=8d05b1bb7a6fdb6c, processorArchitecture=MSIL">
71+
<HintPath>..\..\packages\xunit.assert.2.3.1\lib\netstandard1.1\xunit.assert.dll</HintPath>
7272
</Reference>
73-
<Reference Include="xunit.core, Version=2.2.0.3545, Culture=neutral, PublicKeyToken=8d05b1bb7a6fdb6c, processorArchitecture=MSIL">
74-
<HintPath>..\..\packages\xunit.extensibility.core.2.2.0\lib\netstandard1.1\xunit.core.dll</HintPath>
75-
<Private>True</Private>
73+
<Reference Include="xunit.core, Version=2.3.1.3858, Culture=neutral, PublicKeyToken=8d05b1bb7a6fdb6c, processorArchitecture=MSIL">
74+
<HintPath>..\..\packages\xunit.extensibility.core.2.3.1\lib\netstandard1.1\xunit.core.dll</HintPath>
7675
</Reference>
77-
<Reference Include="xunit.execution.desktop, Version=2.2.0.3545, Culture=neutral, PublicKeyToken=8d05b1bb7a6fdb6c, processorArchitecture=MSIL">
78-
<HintPath>..\..\packages\xunit.extensibility.execution.2.2.0\lib\net452\xunit.execution.desktop.dll</HintPath>
79-
<Private>True</Private>
76+
<Reference Include="xunit.execution.desktop, Version=2.3.1.3858, Culture=neutral, PublicKeyToken=8d05b1bb7a6fdb6c, processorArchitecture=MSIL">
77+
<HintPath>..\..\packages\xunit.extensibility.execution.2.3.1\lib\net452\xunit.execution.desktop.dll</HintPath>
8078
</Reference>
8179
</ItemGroup>
8280
<Choose>
@@ -99,7 +97,6 @@
9997
<Compile Include="GeneralEndToEndTests.cs" />
10098
<Compile Include="KuduClient.cs" />
10199
<Compile Include="Properties\AssemblyInfo.cs" />
102-
<Compile Include="ProxyEndToEndTests.cs" />
103100
<Compile Include="Settings.cs" />
104101
<Compile Include="TelemetryContext.cs" />
105102
<Compile Include="TraceAttribute.cs" />
@@ -142,6 +139,9 @@
142139
<ItemGroup>
143140
<Folder Include="Functions\wwwroot\PingRoute\" />
144141
</ItemGroup>
142+
<ItemGroup>
143+
<Analyzer Include="..\..\packages\xunit.analyzers.0.7.0\analyzers\dotnet\cs\xunit.analyzers.dll" />
144+
</ItemGroup>
145145
<Choose>
146146
<When Condition="'$(VisualStudioVersion)' == '10.0' And '$(IsCodedUITest)' == 'True'">
147147
<ItemGroup>
@@ -162,12 +162,6 @@
162162
</Choose>
163163
<Import Project="$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets" Condition="Exists('$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets')" />
164164
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
165-
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
166-
<PropertyGroup>
167-
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
168-
</PropertyGroup>
169-
<Error Condition="!Exists('..\..\packages\xunit.runner.visualstudio.2.2.0\build\net20\xunit.runner.visualstudio.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\xunit.runner.visualstudio.2.2.0\build\net20\xunit.runner.visualstudio.props'))" />
170-
</Target>
171165
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
172166
Other similar extension points exist, see Microsoft.Common.targets.
173167
<Target Name="BeforeBuild">
@@ -176,4 +170,13 @@
176170
</Target>
177171
-->
178172
<Import Project="..\..\tools\Clean.targets" />
173+
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
174+
<PropertyGroup>
175+
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
176+
</PropertyGroup>
177+
<Error Condition="!Exists('..\..\packages\xunit.core.2.3.1\build\xunit.core.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\xunit.core.2.3.1\build\xunit.core.props'))" />
178+
<Error Condition="!Exists('..\..\packages\xunit.core.2.3.1\build\xunit.core.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\xunit.core.2.3.1\build\xunit.core.targets'))" />
179+
<Error Condition="!Exists('..\..\packages\xunit.runner.visualstudio.2.3.1\build\net20\xunit.runner.visualstudio.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\xunit.runner.visualstudio.2.3.1\build\net20\xunit.runner.visualstudio.props'))" />
180+
</Target>
181+
<Import Project="..\..\packages\xunit.core.2.3.1\build\xunit.core.targets" Condition="Exists('..\..\packages\xunit.core.2.3.1\build\xunit.core.targets')" />
179182
</Project>

test/WebJobs.Script.Tests.E2E/packages.config

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,12 @@
44
<package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net461" />
55
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net461" />
66
<package id="WindowsAzure.ServiceBus" version="4.1.0" targetFramework="net461" />
7-
<package id="xunit" version="2.2.0" targetFramework="net461" />
7+
<package id="xunit" version="2.3.1" targetFramework="net461" />
88
<package id="xunit.abstractions" version="2.0.1" targetFramework="net461" />
9-
<package id="xunit.assert" version="2.2.0" targetFramework="net461" />
10-
<package id="xunit.core" version="2.2.0" targetFramework="net461" />
11-
<package id="xunit.extensibility.core" version="2.2.0" targetFramework="net461" />
12-
<package id="xunit.extensibility.execution" version="2.2.0" targetFramework="net461" />
13-
<package id="xunit.runner.visualstudio" version="2.2.0" targetFramework="net461" developmentDependency="true" />
9+
<package id="xunit.analyzers" version="0.7.0" targetFramework="net461" />
10+
<package id="xunit.assert" version="2.3.1" targetFramework="net461" />
11+
<package id="xunit.core" version="2.3.1" targetFramework="net461" />
12+
<package id="xunit.extensibility.core" version="2.3.1" targetFramework="net461" />
13+
<package id="xunit.extensibility.execution" version="2.3.1" targetFramework="net461" />
14+
<package id="xunit.runner.visualstudio" version="2.3.1" targetFramework="net461" developmentDependency="true" />
1415
</packages>

0 commit comments

Comments
 (0)