Merge branch 'release/2.2'
This commit is contained in:
commit
f0a66a3932
|
|
@ -3,16 +3,26 @@ phases:
|
||||||
parameters:
|
parameters:
|
||||||
agentOs: Windows
|
agentOs: Windows
|
||||||
beforeBuild:
|
beforeBuild:
|
||||||
- powershell: "& ./tools/UpdateIISExpressCertificate.ps1; & ./tools/update_schema.ps1"
|
- powershell: "& ./tools/UpdateIISExpressCertificate.ps1; & ./tools/update_schema.ps1; & ./tools/SetupTestEnvironment.ps1 Setup"
|
||||||
displayName: Prepare repo
|
displayName: Prepare repo
|
||||||
afterBuild:
|
afterBuild:
|
||||||
|
- powershell: "& ./tools/SetupTestEnvironment.ps1 Shutdown"
|
||||||
|
displayName: Stop AppVerifier
|
||||||
|
condition: always()
|
||||||
- task: PublishBuildArtifacts@1
|
- task: PublishBuildArtifacts@1
|
||||||
displayName: Upload binlog
|
displayName: Upload logs
|
||||||
condition: eq(variables['system.pullrequest.isfork'], false)
|
condition: eq(variables['system.pullrequest.isfork'], false)
|
||||||
inputs:
|
inputs:
|
||||||
artifactName: logs
|
artifactName: logs
|
||||||
artifactType: Container
|
artifactType: Container
|
||||||
pathtoPublish: artifacts/logs/
|
pathtoPublish: artifacts/logs
|
||||||
|
- task: PublishBuildArtifacts@1
|
||||||
|
displayName: Upload dumps
|
||||||
|
condition: eq(variables['system.pullrequest.isfork'], false)
|
||||||
|
inputs:
|
||||||
|
artifactName: dumps
|
||||||
|
artifactType: Container
|
||||||
|
pathtoPublish: artifacts/dumps
|
||||||
|
|
||||||
- template: .vsts-pipelines/templates/phases/default-build.yml@buildtools
|
- template: .vsts-pipelines/templates/phases/default-build.yml@buildtools
|
||||||
parameters:
|
parameters:
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,8 @@
|
||||||
<PackageSigningCertName>MicrosoftNuGet</PackageSigningCertName>
|
<PackageSigningCertName>MicrosoftNuGet</PackageSigningCertName>
|
||||||
<PublicSign Condition="'$(OS)' != 'Windows_NT'">true</PublicSign>
|
<PublicSign Condition="'$(OS)' != 'Windows_NT'">true</PublicSign>
|
||||||
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
|
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
|
||||||
|
<!-- Workaround microsoft/msbuild#3626 -->
|
||||||
|
<AddSyntheticProjectReferencesForSolutionDependencies>false</AddSyntheticProjectReferencesForSolutionDependencies>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|
|
||||||
|
|
@ -75,6 +75,8 @@ BOOL APIENTRY DllMain(HMODULE hModule,
|
||||||
break;
|
break;
|
||||||
case DLL_PROCESS_DETACH:
|
case DLL_PROCESS_DETACH:
|
||||||
g_fProcessDetach = TRUE;
|
g_fProcessDetach = TRUE;
|
||||||
|
IN_PROCESS_HANDLER::StaticTerminate();
|
||||||
|
ALLOC_CACHE_HANDLER::StaticTerminate();
|
||||||
DebugStop();
|
DebugStop();
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
|
|
@ -259,7 +259,6 @@ IN_PROCESS_APPLICATION::LoadManagedApplication
|
||||||
// Set up stdout redirect
|
// Set up stdout redirect
|
||||||
|
|
||||||
SRWExclusiveLock lock(m_stateLock);
|
SRWExclusiveLock lock(m_stateLock);
|
||||||
|
|
||||||
if (m_pLoggerProvider == NULL)
|
if (m_pLoggerProvider == NULL)
|
||||||
{
|
{
|
||||||
hr = LoggingHelpers::CreateLoggingProvider(
|
hr = LoggingHelpers::CreateLoggingProvider(
|
||||||
|
|
@ -394,28 +393,22 @@ IN_PROCESS_APPLICATION::SetEnvironementVariablesOnWorkerProcess(
|
||||||
{
|
{
|
||||||
HRESULT hr = S_OK;
|
HRESULT hr = S_OK;
|
||||||
ENVIRONMENT_VAR_HASH* pHashTable = NULL;
|
ENVIRONMENT_VAR_HASH* pHashTable = NULL;
|
||||||
if (FAILED(hr = ENVIRONMENT_VAR_HELPERS::InitEnvironmentVariablesTable(
|
std::unique_ptr<ENVIRONMENT_VAR_HASH, ENVIRONMENT_VAR_HASH_DELETER> table;
|
||||||
|
RETURN_IF_FAILED(hr = ENVIRONMENT_VAR_HELPERS::InitEnvironmentVariablesTable(
|
||||||
m_pConfig->QueryEnvironmentVariables(),
|
m_pConfig->QueryEnvironmentVariables(),
|
||||||
m_pConfig->QueryWindowsAuthEnabled(),
|
m_pConfig->QueryWindowsAuthEnabled(),
|
||||||
m_pConfig->QueryBasicAuthEnabled(),
|
m_pConfig->QueryBasicAuthEnabled(),
|
||||||
m_pConfig->QueryAnonymousAuthEnabled(),
|
m_pConfig->QueryAnonymousAuthEnabled(),
|
||||||
&pHashTable)))
|
&pHashTable));
|
||||||
{
|
|
||||||
goto Finished;
|
|
||||||
}
|
|
||||||
|
|
||||||
pHashTable->Apply(ENVIRONMENT_VAR_HELPERS::AppendEnvironmentVariables, &hr);
|
table.reset(pHashTable);
|
||||||
if (FAILED(hr))
|
|
||||||
{
|
table->Apply(ENVIRONMENT_VAR_HELPERS::AppendEnvironmentVariables, &hr);
|
||||||
goto Finished;
|
RETURN_IF_FAILED(hr);
|
||||||
}
|
|
||||||
pHashTable->Apply(ENVIRONMENT_VAR_HELPERS::SetEnvironmentVariables, &hr);
|
table->Apply(ENVIRONMENT_VAR_HELPERS::SetEnvironmentVariables, &hr);
|
||||||
if (FAILED(hr))
|
RETURN_IF_FAILED(hr);
|
||||||
{
|
return S_OK;
|
||||||
goto Finished;
|
|
||||||
}
|
|
||||||
Finished:
|
|
||||||
return hr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT
|
HRESULT
|
||||||
|
|
|
||||||
|
|
@ -180,11 +180,18 @@ HRESULT
|
||||||
Finished:
|
Finished:
|
||||||
if (FAILED(hr))
|
if (FAILED(hr))
|
||||||
{
|
{
|
||||||
if (sm_pAlloc != NULL)
|
StaticTerminate();
|
||||||
{
|
|
||||||
delete sm_pAlloc;
|
|
||||||
sm_pAlloc = NULL;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// static
|
||||||
|
void
|
||||||
|
IN_PROCESS_HANDLER::StaticTerminate(VOID)
|
||||||
|
{
|
||||||
|
if (sm_pAlloc != NULL)
|
||||||
|
{
|
||||||
|
delete sm_pAlloc;
|
||||||
|
sm_pAlloc = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -70,6 +70,10 @@ public:
|
||||||
HRESULT
|
HRESULT
|
||||||
StaticInitialize(VOID);
|
StaticInitialize(VOID);
|
||||||
|
|
||||||
|
static
|
||||||
|
void
|
||||||
|
StaticTerminate(VOID);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
REQUEST_NOTIFICATION_STATUS
|
REQUEST_NOTIFICATION_STATUS
|
||||||
ServerShutdownMessage() const;
|
ServerShutdownMessage() const;
|
||||||
|
|
|
||||||
|
|
@ -260,6 +260,8 @@ BOOL APIENTRY DllMain(HMODULE hModule,
|
||||||
break;
|
break;
|
||||||
case DLL_PROCESS_DETACH:
|
case DLL_PROCESS_DETACH:
|
||||||
g_fProcessDetach = TRUE;
|
g_fProcessDetach = TRUE;
|
||||||
|
FORWARDING_HANDLER::StaticTerminate();
|
||||||
|
ALLOC_CACHE_HANDLER::StaticTerminate();
|
||||||
DebugStop();
|
DebugStop();
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
|
|
@ -76,6 +76,7 @@ private:
|
||||||
mutable LONG _cRefs;
|
mutable LONG _cRefs;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class ENVIRONMENT_VAR_HASH : public HASH_TABLE<ENVIRONMENT_VAR_ENTRY, PWSTR>
|
class ENVIRONMENT_VAR_HASH : public HASH_TABLE<ENVIRONMENT_VAR_ENTRY, PWSTR>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
@ -129,3 +130,12 @@ private:
|
||||||
ENVIRONMENT_VAR_HASH(const ENVIRONMENT_VAR_HASH &);
|
ENVIRONMENT_VAR_HASH(const ENVIRONMENT_VAR_HASH &);
|
||||||
void operator=(const ENVIRONMENT_VAR_HASH &);
|
void operator=(const ENVIRONMENT_VAR_HASH &);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct ENVIRONMENT_VAR_HASH_DELETER
|
||||||
|
{
|
||||||
|
void operator ()(ENVIRONMENT_VAR_HASH* hashTable) const
|
||||||
|
{
|
||||||
|
hashTable->Clear();
|
||||||
|
delete hashTable;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
|
||||||
|
|
@ -341,7 +341,7 @@ namespace Microsoft.AspNetCore.Server.IntegrationTesting.IIS
|
||||||
throw new InvalidOperationException("Site not stopped yet");
|
throw new InvalidOperationException("Site not stopped yet");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (appPool.WorkerProcesses.Any(wp => wp.State == WorkerProcessState.Running ||
|
if (appPool.WorkerProcesses != null && appPool.WorkerProcesses.Any(wp => wp.State == WorkerProcessState.Running ||
|
||||||
wp.State == WorkerProcessState.Stopping))
|
wp.State == WorkerProcessState.Stopping))
|
||||||
{
|
{
|
||||||
throw new InvalidOperationException("WorkerProcess not stopped yet");
|
throw new InvalidOperationException("WorkerProcess not stopped yet");
|
||||||
|
|
|
||||||
|
|
@ -100,7 +100,8 @@ namespace Microsoft.AspNetCore.Server.IntegrationTesting.IIS
|
||||||
private void AddWebConfigEnvironmentVariables(XElement element, string contentRoot)
|
private void AddWebConfigEnvironmentVariables(XElement element, string contentRoot)
|
||||||
{
|
{
|
||||||
var environmentVariables = element
|
var environmentVariables = element
|
||||||
.RequiredElement("system.webServer")
|
.Descendants("system.webServer")
|
||||||
|
.Single()
|
||||||
.RequiredElement("aspNetCore")
|
.RequiredElement("aspNetCore")
|
||||||
.GetOrAdd("environmentVariables");
|
.GetOrAdd("environmentVariables");
|
||||||
|
|
||||||
|
|
@ -114,7 +115,8 @@ namespace Microsoft.AspNetCore.Server.IntegrationTesting.IIS
|
||||||
private void AddHandlerSettings(XElement element, string contentRoot)
|
private void AddHandlerSettings(XElement element, string contentRoot)
|
||||||
{
|
{
|
||||||
var handlerSettings = element
|
var handlerSettings = element
|
||||||
.RequiredElement("system.webServer")
|
.Descendants("system.webServer")
|
||||||
|
.Single()
|
||||||
.RequiredElement("aspNetCore")
|
.RequiredElement("aspNetCore")
|
||||||
.GetOrAdd("handlerSettings");
|
.GetOrAdd("handlerSettings");
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
|
using System.Linq;
|
||||||
using System.Xml.Linq;
|
using System.Xml.Linq;
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Server.IntegrationTesting.IIS
|
namespace Microsoft.AspNetCore.Server.IntegrationTesting.IIS
|
||||||
|
|
@ -12,7 +13,8 @@ namespace Microsoft.AspNetCore.Server.IntegrationTesting.IIS
|
||||||
{
|
{
|
||||||
return (element, _) => {
|
return (element, _) => {
|
||||||
element
|
element
|
||||||
.GetOrAdd("system.webServer")
|
.Descendants("system.webServer")
|
||||||
|
.Single()
|
||||||
.GetOrAdd("aspNetCore")
|
.GetOrAdd("aspNetCore")
|
||||||
.SetAttributeValue(key, value);
|
.SetAttributeValue(key, value);
|
||||||
};
|
};
|
||||||
|
|
@ -23,7 +25,8 @@ namespace Microsoft.AspNetCore.Server.IntegrationTesting.IIS
|
||||||
return (element, _) =>
|
return (element, _) =>
|
||||||
{
|
{
|
||||||
element
|
element
|
||||||
.GetOrAdd("system.webServer")
|
.Descendants("system.webServer")
|
||||||
|
.Single()
|
||||||
.GetOrAdd("handlers")
|
.GetOrAdd("handlers")
|
||||||
.GetOrAdd("add")
|
.GetOrAdd("add")
|
||||||
.SetAttributeValue(key, value);
|
.SetAttributeValue(key, value);
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Xml.Linq;
|
using System.Xml.Linq;
|
||||||
using Microsoft.AspNetCore.Server.IIS.FunctionalTests.Utilities;
|
using Microsoft.AspNetCore.Server.IIS.FunctionalTests.Utilities;
|
||||||
|
|
@ -78,7 +79,8 @@ namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests
|
||||||
var webConfigLocation = GetWebConfigLocation(directory);
|
var webConfigLocation = GetWebConfigLocation(directory);
|
||||||
XDocument webConfig = XDocument.Load(webConfigLocation);
|
XDocument webConfig = XDocument.Load(webConfigLocation);
|
||||||
webConfig.Root
|
webConfig.Root
|
||||||
.GetOrAdd("system.webServer")
|
.Descendants("system.webServer")
|
||||||
|
.Single()
|
||||||
.GetOrAdd("aspNetCore")
|
.GetOrAdd("aspNetCore")
|
||||||
.SetAttributeValue("hostingModel", model.ToString());
|
.SetAttributeValue("hostingModel", model.ToString());
|
||||||
webConfig.Save(webConfigLocation);
|
webConfig.Save(webConfigLocation);
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,96 @@
|
||||||
|
param($Mode)
|
||||||
|
|
||||||
|
function Setup-appverif($application)
|
||||||
|
{
|
||||||
|
appverif.exe -enable Exceptions Handles Heaps Leak Locks Memory Threadpool TLS SRWLock -for $application
|
||||||
|
$onlyLog = 0x181;
|
||||||
|
$codes = @(
|
||||||
|
# Exceptions
|
||||||
|
0x650,
|
||||||
|
# Handles
|
||||||
|
0x300, 0x301, 0x302, 0x303, 0x304, 0x305,
|
||||||
|
# Heaps
|
||||||
|
0x001, 0x002, 0x003, 0x004, 0x005, 0x006, 0x007, 0x008, 0x009, 0x00A, 0x00B, 0x00C, 0x00D, 0x00E, 0x00F, 0x010, 0x011, 0x012, 0x013, 0x014,
|
||||||
|
# Leak
|
||||||
|
0x900, 0x901, 0x902, 0x903, 0x904, 0x905, 0x906,
|
||||||
|
# Locks
|
||||||
|
0x200, 0x201, 0x202, 0x203, 0x204, 0x205, 0x206, 0x207, 0x208, 0x209, 0x210, 0x211, 0x212, 0x213, 0x214, 0x215,
|
||||||
|
# Memory
|
||||||
|
0x600, 0x601, 0x602, 0x603, 0x604, 0x605, 0x606, 0x607, 0x608, 0x609, 0x60A, 0x60B, 0x60C, 0x60D, 0x60E, 0x60F, 0x610, 0x612, 0x613, 0x614, 0x615, 0x616, 0x617, 0x618, 0x619, 0x61A, 0x61B, 0x61C, 0x61D, 0x61E,
|
||||||
|
# SRWLock
|
||||||
|
0x250, 0x251, 0x252, 0x253, 0x254, 0x255, 0x256, 0x257,
|
||||||
|
# TSL
|
||||||
|
0x350, 0x351, 0x352,
|
||||||
|
# ThreadPool
|
||||||
|
0x700, 0x701, 0x702, 0x703, 0x704, 0x705, 0x706, 0x707, 0x708, 0x709, 0x70A, 0x70B, 0x70C, 0x70D
|
||||||
|
);
|
||||||
|
appverif.exe -configure $codes -for $application -with ErrorReport=$onlyLog
|
||||||
|
}
|
||||||
|
|
||||||
|
function Shutdown-appverif($application)
|
||||||
|
{
|
||||||
|
appverif.exe -export log -for $application -with To=$LogsFolder\$application.xml Log=0
|
||||||
|
appverif.exe -disable * -for $application
|
||||||
|
}
|
||||||
|
|
||||||
|
$DumpFolder = "$PSScriptRoot\..\artifacts\dumps"
|
||||||
|
if (!(Test-Path $DumpFolder))
|
||||||
|
{
|
||||||
|
New-Item $DumpFolder -ItemType Directory;
|
||||||
|
}
|
||||||
|
$DumpFolder = Resolve-Path $DumpFolder
|
||||||
|
|
||||||
|
$LogsFolder = "$PSScriptRoot\..\artifacts\logs"
|
||||||
|
if (!(Test-Path $LogsFolder))
|
||||||
|
{
|
||||||
|
New-Item $LogsFolder -ItemType Directory;
|
||||||
|
}
|
||||||
|
$LogsFolder = Resolve-Path $LogsFolder
|
||||||
|
|
||||||
|
$werHive = "HKLM:\SOFTWARE\Microsoft\Windows\Windows Error Reporting";
|
||||||
|
$ldHive = "$werHive\LocalDumps";
|
||||||
|
|
||||||
|
|
||||||
|
$cdb = "c:\Program Files (x86)\Windows Kits\10\Debuggers\x64\cdb.exe"
|
||||||
|
if (!(Test-Path $cdb))
|
||||||
|
{
|
||||||
|
$downloadedFile = [System.IO.Path]::GetTempFileName();
|
||||||
|
$downloadedFile = "$downloadedFile.exe";
|
||||||
|
Invoke-WebRequest -Uri "https://go.microsoft.com/fwlink/p/?linkid=870807" -OutFile $downloadedFile;
|
||||||
|
& $downloadedFile /features OptionId.WindowsDesktopDebuggers /norestart /q;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($Mode -eq "Setup")
|
||||||
|
{
|
||||||
|
#Setup-appverif w3wp.exe
|
||||||
|
#Setup-appverif iisexpress.exe
|
||||||
|
|
||||||
|
if (!(Test-Path $ldHive ))
|
||||||
|
{
|
||||||
|
New-Item -Path $werHive -Name LocalDumps
|
||||||
|
}
|
||||||
|
|
||||||
|
New-ItemProperty $ldHive -Name "DumpFolder" -Value $DumpFolder -PropertyType "ExpandString" -Force;
|
||||||
|
New-ItemProperty $ldHive -Name "DumpCount" -Value 15 -PropertyType "DWORD" -Force;
|
||||||
|
New-ItemProperty $ldHive -Name "DumpType" -Value 2 -PropertyType "DWORD" -Force;
|
||||||
|
|
||||||
|
Restart-Service WerSvc
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($Mode -eq "Shutdown")
|
||||||
|
{
|
||||||
|
Remove-Item $ldHive -Recurse -Force
|
||||||
|
|
||||||
|
#Shutdown-appverif w3wp.exe
|
||||||
|
#Shutdown-appverif iisexpress.exe
|
||||||
|
|
||||||
|
foreach ($dump in (Get-ChildItem -Path $DumpFolder -Filter "*.dmp"))
|
||||||
|
{
|
||||||
|
if (Test-Path $cdb)
|
||||||
|
{
|
||||||
|
& $cdb -z $dump.FullName -y "https://msdl.microsoft.com/download/symbols" -c ".loadby sos coreclr;!sym noisy;.reload /f;.dumpcab -a $($dump.FullName).cab;q;"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Exit 0;
|
||||||
|
|
@ -1,96 +0,0 @@
|
||||||
##########################################################
|
|
||||||
# NOTE:
|
|
||||||
# For running test automation, following prerequisite required:
|
|
||||||
#
|
|
||||||
# 1. On Win7, powershell should be upgraded to 4.0
|
|
||||||
# https://social.technet.microsoft.com/wiki/contents/articles/21016.how-to-install-windows-powershell-4-0.aspx
|
|
||||||
# 2. url-rewrite should be installed
|
|
||||||
# 3. makecert.exe tools should be available
|
|
||||||
##########################################################
|
|
||||||
|
|
||||||
# Replace aspnetcore.dll with the latest version
|
|
||||||
copy C:\gitroot\AspNetCoreModule\artifacts\build\AspNetCore\bin\Release\x64\aspnetcore.dll "C:\Program Files\IIS Express"
|
|
||||||
copy C:\gitroot\AspNetCoreModule\artifacts\build\AspNetCore\bin\Release\x64\aspnetcore.pdb "C:\Program Files\IIS Express"
|
|
||||||
|
|
||||||
|
|
||||||
# Enable appverif for IISExpress.exe
|
|
||||||
appverif /verify iisexpress.exe
|
|
||||||
|
|
||||||
# Set the AspNetCoreModuleTest environment variable with the following command
|
|
||||||
cd C:\gitroot\AspNetCoreModule\test\AspNetCoreModule.Test
|
|
||||||
dotnet restore
|
|
||||||
dotnet build
|
|
||||||
$aspNetCoreModuleTest="C:\gitroot\AspNetCoreModule\test\AspNetCoreModule.Test\bin\Debug\net46"
|
|
||||||
|
|
||||||
if (Test-Path (Join-Path $aspNetCoreModuleTest aspnetcoremodule.test.dll))
|
|
||||||
{
|
|
||||||
# Clean up applicationhost.config of IISExpress
|
|
||||||
del $env:userprofile\documents\iisexpress\config\applicationhost.config -Confirm:$false -Force
|
|
||||||
Start-Process "C:\Program Files\IIS Express\iisexpress.exe"
|
|
||||||
Sleep 3
|
|
||||||
Stop-Process -Name iisexpress
|
|
||||||
|
|
||||||
# Create sites
|
|
||||||
(1..50) | foreach { md ("C:\inetpub\wwwroot\AspnetCoreHandler_HelloWeb\foo" + $_ ) 2> out-null }
|
|
||||||
(1..50) | foreach { copy C:\gitroot\AspNetCoreModule\test\StressTestWebRoot\web.config ("C:\inetpub\wwwroot\AspnetCoreHandler_HelloWeb\foo" + $_ ) }
|
|
||||||
(1..50) | foreach {
|
|
||||||
$path = ("C:\inetpub\wwwroot\AspnetCoreHandler_HelloWeb\foo" + $_ )
|
|
||||||
$appPath = "/foo"+$_
|
|
||||||
& "C:\Program Files\IIS Express\appcmd.exe" add app /site.name:"WebSite1" /path:$appPath /physicalPath:$path
|
|
||||||
}
|
|
||||||
|
|
||||||
<#(1..50) | foreach {
|
|
||||||
$configpath = ("WebSite1/foo" + $_)
|
|
||||||
$value = "C:\inetpub\wwwroot\AspnetCoreHandler_HelloWeb\foo" + $_ + ".exe"
|
|
||||||
& "C:\Program Files\IIS Express\appcmd.exe" set config $configpath -section:system.webServer/aspNetCore /processPath:$value
|
|
||||||
}
|
|
||||||
(1..50) | foreach { copy C:\inetpub\wwwroot\AspnetCoreHandler_HelloWeb\foo.exe ("C:\inetpub\wwwroot\AspnetCoreHandler_HelloWeb\foo" + $_ +".exe") }
|
|
||||||
(1..50) | foreach {
|
|
||||||
$configpath = ("WebSite1/foo" + $_)
|
|
||||||
$value = "%AspNetCoreModuleTest%\AspnetCoreApp_HelloWeb\foo" + $_ + ".exe"
|
|
||||||
& "C:\Program Files\IIS Express\appcmd.exe" set config $configpath -section:system.webServer/aspNetCore /processPath:$value /apphostconfig:%AspNetCoreModuleTest%\config\applicationhost.config
|
|
||||||
|
|
||||||
$value = "%AspNetCoreModuleTest%\AspnetCoreApp_HelloWeb\AutobahnTestServer.dll"
|
|
||||||
& "C:\Program Files\IIS Express\appcmd.exe" set config $configpath -section:system.webServer/aspNetCore /arguments:$value /apphostconfig:%AspNetCoreModuleTest%\config\applicationhost.config
|
|
||||||
}
|
|
||||||
#>
|
|
||||||
|
|
||||||
# Start IISExpress with running the below command
|
|
||||||
&"C:\Program Files\Debugging Tools for Windows (x64)\windbg.exe" /g /G "C:\Program Files\IIS Express\iisexpress.exe"
|
|
||||||
|
|
||||||
|
|
||||||
# 6. Start stress testing
|
|
||||||
(1..10000) | foreach {
|
|
||||||
if ($_ % 2 -eq 0)
|
|
||||||
{
|
|
||||||
("Recycling backend only")
|
|
||||||
stop-process -name dotnet
|
|
||||||
(1..50) | foreach { del ("C:\inetpub\wwwroot\AspnetCoreHandler_HelloWeb\foo" + $_ + "\app_offline.htm") -confirm:$false -Force 2> out-null }
|
|
||||||
stop-process -name dotnet
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
("Recycling backedn + enabling appoffline ....")
|
|
||||||
stop-process -name dotnet
|
|
||||||
(1..50) | foreach { copy C:\gitroot\AspNetCoreModule\test\StressTestWebRoot\app_offline.htm ("C:\inetpub\wwwroot\AspnetCoreHandler_HelloWeb\foo" + $_ ) }
|
|
||||||
}
|
|
||||||
Sleep 1
|
|
||||||
|
|
||||||
(1..10) | foreach {
|
|
||||||
(1..50) | foreach {
|
|
||||||
invoke-webrequest ("http://localhost:8080/foo"+$_) > $null
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Stress test idea
|
|
||||||
# 1. Use Web Stress Tester
|
|
||||||
# 2. Run stop-process -name dotnet
|
|
||||||
# 3. Hit Q command to IISExpress console window
|
|
||||||
# 4. Use app_offline.htm
|
|
||||||
# 5. Save dummy web.config
|
|
||||||
}
|
|
||||||
|
|
||||||
// bp aspnetcore!FORWARDING_HANDLER::FORWARDING_HANDLER
|
|
||||||
// bp aspnetcore!FORWARDING_HANDLER::~FORWARDING_HANDLER
|
|
||||||
Loading…
Reference in New Issue