Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/dotnet/runtime.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Firszov <Anton.Firszov@microsoft.com>2021-11-30 20:16:30 +0300
committerGitHub <noreply@github.com>2021-11-30 20:16:30 +0300
commit85642f8147d9e2ba860c21baea25cbb4f12e665e (patch)
treec9036fed49e49f112185c3b51f03e8764f0f2459
parent439ffd2434ac97ae32f42d3dc035cceb6d4d60cc (diff)
Build HttpStress and SslStress with live-built runtime using current TFM (#61689)
This PR changes both local (non-containerized) and containerized stress builds to build against the live-built runtime with the help of targetingpacks.targets.
-rw-r--r--.gitignore4
-rwxr-xr-xeng/docker/build-docker-sdk.ps140
-rwxr-xr-xeng/docker/build-docker-sdk.sh11
-rw-r--r--eng/docker/libraries-sdk-aspnetcore.linux.Dockerfile36
-rw-r--r--eng/docker/libraries-sdk-aspnetcore.windows.Dockerfile26
-rw-r--r--eng/docker/libraries-sdk.linux.Dockerfile48
-rw-r--r--eng/docker/libraries-sdk.windows.Dockerfile28
-rw-r--r--eng/pipelines/libraries/stress/http.yml3
-rw-r--r--src/libraries/System.Net.Http/tests/StressTests/HttpStress/Directory.Build.props18
-rw-r--r--src/libraries/System.Net.Http/tests/StressTests/HttpStress/Directory.Build.targets12
-rw-r--r--src/libraries/System.Net.Http/tests/StressTests/HttpStress/Dockerfile14
-rw-r--r--src/libraries/System.Net.Http/tests/StressTests/HttpStress/HttpStress.csproj19
-rw-r--r--src/libraries/System.Net.Http/tests/StressTests/HttpStress/Readme.md48
-rw-r--r--src/libraries/System.Net.Http/tests/StressTests/HttpStress/StressServer.cs9
-rw-r--r--src/libraries/System.Net.Http/tests/StressTests/HttpStress/build-local.ps163
-rwxr-xr-xsrc/libraries/System.Net.Http/tests/StressTests/HttpStress/build-local.sh67
-rwxr-xr-x[-rw-r--r--]src/libraries/System.Net.Http/tests/StressTests/HttpStress/load-corefx-testhost.ps10
-rwxr-xr-xsrc/libraries/System.Net.Http/tests/StressTests/HttpStress/run-docker-compose.sh12
-rw-r--r--src/libraries/System.Net.Http/tests/StressTests/HttpStress/windows.Dockerfile15
-rw-r--r--src/libraries/System.Net.Security/tests/StressTests/SslStress/Build-Local.ps147
-rw-r--r--src/libraries/System.Net.Security/tests/StressTests/SslStress/Directory.Build.props18
-rw-r--r--src/libraries/System.Net.Security/tests/StressTests/SslStress/Directory.Build.targets12
-rw-r--r--src/libraries/System.Net.Security/tests/StressTests/SslStress/Dockerfile15
-rw-r--r--src/libraries/System.Net.Security/tests/StressTests/SslStress/Readme.md34
-rw-r--r--src/libraries/System.Net.Security/tests/StressTests/SslStress/SslStress.csproj4
-rwxr-xr-xsrc/libraries/System.Net.Security/tests/StressTests/SslStress/build-local.sh49
-rwxr-xr-xsrc/libraries/System.Net.Security/tests/StressTests/SslStress/run-docker-compose.ps110
-rwxr-xr-xsrc/libraries/System.Net.Security/tests/StressTests/SslStress/run-docker-compose.sh12
-rw-r--r--src/libraries/System.Net.Security/tests/StressTests/SslStress/windows.Dockerfile15
29 files changed, 492 insertions, 197 deletions
diff --git a/.gitignore b/.gitignore
index dbdbce21b05..833551119f2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -354,3 +354,7 @@ src/coreclr/System.Private.CoreLib/common
!src/coreclr/inc/obj/
!src/coreclr/vm/.vscode/
!src/coreclr/vm/.vscode/c_cpp_properties.json
+
+# Temporary artifacts from local libraries stress builds
+.dotnet-daily/
+run-stress-* \ No newline at end of file
diff --git a/eng/docker/build-docker-sdk.ps1 b/eng/docker/build-docker-sdk.ps1
index e3fbaef77d1..570d4c5ba73 100755
--- a/eng/docker/build-docker-sdk.ps1
+++ b/eng/docker/build-docker-sdk.ps1
@@ -6,21 +6,16 @@
Param(
[string][Alias('t')]$imageName = "dotnet-sdk-libs-current",
[string][Alias('c')]$configuration = "Release",
- [switch][Alias('w')]$buildWindowsContainers,
- [switch][Alias('pa')]$privateAspNetCore
+ [switch][Alias('w')]$buildWindowsContainers
)
+$dotNetVersion="7.0"
$ErrorActionPreference = "Stop"
$REPO_ROOT_DIR=$(git -C "$PSScriptRoot" rev-parse --show-toplevel)
$dockerFilePrefix="$PSScriptRoot/libraries-sdk"
-if ($privateAspNetCore)
-{
- $dockerFilePrefix="$PSScriptRoot/libraries-sdk-aspnetcore"
-}
-
if ($buildWindowsContainers)
{
# Due to size concerns, we don't currently do docker builds on windows.
@@ -34,12 +29,39 @@ if ($buildWindowsContainers)
}
$dockerFile="$dockerFilePrefix.windows.Dockerfile"
+
+ # Collect the following artifacts to folder, that will be used as build context for the container,
+ # so projects can build and test against the live-built runtime:
+ # 1. Reference assembly pack (microsoft.netcore.app.ref)
+ # 2. Runtime pack (microsoft.netcore.app.runtime.win-x64)
+ # 3. targetingpacks.targets, so stress test builds can target the live-built runtime instead of the one in the pre-installed SDK
+ # 4. testhost
+ $binArtifacts = "$REPO_ROOT_DIR\artifacts\bin"
+ $dockerContext = "$REPO_ROOT_DIR\artifacts\docker-context"
+ if (Test-Path $dockerContext) {
+ Remove-Item -Recurse -Force $dockerContext
+ }
+
+ Copy-Item -Recurse -Path $binArtifacts\microsoft.netcore.app.ref `
+ -Destination $dockerContext\microsoft.netcore.app.ref
+ Copy-Item -Recurse -Path $binArtifacts\microsoft.netcore.app.runtime.win-x64 `
+ -Destination $dockerContext\microsoft.netcore.app.runtime.win-x64
+ Copy-Item -Recurse -Path $binArtifacts\testhost `
+ -Destination $dockerContext\testhost
+ Copy-Item -Recurse -Path $REPO_ROOT_DIR\eng\targetingpacks.targets `
+ -Destination $dockerContext\targetingpacks.targets
+
+ # In case of non-CI builds, testhost may already contain Microsoft.AspNetCore.App (see build-local.ps1 in HttpStress):
+ $testHostAspNetCorePath="$dockerContext\testhost\net$dotNetVersion-windows-$configuration-x64/shared/Microsoft.AspNetCore.App"
+ if (Test-Path $testHostAspNetCorePath) {
+ Remove-Item -Recurse -Force $testHostAspNetCorePath
+ }
+
docker build --tag $imageName `
--build-arg CONFIGURATION=$configuration `
- --build-arg TESTHOST_LOCATION=. `
--file $dockerFile `
- "$REPO_ROOT_DIR/artifacts/bin/testhost"
+ $dockerContext
}
else
{
diff --git a/eng/docker/build-docker-sdk.sh b/eng/docker/build-docker-sdk.sh
index c2cdb81efae..92fc632ec05 100755
--- a/eng/docker/build-docker-sdk.sh
+++ b/eng/docker/build-docker-sdk.sh
@@ -23,7 +23,6 @@ scriptroot="$( cd -P "$( dirname "$source" )" && pwd )"
imagename="dotnet-sdk-libs-current"
configuration="Release"
-privateaspnetcore=0
while [[ $# > 0 ]]; do
opt="$(echo "${1/#--/-}" | tr "[:upper:]" "[:lower:]")"
@@ -36,10 +35,6 @@ while [[ $# > 0 ]]; do
configuration=$2
shift 2
;;
- -privateaspnetcore|-pa)
- privateaspnetcore=1
- shift 1
- ;;
*)
shift 1
;;
@@ -49,13 +44,9 @@ done
repo_root=$(git rev-parse --show-toplevel)
docker_file="$scriptroot/libraries-sdk.linux.Dockerfile"
-if [[ $privateaspnetcore -eq 1 ]]; then
- docker_file="$scriptroot/libraries-sdk-aspnetcore.linux.Dockerfile"
-fi
-
docker build --tag $imagename \
--build-arg CONFIGURATION=$configuration \
--file $docker_file \
$repo_root
-exit $?
+exit $? \ No newline at end of file
diff --git a/eng/docker/libraries-sdk-aspnetcore.linux.Dockerfile b/eng/docker/libraries-sdk-aspnetcore.linux.Dockerfile
deleted file mode 100644
index 184ffdb8bcc..00000000000
--- a/eng/docker/libraries-sdk-aspnetcore.linux.Dockerfile
+++ /dev/null
@@ -1,36 +0,0 @@
-# Builds and copies library artifacts into target dotnet sdk image
-ARG BUILD_BASE_IMAGE=mcr.microsoft.com/dotnet-buildtools/prereqs:centos-7-f39df28-20191023143754
-ARG SDK_BASE_IMAGE=mcr.microsoft.com/dotnet/nightly/sdk:6.0-bullseye-slim
-
-FROM $BUILD_BASE_IMAGE as corefxbuild
-
-WORKDIR /repo
-COPY . .
-
-ARG CONFIGURATION=Release
-RUN ./src/coreclr/build.sh -release -skiptests -clang9 && \
- ./libraries.sh -c $CONFIGURATION -runtimeconfiguration release
-
-FROM $SDK_BASE_IMAGE as target
-
-ARG TESTHOST_LOCATION=/repo/artifacts/bin/testhost
-ARG TFM=net7.0
-ARG OS=Linux
-ARG ARCH=x64
-ARG CONFIGURATION=Release
-
-ARG COREFX_SHARED_FRAMEWORK_NAME=Microsoft.NETCore.App
-ARG ASPNETCORE_SHARED_NAME=Microsoft.AspNetCore.App
-ARG SOURCE_COREFX_VERSION=7.0.0
-ARG TARGET_SHARED_FRAMEWORK=/usr/share/dotnet/shared
-ARG TARGET_COREFX_VERSION=$DOTNET_VERSION
-
-COPY --from=corefxbuild \
- $TESTHOST_LOCATION/$TFM-$OS-$CONFIGURATION-$ARCH/shared/$COREFX_SHARED_FRAMEWORK_NAME/$SOURCE_COREFX_VERSION/* \
- $TARGET_SHARED_FRAMEWORK/$COREFX_SHARED_FRAMEWORK_NAME/$TARGET_COREFX_VERSION/
-COPY --from=corefxbuild \
- $TESTHOST_LOCATION/$TFM-$OS-$CONFIGURATION-$ARCH/shared/$COREFX_SHARED_FRAMEWORK_NAME/$SOURCE_COREFX_VERSION/* \
- $TARGET_SHARED_FRAMEWORK/$COREFX_SHARED_FRAMEWORK_NAME/$SOURCE_COREFX_VERSION/
-COPY --from=corefxbuild \
- $TESTHOST_LOCATION/$TFM-$OS-$CONFIGURATION-$ARCH/shared/$ASPNETCORE_SHARED_NAME/$SOURCE_COREFX_VERSION/* \
- $TARGET_SHARED_FRAMEWORK/$ASPNETCORE_SHARED_NAME/$TARGET_COREFX_VERSION/ \ No newline at end of file
diff --git a/eng/docker/libraries-sdk-aspnetcore.windows.Dockerfile b/eng/docker/libraries-sdk-aspnetcore.windows.Dockerfile
deleted file mode 100644
index 75cc112b6ac..00000000000
--- a/eng/docker/libraries-sdk-aspnetcore.windows.Dockerfile
+++ /dev/null
@@ -1,26 +0,0 @@
-# escape=`
-# Simple Dockerfile which copies library build artifacts into target dotnet sdk image
-ARG SDK_BASE_IMAGE=mcr.microsoft.com/dotnet/nightly/sdk:6.0-nanoserver-1809
-FROM $SDK_BASE_IMAGE as target
-
-ARG TESTHOST_LOCATION=".\\artifacts\\bin\\testhost"
-ARG TFM=net7.0
-ARG OS=windows
-ARG ARCH=x64
-ARG CONFIGURATION=Release
-
-ARG COREFX_SHARED_FRAMEWORK_NAME=Microsoft.NETCore.App
-ARG ASPNETCORE_SHARED_NAME=Microsoft.AspNetCore.App
-ARG SOURCE_COREFX_VERSION=7.0.0
-ARG TARGET_SHARED_FRAMEWORK="C:\\Program Files\\dotnet\\shared"
-ARG TARGET_COREFX_VERSION=$DOTNET_VERSION
-
-COPY `
- $TESTHOST_LOCATION\$TFM-$OS-$CONFIGURATION-$ARCH\shared\$COREFX_SHARED_FRAMEWORK_NAME\$SOURCE_COREFX_VERSION\ `
- $TARGET_SHARED_FRAMEWORK\$COREFX_SHARED_FRAMEWORK_NAME\$TARGET_COREFX_VERSION\
-COPY `
- $TESTHOST_LOCATION\$TFM-$OS-$CONFIGURATION-$ARCH\shared\$COREFX_SHARED_FRAMEWORK_NAME\$SOURCE_COREFX_VERSION\ `
- $TARGET_SHARED_FRAMEWORK\$COREFX_SHARED_FRAMEWORK_NAME\$SOURCE_COREFX_VERSION\
-COPY `
- $TESTHOST_LOCATION\$TFM-$OS-$CONFIGURATION-$ARCH\shared\$ASPNETCORE_SHARED_NAME\$SOURCE_COREFX_VERSION\ `
- $TARGET_SHARED_FRAMEWORK\$ASPNETCORE_SHARED_NAME\$TARGET_COREFX_VERSION\
diff --git a/eng/docker/libraries-sdk.linux.Dockerfile b/eng/docker/libraries-sdk.linux.Dockerfile
index 6f79a9c39ee..9d7b339383a 100644
--- a/eng/docker/libraries-sdk.linux.Dockerfile
+++ b/eng/docker/libraries-sdk.linux.Dockerfile
@@ -4,25 +4,47 @@ ARG SDK_BASE_IMAGE=mcr.microsoft.com/dotnet/nightly/sdk:6.0-bullseye-slim
FROM $BUILD_BASE_IMAGE as corefxbuild
+ARG CONFIGURATION=Release
+
WORKDIR /repo
COPY . .
-
-ARG CONFIGURATION=Release
-RUN ./build.sh -ci -subset clr+libs -runtimeconfiguration release -c $CONFIGURATION
+RUN ./build.sh clr+libs -runtimeconfiguration Release -configuration $CONFIGURATION -ci
FROM $SDK_BASE_IMAGE as target
-ARG TESTHOST_LOCATION=/repo/artifacts/bin/testhost
-ARG TFM=net7.0
-ARG OS=Linux
-ARG ARCH=x64
+ARG VERSION=7.0
ARG CONFIGURATION=Release
+ENV _DOTNET_INSTALL_CHANNEL="$VERSION.1xx"
+
+# Install latest daily SDK:
+RUN wget https://dot.net/v1/dotnet-install.sh
+RUN bash ./dotnet-install.sh --channel $_DOTNET_INSTALL_CHANNEL --quality daily --install-dir /usr/share/dotnet
+
+# Collect the following artifacts under /live-runtime-artifacts,
+# so projects can build and test against the live-built runtime:
+# 1. Reference assembly pack (microsoft.netcore.app.ref)
+# 2. Runtime pack (microsoft.netcore.app.runtime.linux-x64)
+# 3. targetingpacks.targets, so stress test builds can target the live-built runtime instead of the one in the pre-installed SDK
+# 4. testhost
-ARG COREFX_SHARED_FRAMEWORK_NAME=Microsoft.NETCore.App
-ARG SOURCE_COREFX_VERSION=7.0.0
-ARG TARGET_SHARED_FRAMEWORK=/usr/share/dotnet/shared
-ARG TARGET_COREFX_VERSION=$DOTNET_VERSION
+COPY --from=corefxbuild \
+ /repo/artifacts/bin/microsoft.netcore.app.ref \
+ /live-runtime-artifacts/microsoft.netcore.app.ref
+
+COPY --from=corefxbuild \
+ /repo/artifacts/bin/microsoft.netcore.app.runtime.linux-x64 \
+ /live-runtime-artifacts/microsoft.netcore.app.runtime.linux-x64
COPY --from=corefxbuild \
- $TESTHOST_LOCATION/$TFM-$OS-$CONFIGURATION-$ARCH/shared/$COREFX_SHARED_FRAMEWORK_NAME/$SOURCE_COREFX_VERSION/* \
- $TARGET_SHARED_FRAMEWORK/$COREFX_SHARED_FRAMEWORK_NAME/$TARGET_COREFX_VERSION/ \ No newline at end of file
+ /repo/eng/targetingpacks.targets \
+ /live-runtime-artifacts/targetingpacks.targets
+
+COPY --from=corefxbuild \
+ /repo/artifacts/bin/testhost \
+ /live-runtime-artifacts/testhost
+
+# Add AspNetCore bits to testhost:
+ENV _ASPNETCORE_SOURCE="/usr/share/dotnet/shared/Microsoft.AspNetCore.App/$VERSION*"
+ENV _ASPNETCORE_DEST="/live-runtime-artifacts/testhost/net$VERSION-Linux-$CONFIGURATION-x64/shared/Microsoft.AspNetCore.App"
+RUN mkdir -p $_ASPNETCORE_DEST
+RUN cp -r $_ASPNETCORE_SOURCE $_ASPNETCORE_DEST \ No newline at end of file
diff --git a/eng/docker/libraries-sdk.windows.Dockerfile b/eng/docker/libraries-sdk.windows.Dockerfile
index 6a7b7764185..c3be811a2ca 100644
--- a/eng/docker/libraries-sdk.windows.Dockerfile
+++ b/eng/docker/libraries-sdk.windows.Dockerfile
@@ -3,17 +3,23 @@
ARG SDK_BASE_IMAGE=mcr.microsoft.com/dotnet/nightly/sdk:6.0-nanoserver-1809
FROM $SDK_BASE_IMAGE as target
-ARG TESTHOST_LOCATION=".\\artifacts\\bin\\testhost"
-ARG TFM=net7.0
-ARG OS=windows
-ARG ARCH=x64
+SHELL ["pwsh", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]
+
+ARG VERSION=7.0
+ENV _DOTNET_INSTALL_CHANNEL="$VERSION.1xx"
ARG CONFIGURATION=Release
-ARG COREFX_SHARED_FRAMEWORK_NAME=Microsoft.NETCore.App
-ARG SOURCE_COREFX_VERSION=7.0.0
-ARG TARGET_SHARED_FRAMEWORK="C:\\Program Files\\dotnet\\shared"
-ARG TARGET_COREFX_VERSION=$DOTNET_VERSION
+USER ContainerAdministrator
+
+RUN Invoke-WebRequest -Uri https://dot.net/v1/dotnet-install.ps1 -OutFile .\dotnet-install.ps1
+RUN & .\dotnet-install.ps1 -Channel $env:_DOTNET_INSTALL_CHANNEL -Quality daily -InstallDir 'C:/Program Files/dotnet'
+
+USER ContainerUser
+
+COPY . /live-runtime-artifacts
-COPY `
- $TESTHOST_LOCATION\$TFM-$OS-$CONFIGURATION-$ARCH\shared\$COREFX_SHARED_FRAMEWORK_NAME\$SOURCE_COREFX_VERSION\ `
- $TARGET_SHARED_FRAMEWORK\$COREFX_SHARED_FRAMEWORK_NAME\$TARGET_COREFX_VERSION\
+# Add AspNetCore bits to testhost:
+ENV _ASPNETCORE_SOURCE="C:/Program Files/dotnet/shared/Microsoft.AspNetCore.App/$VERSION*"
+ENV _ASPNETCORE_DEST="C:/live-runtime-artifacts/testhost/net$VERSION-windows-$CONFIGURATION-x64/shared/Microsoft.AspNetCore.App"
+RUN & New-Item -ItemType Directory -Path $env:_ASPNETCORE_DEST
+RUN Copy-Item -Recurse -Path $env:_ASPNETCORE_SOURCE -Destination $env:_ASPNETCORE_DEST \ No newline at end of file
diff --git a/eng/pipelines/libraries/stress/http.yml b/eng/pipelines/libraries/stress/http.yml
index 049c979b5e3..3561011fa62 100644
--- a/eng/pipelines/libraries/stress/http.yml
+++ b/eng/pipelines/libraries/stress/http.yml
@@ -57,6 +57,7 @@ jobs:
export HTTPSTRESS_CLIENT_ARGS="$HTTPSTRESS_CLIENT_ARGS -http 3.0"
export HTTPSTRESS_SERVER_ARGS="$HTTPSTRESS_SERVER_ARGS -http 3.0"
docker-compose up --abort-on-container-exit --no-color
+ timeoutInMinutes: 35 # In case the HTTP/3.0 run hangs, we timeout shortly after the expected 30 minute run
displayName: Run HttpStress - HTTP 3.0
condition: and(eq(variables['buildRuntime.succeeded'], 'true'), eq(variables['buildStress.succeeded'], 'true'))
@@ -149,4 +150,4 @@ jobs:
- powershell: |
Set-NetFirewallProfile -Profile Domain, Public, Private -Enabled True
name: enableFirewall
- displayName: Enable Firewall
+ displayName: Enable Firewall \ No newline at end of file
diff --git a/src/libraries/System.Net.Http/tests/StressTests/HttpStress/Directory.Build.props b/src/libraries/System.Net.Http/tests/StressTests/HttpStress/Directory.Build.props
index 8998bf45467..a1d1b3174a3 100644
--- a/src/libraries/System.Net.Http/tests/StressTests/HttpStress/Directory.Build.props
+++ b/src/libraries/System.Net.Http/tests/StressTests/HttpStress/Directory.Build.props
@@ -1 +1,17 @@
-<Project/>
+<Project>
+ <PropertyGroup>
+ <PackageRid>linux-x64</PackageRid>
+ <PackageRid Condition="$([MSBuild]::IsOSPlatform('WINDOWS'))">win-x64</PackageRid>
+
+ <!-- Stress projects have their own global.json, the directory above that also has it is the repository root. -->
+ <RepositoryRoot>$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory)../, global.json))/</RepositoryRoot>
+
+ <TargetingPacksTargetsLocation Condition="'$(TargetingPacksTargetsLocation)' == ''">$(RepositoryRoot)eng/targetingpacks.targets</TargetingPacksTargetsLocation>
+ <ProductVersion>7.0.0</ProductVersion>
+ <NetCoreAppCurrent>net7.0</NetCoreAppCurrent>
+ <NetCoreAppCurrentVersion>7.0</NetCoreAppCurrentVersion>
+ <MicrosoftNetCoreAppFrameworkName>Microsoft.NETCore.App</MicrosoftNetCoreAppFrameworkName>
+ <MicrosoftNetCoreAppRefPackDir Condition="'$(MicrosoftNetCoreAppRefPackDir)' == ''" >$(RepositoryRoot)artifacts/bin/microsoft.netcore.app.ref/</MicrosoftNetCoreAppRefPackDir>
+ <MicrosoftNetCoreAppRuntimePackDir Condition="'$(MicrosoftNetCoreAppRuntimePackDir)' == ''">$(RepositoryRoot)artifacts/bin/microsoft.netcore.app.runtime.$(PackageRid)/$(Configuration)/</MicrosoftNetCoreAppRuntimePackDir>
+ </PropertyGroup>
+</Project> \ No newline at end of file
diff --git a/src/libraries/System.Net.Http/tests/StressTests/HttpStress/Directory.Build.targets b/src/libraries/System.Net.Http/tests/StressTests/HttpStress/Directory.Build.targets
index 8998bf45467..85e81c58307 100644
--- a/src/libraries/System.Net.Http/tests/StressTests/HttpStress/Directory.Build.targets
+++ b/src/libraries/System.Net.Http/tests/StressTests/HttpStress/Directory.Build.targets
@@ -1 +1,11 @@
-<Project/>
+<Project>
+ <Import Project="$(TargetingPacksTargetsLocation)" />
+
+ <PropertyGroup>
+ <!--
+ Define this here because the SDK resets it
+ unconditionally in Microsoft.NETCoreSdk.BundledVersions.props.
+ -->
+ <NETCoreAppMaximumVersion>7.0</NETCoreAppMaximumVersion>
+ </PropertyGroup>
+</Project> \ No newline at end of file
diff --git a/src/libraries/System.Net.Http/tests/StressTests/HttpStress/Dockerfile b/src/libraries/System.Net.Http/tests/StressTests/HttpStress/Dockerfile
index 089047be696..5dabcafefd6 100644
--- a/src/libraries/System.Net.Http/tests/StressTests/HttpStress/Dockerfile
+++ b/src/libraries/System.Net.Http/tests/StressTests/HttpStress/Dockerfile
@@ -1,9 +1,6 @@
ARG SDK_BASE_IMAGE=mcr.microsoft.com/dotnet/nightly/sdk:6.0-bullseye-slim
FROM $SDK_BASE_IMAGE
-RUN echo "DOTNET_SDK_VERSION="$DOTNET_SDK_VERSION
-RUN echo "DOTNET_VERSION="$DOTNET_VERSION
-
WORKDIR /app
COPY . .
@@ -19,8 +16,13 @@ RUN unzip $PACKAGES_DIR.zip
RUN dpkg -i $PACKAGES_DIR/$MSQUIC_PACKAGE
RUN rm -rf $PACKAGES_DIR*
+ARG VERSION=7.0
ARG CONFIGURATION=Release
-RUN dotnet build -c $CONFIGURATION
+
+RUN dotnet build -c $CONFIGURATION \
+ -p:TargetingPacksTargetsLocation=/live-runtime-artifacts/targetingpacks.targets \
+ -p:MicrosoftNetCoreAppRefPackDir=/live-runtime-artifacts/microsoft.netcore.app.ref/ \
+ -p:MicrosoftNetCoreAppRuntimePackDir=/live-runtime-artifacts/microsoft.netcore.app.runtime.linux-x64/$CONFIGURATION/
# Enable dump collection
ENV COMPlus_DbgEnableMiniDump=1
@@ -29,6 +31,8 @@ ENV COMPlus_DbgMiniDumpName="/share/coredump.%p"
EXPOSE 5001
+ENV VERSION=$VERSION
ENV CONFIGURATION=$CONFIGURATION
ENV HTTPSTRESS_ARGS=''
-CMD dotnet run --no-build -c $CONFIGURATION -- $HTTPSTRESS_ARGS
+CMD /live-runtime-artifacts/testhost/net$VERSION-Linux-$CONFIGURATION-x64/dotnet exec \
+ ./bin/$CONFIGURATION/net$VERSION/HttpStress.dll $HTTPSTRESS_ARGS
diff --git a/src/libraries/System.Net.Http/tests/StressTests/HttpStress/HttpStress.csproj b/src/libraries/System.Net.Http/tests/StressTests/HttpStress/HttpStress.csproj
index 39774f26b23..954019ae5b3 100644
--- a/src/libraries/System.Net.Http/tests/StressTests/HttpStress/HttpStress.csproj
+++ b/src/libraries/System.Net.Http/tests/StressTests/HttpStress/HttpStress.csproj
@@ -1,8 +1,7 @@
-<Project Sdk="Microsoft.NET.Sdk.Web">
-
+<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
- <TargetFramework>net6.0</TargetFramework>
+ <TargetFramework>$(NetCoreAppCurrent)</TargetFramework>
<LangVersion>preview</LangVersion>
<Nullable>enable</Nullable>
<EnablePreviewFeatures>True</EnablePreviewFeatures>
@@ -22,4 +21,16 @@
<PackageReference Include="Microsoft.AspNetCore.Server.Kestrel.Transport.Quic" Version="6.0.0-preview.5.21301.17" />
</ItemGroup>
-</Project>
+ <PropertyGroup>
+ <!-- These may lead to duplicate generated classes with local (non-docker) Linux builds. -->
+ <GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>
+ <GenerateAssemblyFileVersionAttribute>false</GenerateAssemblyFileVersionAttribute>
+ <GenerateAssemblyInformationalVersionAttribute>false</GenerateAssemblyInformationalVersionAttribute>
+ <GenerateAssemblyVersionAttribute>false</GenerateAssemblyVersionAttribute>
+ <GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>
+ <GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
+ <GenerateAssemblyTitleAttribute>false</GenerateAssemblyTitleAttribute>
+ <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
+ <GenerateTargetFrameworkAttribute>false</GenerateTargetFrameworkAttribute>
+ </PropertyGroup>
+</Project> \ No newline at end of file
diff --git a/src/libraries/System.Net.Http/tests/StressTests/HttpStress/Readme.md b/src/libraries/System.Net.Http/tests/StressTests/HttpStress/Readme.md
index ec19d321160..653b96c4169 100644
--- a/src/libraries/System.Net.Http/tests/StressTests/HttpStress/Readme.md
+++ b/src/libraries/System.Net.Http/tests/StressTests/HttpStress/Readme.md
@@ -1,39 +1,47 @@
## HttpStress
-Provides stress testing scenaria for System.Net.Http.HttpClient, with emphasis on the HTTP/2 implementation of SocketsHttpHandler.
+Provides stress testing scenaria for System.Net.Http.HttpClient and the underlying SocketsHttpHandler.
### Running the suite locally
-Using the command line,
+Prerequisite: the runtime and the libraries should be [live-built](https://github.com/dotnet/runtime/tree/main/docs/workflow/building/libraries) with `build.cmd`/`build.sh`.
+
+Use the script `build-local.sh` / `build-local.ps1` to build the stress project against the live-built runtime. This will acquire the latest daily SDK, which is TFM-compatible with the live-built runtime.
+
+```bash
+$ build-local.sh [StressConfiguration] [LibrariesConfiguration]
+```
+
+The build script will also generate the runscript that runs the stress suite using the locally built testhost in the form of `run-stress-<StressConfiguration>-<LirariesConfiguration>.sh`. To run the tests with the script, assuming that both the stress project and the libraries have been built against Release configuration:
```bash
-$ dotnet run -- <stress suite args>
+$ run-stress-Release-Release.sh [stress suite args]
```
To get the full list of available parameters:
```bash
-$ dotnet run -- -help
+$ run-stress-Release-Release.sh -help
```
-### Running with local runtime builds
+### Building and running with Docker
-Note that the stress suite will test the sdk available in the environment,
-that is to say it will not necessarily test the implementation of the local runtime repo.
-To achieve this, we will first need to build a new sdk from source. This can be done [using docker](https://github.com/dotnet/runtime/blob/main/eng/docker/Readme.md).
+A docker image containing the live-built runtime bits and the latest daily SDK is created with the [`build-docker-sdk.sh/ps1` scripts](https://github.com/dotnet/runtime/blob/main/eng/docker/Readme.md).
-### Running using docker-compose
+It's possible to manually `docker build` a docker image containing the stress project based on the docker image created with `build-docker-sdk.sh/ps1`, however the preferred way is to use docker-compose, which can be used to target both linux and windows containers.
-The preferred way of running the stress suite is using docker-compose,
-which can be used to target both linux and windows containers.
Docker and compose-compose are required for this step (both included in [docker for windows](https://docs.docker.com/docker-for-windows/)).
#### Using Linux containers
-From the stress folder on powershell:
+From the stress folder:
```powershell
-PS> .\run-docker-compose.ps1 -b
+PS> .\run-docker-compose.ps1
+```
+
+```bash
+$ ./run-docker-compose.sh
```
This will build libraries and stress suite to a linux docker image and initialize a stress run using docker-compose.
@@ -46,7 +54,7 @@ on how windows containers can be enabled on your machine.
Once ready, simply run:
```powershell
-PS> .\run-docker-compose.ps1 -b -w
+PS> .\run-docker-compose.ps1 -w
```
For more details on how the `run-docker-compose.ps1` script can be used:
@@ -54,3 +62,15 @@ For more details on how the `run-docker-compose.ps1` script can be used:
```powershell
Get-Help .\run-docker-compose.ps1
```
+
+#### Passing arguments to HttpStress
+
+The following will run the stress client and server containers passing the argument `-http 2.0` to both:
+
+```bash
+./run-docker-compose.sh -clientstressargs "-http 2.0" -serverstressargs "-http 2.0"
+```
+
+```powershell
+./run-docker-compose.sh -w -clientStressArgs "-http 2.0" -serverStressArgs "-http 2.0"
+``` \ No newline at end of file
diff --git a/src/libraries/System.Net.Http/tests/StressTests/HttpStress/StressServer.cs b/src/libraries/System.Net.Http/tests/StressTests/HttpStress/StressServer.cs
index c55936e051f..eb3f5db8b4a 100644
--- a/src/libraries/System.Net.Http/tests/StressTests/HttpStress/StressServer.cs
+++ b/src/libraries/System.Net.Http/tests/StressTests/HttpStress/StressServer.cs
@@ -41,6 +41,8 @@ namespace HttpStress
public StressServer(Configuration configuration)
{
+ WorkaroundAssemblyResolutionIssues();
+
ServerUri = configuration.ServerUri;
(string scheme, string hostname, int port) = ParseServerUri(configuration.ServerUri);
IWebHostBuilder host = WebHost.CreateDefaultBuilder();
@@ -315,6 +317,13 @@ namespace HttpStress
});
}
+ private static void WorkaroundAssemblyResolutionIssues()
+ {
+ // For some reason, System.Security.Cryptography.Encoding.dll fails to resolve when being loaded on-demand by AspNetCore.
+ // Enforce early-loading to workaround this issue.
+ _ = new Oid();
+ }
+
private static void AppendChecksumHeader(IHeaderDictionary headers, ulong checksum)
{
headers.Add("crc32", checksum.ToString());
diff --git a/src/libraries/System.Net.Http/tests/StressTests/HttpStress/build-local.ps1 b/src/libraries/System.Net.Http/tests/StressTests/HttpStress/build-local.ps1
new file mode 100644
index 00000000000..077dbdb9225
--- /dev/null
+++ b/src/libraries/System.Net.Http/tests/StressTests/HttpStress/build-local.ps1
@@ -0,0 +1,63 @@
+## This is a helper script for non-containerized local build and test execution.
+## It downloads and uses the daily SDK which contains the compatible AspNetCore bits.
+## Usage:
+## ./build-local.ps1 [StressConfiguration] [LibrariesConfiguration]
+
+$Version="7.0"
+$RepoRoot="$(git rev-parse --show-toplevel)"
+$DailyDotnetRoot= "./.dotnet-daily"
+
+$StressConfiguration = "Release"
+if (-not ([string]::IsNullOrEmpty($args[0]))) {
+ $StressConfiguration = $args[0]
+}
+
+$LibrariesConfiguration = "Release"
+if (-not ([string]::IsNullOrEmpty($args[1]))) {
+ $LibrariesConfiguration = $args[0]
+}
+
+$TestHostRoot="$RepoRoot/artifacts/bin/testhost/net$Version-windows-$LibrariesConfiguration-x64"
+
+Write-Host "StressConfiguration: $StressConfiguration, LibrariesConfiguration: $LibrariesConfiguration, testhost: $TestHostRoot"
+
+if (-not (Test-Path -Path $TestHostRoot)) {
+ Write-Host "Cannot find testhost in: $TestHostRoot"
+ Write-Host "Make sure libraries with the requested configuration are built!"
+ Write-Host "Usage:"
+ Write-Host "./build-local.sh [StressConfiguration] [LibrariesConfiguration]"
+ Write-Host "StressConfiguration and LibrariesConfiguration default to Release!"
+ exit 1
+}
+
+if (-not (Test-Path -Path $DailyDotnetRoot)) {
+ Write-Host "Downloading daily SDK to: $DailyDotnetRoot"
+ New-Item -ItemType Directory -Path $DailyDotnetRoot
+ Invoke-WebRequest -Uri https://dot.net/v1/dotnet-install.ps1 -OutFile "$DailyDotnetRoot\dotnet-install.ps1"
+ & "$DailyDotnetRoot\dotnet-install.ps1" -NoPath -Channel "$Version.1xx" -Quality daily -InstallDir $DailyDotnetRoot
+} else {
+ Write-Host "Daily SDK found in $DailyDotnetRoot"
+}
+
+$env:DOTNET_ROOT=$DailyDotnetRoot
+$env:PATH="$DailyDotnetRoot;$env:PATH"
+$env:DOTNET_MULTILEVEL_LOOKUP=0
+
+if (-not (Test-Path -Path "$TestHostRoot/shared/Microsoft.AspNetCore.App")) {
+ Write-Host "Copying Microsoft.AspNetCore.App bits from daily SDK to testhost: $TestHostRoot"
+ Copy-Item -Recurse -Path "$DailyDotnetRoot/shared/Microsoft.AspNetCore.App" -Destination "$TestHostRoot/shared"
+} else {
+ Write-Host "Microsoft.AspNetCore.App found in testhost: $TestHostRoot"
+}
+
+Write-Host "Building solution."
+dotnet build -c $StressConfiguration
+
+$Runscript=".\run-stress-$LibrariesConfiguration-$StressConfiguration.ps1"
+if (-not (Test-Path $Runscript)) {
+ Write-Host "Generating Runscript."
+ Add-Content -Path $Runscript -Value "& '$TestHostRoot/dotnet' exec ./bin/$StressConfiguration/net$Version/HttpStress.dll `$args"
+}
+
+Write-Host "To run tests type:"
+Write-Host "$Runscript [stress test args]" \ No newline at end of file
diff --git a/src/libraries/System.Net.Http/tests/StressTests/HttpStress/build-local.sh b/src/libraries/System.Net.Http/tests/StressTests/HttpStress/build-local.sh
new file mode 100755
index 00000000000..9455c31c1ce
--- /dev/null
+++ b/src/libraries/System.Net.Http/tests/StressTests/HttpStress/build-local.sh
@@ -0,0 +1,67 @@
+#!/usr/bin/env bash
+
+## This is a helper script for non-containerized local build and test execution.
+## It downloads and uses the daily SDK which contains the compatible AspNetCore bits.
+## Usage:
+## ./build-local.sh [StressConfiguration] [LibrariesConfiguration]
+
+version=7.0
+repo_root=$(git rev-parse --show-toplevel)
+daily_dotnet_root=./.dotnet-daily
+
+stress_configuration="Release"
+if [ "$1" != "" ]; then
+ stress_configuration=${1,,} # Lowercase all characters in $1
+ stress_configuration=${stress_configuration^} # Uppercase first character
+fi
+
+libraries_configuration="Release"
+if [ "$2" != "" ]; then
+ libraries_configuration=${2,,} # Lowercase all characters in $1
+ libraries_configuration=${libraries_configuration^} # Uppercase first character
+fi
+
+testhost_root=$repo_root/artifacts/bin/testhost/net$version-Linux-$libraries_configuration-x64
+echo "StressConfiguration: $stress_configuration, LibrariesConfiguration: $libraries_configuration, testhost: $testhost_root"
+
+if [[ ! -d $testhost_root ]]; then
+ echo "Cannot find testhost in: $testhost_root"
+ echo "Make sure libraries with the requested configuration are built!"
+ echo "Usage:"
+ echo "./build-local.sh [StressConfiguration] [LibrariesConfiguration]"
+ echo "StressConfiguration and LibrariesConfiguration default to Release!"
+ exit 1
+fi
+
+if [[ ! -d $daily_dotnet_root ]]; then
+ echo "Downloading daily SDK to $daily_dotnet_root"
+ mkdir $daily_dotnet_root
+ wget https://dot.net/v1/dotnet-install.sh -O $daily_dotnet_root/dotnet-install.sh
+ bash $daily_dotnet_root/dotnet-install.sh --no-path --channel $version.1xx --quality daily --install-dir $daily_dotnet_root
+else
+ echo "Daily SDK found in $daily_dotnet_root"
+fi
+
+export DOTNET_ROOT=$daily_dotnet_root
+export PATH=$DOTNET_ROOT:$PATH
+export DOTNET_MULTILEVEL_LOOKUP=0
+
+if [[ ! -d "$testhost_root/shared/Microsoft.AspNetCore.App" ]]; then
+ echo "Copying Microsoft.AspNetCore.App bits from daily SDK to testhost: $testhost_root"
+ cp -r $daily_dotnet_root/shared/Microsoft.AspNetCore.App $testhost_root/shared/Microsoft.AspNetCore.App
+else
+ echo "Microsoft.AspNetCore.App found in testhost: $testhost_root"
+fi
+
+echo "Building solution."
+dotnet build -c $stress_configuration
+
+runscript=./run-stress-${stress_configuration,,}-${libraries_configuration,,}.sh
+if [[ ! -f $runscript ]]; then
+ echo "Generating runscript."
+ echo "$testhost_root/dotnet exec ./bin/$stress_configuration/net$version/HttpStress.dll \$@" > $runscript
+ chmod +x $runscript
+fi
+
+echo "To run tests type:"
+echo "$runscript [stress test args]" \ No newline at end of file
diff --git a/src/libraries/System.Net.Http/tests/StressTests/HttpStress/load-corefx-testhost.ps1 b/src/libraries/System.Net.Http/tests/StressTests/HttpStress/load-corefx-testhost.ps1
index 7fbab2592c9..7fbab2592c9 100644..100755
--- a/src/libraries/System.Net.Http/tests/StressTests/HttpStress/load-corefx-testhost.ps1
+++ b/src/libraries/System.Net.Http/tests/StressTests/HttpStress/load-corefx-testhost.ps1
diff --git a/src/libraries/System.Net.Http/tests/StressTests/HttpStress/run-docker-compose.sh b/src/libraries/System.Net.Http/tests/StressTests/HttpStress/run-docker-compose.sh
index 5c3ba48758b..a99b4c4e317 100755
--- a/src/libraries/System.Net.Http/tests/StressTests/HttpStress/run-docker-compose.sh
+++ b/src/libraries/System.Net.Http/tests/StressTests/HttpStress/run-docker-compose.sh
@@ -22,7 +22,6 @@ scriptroot="$( cd -P "$( dirname "$source" )" && pwd )"
imagename="dotnet-sdk-libs-current"
configuration="Release"
-privateaspnetcore=0
buildcurrentlibraries=0
buildonly=0
clientstressargs=""
@@ -39,10 +38,6 @@ while [[ $# > 0 ]]; do
configuration=$2
shift 2
;;
- -privateaspnetcore|-pa)
- privateaspnetcore=1
- shift 1
- ;;
-buildcurrentlibraries|-b)
buildcurrentlibraries=1
shift 1
@@ -69,17 +64,10 @@ repo_root=$(git rev-parse --show-toplevel)
if [[ buildcurrentlibraries -eq 1 ]]; then
libraries_args=" -t $imagename -c $configuration"
- if [[ $privateaspnetcore -eq 1 ]]; then
- libraries_args="$libraries_args -pa"
- fi
if ! $repo_root/eng/docker/build-docker-sdk.sh $libraries_args; then
exit 1
fi
-
-elif [[ $privateaspnetcore -eq 1 ]]; then
- echo "Using a private Asp.Net Core package (-pa) requires using privately built libraries. Please, enable it with -b switch."
- exit 1
fi
build_args=""
diff --git a/src/libraries/System.Net.Http/tests/StressTests/HttpStress/windows.Dockerfile b/src/libraries/System.Net.Http/tests/StressTests/HttpStress/windows.Dockerfile
index 2c16d6c0d72..2876854606f 100644
--- a/src/libraries/System.Net.Http/tests/StressTests/HttpStress/windows.Dockerfile
+++ b/src/libraries/System.Net.Http/tests/StressTests/HttpStress/windows.Dockerfile
@@ -5,14 +5,16 @@ FROM $SDK_BASE_IMAGE
# Use powershell as the default shell
SHELL ["pwsh", "-Command"]
-RUN echo "DOTNET_SDK_VERSION="$env:DOTNET_SDK_VERSION
-RUN echo "DOTNET_VERSION="$env:DOTNET_VERSION
-
WORKDIR /app
COPY . .
+ARG VERSION=7.0
ARG CONFIGURATION=Release
-RUN dotnet build -c $env:CONFIGURATION
+
+RUN dotnet build -c $env:CONFIGURATION `
+ -p:TargetingPacksTargetsLocation=C:/live-runtime-artifacts/targetingpacks.targets `
+ -p:MicrosoftNetCoreAppRefPackDir=C:/live-runtime-artifacts/microsoft.netcore.app.ref/ `
+ -p:MicrosoftNetCoreAppRuntimePackDir=C:/live-runtime-artifacts/microsoft.netcore.app.runtime.win-x64/$env:CONFIGURATION/
# Enable dump collection
ENV COMPlus_DbgEnableMiniDump=1
@@ -21,6 +23,9 @@ ENV COMPlus_DbgMiniDumpName="C:/share/coredump.%p"
EXPOSE 5001
+ENV VERSION=$VERSION
ENV CONFIGURATION=$CONFIGURATION
ENV HTTPSTRESS_ARGS=""
-CMD dotnet run --no-build -c $env:CONFIGURATION -- $env:HTTPSTRESS_ARGS.Split()
+
+CMD & C:/live-runtime-artifacts/testhost/net$env:VERSION-windows-$env:CONFIGURATION-x64/dotnet.exe exec `
+ ./bin/$env:CONFIGURATION/net$env:VERSION/HttpStress.dll $env:HTTPSTRESS_ARGS.Split() \ No newline at end of file
diff --git a/src/libraries/System.Net.Security/tests/StressTests/SslStress/Build-Local.ps1 b/src/libraries/System.Net.Security/tests/StressTests/SslStress/Build-Local.ps1
new file mode 100644
index 00000000000..dc8ae9b4494
--- /dev/null
+++ b/src/libraries/System.Net.Security/tests/StressTests/SslStress/Build-Local.ps1
@@ -0,0 +1,47 @@
+## This is a helper script for non-containerized local build and test execution.
+## It downloads and uses the daily SDK which contains the compatible AspNetCore bits.
+## Usage:
+## ./build-local.ps1 [StressConfiguration] [LibrariesConfiguration]
+
+# Note that this script does much less than it's counterpart in HttpStress.
+# In SslStress it's a thin utility to generate a runscript for running the app with the live-built testhost.
+# The main reason to use an equivalent solution in SslStress is consistency with HttpStress.
+
+$Version="7.0"
+$RepoRoot="$(git rev-parse --show-toplevel)"
+$DailyDotnetRoot= "./.dotnet-daily"
+
+$StressConfiguration = "Release"
+if (-not ([string]::IsNullOrEmpty($args[0]))) {
+ $StressConfiguration = $args[0]
+}
+
+$LibrariesConfiguration = "Release"
+if (-not ([string]::IsNullOrEmpty($args[1]))) {
+ $LibrariesConfiguration = $args[0]
+}
+
+$TestHostRoot="$RepoRoot/artifacts/bin/testhost/net$Version-windows-$LibrariesConfiguration-x64"
+
+Write-Host "StressConfiguration: $StressConfiguration, LibrariesConfiguration: $LibrariesConfiguration, testhost: $TestHostRoot"
+
+if (-not (Test-Path -Path $TestHostRoot)) {
+ Write-Host "Cannot find testhost in: $TestHostRoot"
+ Write-Host "Make sure libraries with the requested configuration are built!"
+ Write-Host "Usage:"
+ Write-Host "./build-local.sh [StressConfiguration] [LibrariesConfiguration]"
+ Write-Host "StressConfiguration and LibrariesConfiguration default to Release!"
+ exit 1
+}
+
+Write-Host "Building solution."
+dotnet build -c $StressConfiguration
+
+$Runscript=".\run-stress-$LibrariesConfiguration-$StressConfiguration.ps1"
+if (-not (Test-Path $Runscript)) {
+ Write-Host "Generating Runscript."
+ Add-Content -Path $Runscript -Value "& '$TestHostRoot/dotnet' exec ./bin/$StressConfiguration/net$Version/SslStress.dll `$args"
+}
+
+Write-Host "To run tests type:"
+Write-Host "$Runscript [stress test args]" \ No newline at end of file
diff --git a/src/libraries/System.Net.Security/tests/StressTests/SslStress/Directory.Build.props b/src/libraries/System.Net.Security/tests/StressTests/SslStress/Directory.Build.props
index 8998bf45467..74036484c18 100644
--- a/src/libraries/System.Net.Security/tests/StressTests/SslStress/Directory.Build.props
+++ b/src/libraries/System.Net.Security/tests/StressTests/SslStress/Directory.Build.props
@@ -1 +1,17 @@
-<Project/>
+<Project>
+ <PropertyGroup>
+ <PackageRid>linux-x64</PackageRid>
+ <PackageRid Condition="$([MSBuild]::IsOSPlatform('WINDOWS'))">win-x64</PackageRid>
+
+ <!-- Stress projects have their own global.json, the directory above that also has it is the repository root. -->
+ <RepositoryRoot>$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory)../, global.json))/</RepositoryRoot>
+
+ <TargetingPacksTargetsLocation Condition="'$(TargetingPacksTargetsLocation)' == ''">$(RepositoryRoot)eng/targetingpacks.targets</TargetingPacksTargetsLocation>
+ <ProductVersion>7.0.0</ProductVersion>
+ <NetCoreAppCurrent>net7.0</NetCoreAppCurrent>
+ <NetCoreAppCurrentVersion>7.0</NetCoreAppCurrentVersion>
+ <MicrosoftNetCoreAppFrameworkName>Microsoft.NETCore.App</MicrosoftNetCoreAppFrameworkName>
+ <MicrosoftNetCoreAppRefPackDir Condition="'$(MicrosoftNetCoreAppRefPackDir)' == ''" >$(RepositoryRoot)artifacts/bin/microsoft.netcore.app.ref/</MicrosoftNetCoreAppRefPackDir>
+ <MicrosoftNetCoreAppRuntimePackDir Condition="'$(MicrosoftNetCoreAppRuntimePackDir)' == ''">$(RepositoryRoot)artifacts/bin/microsoft.netcore.app.runtime.$(PackageRid)/$(Configuration)/</MicrosoftNetCoreAppRuntimePackDir>
+ </PropertyGroup>
+</Project> \ No newline at end of file
diff --git a/src/libraries/System.Net.Security/tests/StressTests/SslStress/Directory.Build.targets b/src/libraries/System.Net.Security/tests/StressTests/SslStress/Directory.Build.targets
index 8998bf45467..85e81c58307 100644
--- a/src/libraries/System.Net.Security/tests/StressTests/SslStress/Directory.Build.targets
+++ b/src/libraries/System.Net.Security/tests/StressTests/SslStress/Directory.Build.targets
@@ -1 +1,11 @@
-<Project/>
+<Project>
+ <Import Project="$(TargetingPacksTargetsLocation)" />
+
+ <PropertyGroup>
+ <!--
+ Define this here because the SDK resets it
+ unconditionally in Microsoft.NETCoreSdk.BundledVersions.props.
+ -->
+ <NETCoreAppMaximumVersion>7.0</NETCoreAppMaximumVersion>
+ </PropertyGroup>
+</Project> \ No newline at end of file
diff --git a/src/libraries/System.Net.Security/tests/StressTests/SslStress/Dockerfile b/src/libraries/System.Net.Security/tests/StressTests/SslStress/Dockerfile
index 8e97f642a73..d47c4c9be1b 100644
--- a/src/libraries/System.Net.Security/tests/StressTests/SslStress/Dockerfile
+++ b/src/libraries/System.Net.Security/tests/StressTests/SslStress/Dockerfile
@@ -1,18 +1,23 @@
ARG SDK_BASE_IMAGE=mcr.microsoft.com/dotnet/nightly/sdk:6.0-bullseye-slim
FROM $SDK_BASE_IMAGE
-RUN echo "DOTNET_SDK_VERSION="$DOTNET_SDK_VERSION
-RUN echo "DOTNET_VERSION="$DOTNET_VERSION
-
WORKDIR /app
COPY . .
WORKDIR /app/System.Net.Security/tests/StressTests/SslStress
+ARG VERSION=7.0
ARG CONFIGURATION=Release
-RUN dotnet build -c $CONFIGURATION
+
+RUN dotnet build -c $CONFIGURATION \
+ -p:TargetingPacksTargetsLocation=/live-runtime-artifacts/targetingpacks.targets \
+ -p:MicrosoftNetCoreAppRefPackDir=/live-runtime-artifacts/microsoft.netcore.app.ref/ \
+ -p:MicrosoftNetCoreAppRuntimePackDir=/live-runtime-artifacts/microsoft.netcore.app.runtime.linux-x64/$CONFIGURATION/
EXPOSE 5001
+ENV VERSION=$VERSION
ENV CONFIGURATION=$CONFIGURATION
ENV SSLSTRESS_ARGS=''
-CMD dotnet run --no-build -c $CONFIGURATION -- $SSLSTRESS_ARGS
+
+CMD /live-runtime-artifacts/testhost/net$VERSION-Linux-$CONFIGURATION-x64/dotnet exec \
+ ./bin/$CONFIGURATION/net$VERSION/SslStress.dll $SSLSTRESS_ARGS \ No newline at end of file
diff --git a/src/libraries/System.Net.Security/tests/StressTests/SslStress/Readme.md b/src/libraries/System.Net.Security/tests/StressTests/SslStress/Readme.md
index 18ed7562ace..f58d5089a3c 100644
--- a/src/libraries/System.Net.Security/tests/StressTests/SslStress/Readme.md
+++ b/src/libraries/System.Net.Security/tests/StressTests/SslStress/Readme.md
@@ -4,39 +4,47 @@ Provides stress testing scenaria for System.Net.Security.SslStream.
### Running the suite locally
-Using the command line,
+Prerequisite: the runtime and the libraries should be [live-built](https://github.com/dotnet/runtime/tree/main/docs/workflow/building/libraries) with `build.cmd`/`build.sh`.
+
+Use the script `build-local.sh` / `Build-Local.ps1` to build the stress project against the live-built runtime.
+
+```bash
+$ build-local.sh [StressConfiguration] [LibrariesConfiguration]
+```
+
+The build script will also generate the runscript that runs the stress suite using the locally built testhost in the form of `run-stress-<StressConfiguration>-<LirariesConfiguration>.sh`. To run the tests with the script, assuming that both the stress project and the libraries have been built against Release configuration:
```bash
-$ dotnet run -- <stress suite args>
+$ run-stress-Release-Release.sh [stress suite args]
```
To get the full list of available parameters:
```bash
-$ dotnet run -- -help
+$ run-stress-Release-Release.sh.sh -help
```
-### Running with local runtime builds
+### Building and running with Docker
-Note that the stress suite will test the sdk available in the environment,
-that is to say it will not necessarily test the implementation of the local runtime repo.
-To achieve this, we will first need to build a new sdk from source. This can be done [using docker](https://github.com/dotnet/runtime/blob/main/eng/docker/Readme.md).
+A docker image containing the live-built runtime bits and the latest daily SDK is created with the [`build-docker-sdk.sh/ps1` scripts](https://github.com/dotnet/runtime/blob/main/eng/docker/Readme.md).
-### Running using docker-compose
+It's possible to manually `docker build` a docker image containing the stress project based on the docker image created with `build-docker-sdk.sh/ps1`, however the preferred way is to use docker-compose, which can be used to target both linux and windows containers.
-The preferred way of running the stress suite is using docker-compose,
-which can be used to target both linux and windows containers.
Docker and compose-compose are required for this step (both included in [docker for windows](https://docs.docker.com/docker-for-windows/)).
#### Using Linux containers
-From the stress folder on powershell:
+From the stress folder:
```powershell
PS> .\run-docker-compose.ps1 -b
```
-This will build the libraries and stress suite to a linux docker image and initialize a stress run using docker-compose.
+```bash
+$ ./run-docker-compose.sh -b
+```
+
+This will build libraries and stress suite to a linux docker image and initialize a stress run using docker-compose.
#### Using Windows containers
@@ -53,4 +61,4 @@ For more details on how the `run-docker-compose.ps1` script can be used:
```powershell
Get-Help .\run-docker-compose.ps1
-```
+``` \ No newline at end of file
diff --git a/src/libraries/System.Net.Security/tests/StressTests/SslStress/SslStress.csproj b/src/libraries/System.Net.Security/tests/StressTests/SslStress/SslStress.csproj
index 8b0a7a0aea1..a2c1d8dffa5 100644
--- a/src/libraries/System.Net.Security/tests/StressTests/SslStress/SslStress.csproj
+++ b/src/libraries/System.Net.Security/tests/StressTests/SslStress/SslStress.csproj
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
- <TargetFramework>net6.0</TargetFramework>
+ <TargetFramework>$(NetCoreAppCurrent)</TargetFramework>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
@@ -11,4 +11,4 @@
<PackageReference Include="System.CommandLine.Experimental" Version="0.3.0-alpha.19577.1" />
<PackageReference Include="System.IO.Pipelines" Version="6.0.0-preview.5.21301.5" />
</ItemGroup>
-</Project>
+</Project> \ No newline at end of file
diff --git a/src/libraries/System.Net.Security/tests/StressTests/SslStress/build-local.sh b/src/libraries/System.Net.Security/tests/StressTests/SslStress/build-local.sh
new file mode 100755
index 00000000000..80237579a14
--- /dev/null
+++ b/src/libraries/System.Net.Security/tests/StressTests/SslStress/build-local.sh
@@ -0,0 +1,49 @@
+#!/usr/bin/env bash
+
+## This is a helper script for non-containerized local build and test execution.
+## Usage:
+## ./build-local.sh [Configuration]
+
+# Note that this script does much less than it's counterpart in HttpStress.
+# In SslStress it's a thin utility to generate a runscript for running the app with the live-built testhost.
+# The main reason to use an equivalent solution in SslStress is consistency with HttpStress.
+
+version=7.0
+repo_root=$(git rev-parse --show-toplevel)
+
+stress_configuration="Release"
+if [ "$1" != "" ]; then
+ stress_configuration=${1,,} # Lowercase all characters in $1
+ stress_configuration=${stress_configuration^} # Uppercase first character
+fi
+
+libraries_configuration="Release"
+if [ "$2" != "" ]; then
+ libraries_configuration=${2,,} # Lowercase all characters in $1
+ libraries_configuration=${libraries_configuration^} # Uppercase first character
+fi
+
+testhost_root=$repo_root/artifacts/bin/testhost/net$version-Linux-$libraries_configuration-x64
+echo "StressConfiguration: $stress_configuration, LibrariesConfiguration: $libraries_configuration, testhost: $testhost_root"
+
+if [[ ! -d $testhost_root ]]; then
+ echo "Cannot find testhost in: $testhost_root"
+ echo "Make sure libraries with the requested configuration are built!"
+ echo "Usage:"
+ echo "./build-local.sh [StressConfiguration] [LibrariesConfiguration]"
+ echo "StressConfiguration and LibrariesConfiguration default to Release!"
+ exit 1
+fi
+
+echo "Building solution."
+dotnet build -c $stress_configuration
+
+runscript=./run-stress-${stress_configuration,,}-${libraries_configuration,,}.sh
+if [[ ! -f $runscript ]]; then
+ echo "Generating runscript."
+ echo "$testhost_root/dotnet exec ./bin/$stress_configuration/net$version/SslStress.dll \$@" > $runscript
+ chmod +x $runscript
+fi
+
+echo "To run tests type:"
+echo "$runscript [stress test args]" \ No newline at end of file
diff --git a/src/libraries/System.Net.Security/tests/StressTests/SslStress/run-docker-compose.ps1 b/src/libraries/System.Net.Security/tests/StressTests/SslStress/run-docker-compose.ps1
index 3d3959021d4..99981196fd3 100755
--- a/src/libraries/System.Net.Security/tests/StressTests/SslStress/run-docker-compose.ps1
+++ b/src/libraries/System.Net.Security/tests/StressTests/SslStress/run-docker-compose.ps1
@@ -6,7 +6,6 @@ Param(
[string][Alias('c')]$configuration = "Release", # Build configuration for libraries and stress suite
[switch][Alias('w')]$useWindowsContainers, # Use windows containers, if available
[switch][Alias('b')]$buildCurrentLibraries, # Drives the stress test using libraries built from current source
- [switch][Alias('pa')]$privateAspNetCore, # Drive the stress test using a private Asp.Net Core package, requires -b to be set
[switch][Alias('o')]$buildOnly, # Build, but do not run the stress app
[string][Alias('t')]$sdkImageName, # Name of the sdk image name, if built from source.
[string]$clientStressArgs = "",
@@ -30,20 +29,11 @@ if ($buildCurrentLibraries)
{
$LIBRARIES_BUILD_ARGS += " -w"
}
- if($privateAspNetCore)
- {
- $LIBRARIES_BUILD_ARGS += " -p"
- }
Invoke-Expression "& $REPO_ROOT_DIR/eng/docker/build-docker-sdk.ps1 $LIBRARIES_BUILD_ARGS"
if (!$?) { exit 1 }
}
-elseif ($privateAspNetCore) {
- write-output "Using a private Asp.Net Core package (-pa) requires using privately built libraries. Please, enable it with -b switch."
- write-output "USAGE: . $($MyInvocation.InvocationName) -b -pa <args>"
- exit 1
-}
# Dockerize the stress app using docker-compose
diff --git a/src/libraries/System.Net.Security/tests/StressTests/SslStress/run-docker-compose.sh b/src/libraries/System.Net.Security/tests/StressTests/SslStress/run-docker-compose.sh
index e18b80fca1d..dd18b894cdf 100755
--- a/src/libraries/System.Net.Security/tests/StressTests/SslStress/run-docker-compose.sh
+++ b/src/libraries/System.Net.Security/tests/StressTests/SslStress/run-docker-compose.sh
@@ -22,7 +22,6 @@ scriptroot="$( cd -P "$( dirname "$source" )" && pwd )"
imagename="dotnet-sdk-libs-current"
configuration="Release"
-privateaspnetcore=0
buildcurrentlibraries=0
buildonly=0
clientstressargs=""
@@ -39,10 +38,6 @@ while [[ $# > 0 ]]; do
configuration=$2
shift 2
;;
- -privateaspnetcore|-pa)
- privateaspnetcore=1
- shift 1
- ;;
-buildcurrentlibraries|-b)
buildcurrentlibraries=1
shift 1
@@ -69,17 +64,10 @@ repo_root=$(git rev-parse --show-toplevel)
if [[ buildcurrentlibraries -eq 1 ]]; then
libraries_args=" -t $imagename -c $configuration"
- if [[ $privateaspnetcore -eq 1 ]]; then
- libraries_args="$libraries_args -pa"
- fi
if ! $repo_root/eng/docker/build-docker-sdk.sh $libraries_args; then
exit 1
fi
-
-elif [[ $privateaspnetcore -eq 1 ]]; then
- echo "Using a private Asp.Net Core package (-pa) requires using privately built libraries. Please, enable it with -b switch."
- exit 1
fi
build_args=""
diff --git a/src/libraries/System.Net.Security/tests/StressTests/SslStress/windows.Dockerfile b/src/libraries/System.Net.Security/tests/StressTests/SslStress/windows.Dockerfile
index a1449eb4d54..542a5d7a20a 100644
--- a/src/libraries/System.Net.Security/tests/StressTests/SslStress/windows.Dockerfile
+++ b/src/libraries/System.Net.Security/tests/StressTests/SslStress/windows.Dockerfile
@@ -5,18 +5,23 @@ FROM $SDK_BASE_IMAGE
# Use powershell as the default shell
SHELL ["pwsh", "-Command"]
-RUN echo "DOTNET_SDK_VERSION="$env:DOTNET_SDK_VERSION
-RUN echo "DOTNET_VERSION="$env:DOTNET_VERSION
-
WORKDIR /app
COPY . .
WORKDIR /app/System.Net.Security/tests/StressTests/SslStress
+ARG VERSION=7.0
ARG CONFIGURATION=Release
-RUN dotnet build -c $env:CONFIGURATION
+
+RUN dotnet build -c $env:CONFIGURATION `
+ -p:TargetingPacksTargetsLocation=C:/live-runtime-artifacts/targetingpacks.targets `
+ -p:MicrosoftNetCoreAppRefPackDir=C:/live-runtime-artifacts/microsoft.netcore.app.ref/ `
+ -p:MicrosoftNetCoreAppRuntimePackDir=C:/live-runtime-artifacts/microsoft.netcore.app.runtime.win-x64/$env:CONFIGURATION/
EXPOSE 5001
+ENV VERSION=$VERSION
ENV CONFIGURATION=$CONFIGURATION
ENV SSLSTRESS_ARGS=""
-CMD dotnet run --no-build -c $env:CONFIGURATION -- $env:SSLSTRESS_ARGS.Split()
+
+CMD & C:/live-runtime-artifacts/testhost/net$env:VERSION-windows-$env:CONFIGURATION-x64/dotnet.exe exec `
+ ./bin/$env:CONFIGURATION/net$env:VERSION/SslStress.dll $env:SSLSTRESS_ARGS.Split() \ No newline at end of file