зеркало из https://github.com/microsoft/msquic.git
196 строки
4.9 KiB
PowerShell
196 строки
4.9 KiB
PowerShell
<#
|
|
|
|
.SYNOPSIS
|
|
This script runs spinquic locally for a period of time.
|
|
|
|
.PARAMETER Config
|
|
Specifies the build configuration to use.
|
|
|
|
.PARAMETER Arch
|
|
The CPU architecture to use.
|
|
|
|
.PARAMETER Tls
|
|
The TLS library use.
|
|
|
|
.PARAMETER Timeout
|
|
The run time in milliseconds.
|
|
|
|
.Parameter RepeatCount
|
|
The amount of times to repeat the full test
|
|
|
|
.PARAMETER KeepOutputOnSuccess
|
|
Don't discard console output or logs on success.
|
|
|
|
.PARAMETER GenerateXmlResults
|
|
Generates an xml Test report for the run.
|
|
|
|
.PARAMETER Debugger
|
|
Attaches the debugger to the process.
|
|
|
|
.PARAMETER InitialBreak
|
|
Debugger starts broken into the process to allow setting breakpoints, etc.
|
|
|
|
.PARAMETER LogProfile
|
|
The name of the profile to use for log collection.
|
|
|
|
.Parameter CodeCoverage
|
|
Collect code coverage for the binary being run.
|
|
|
|
.Parameter AZP
|
|
Runs in Azure Pipelines mode.
|
|
|
|
#>
|
|
|
|
param (
|
|
[Parameter(Mandatory = $false)]
|
|
[ValidateSet("Debug", "Release")]
|
|
[string]$Config = "Debug",
|
|
|
|
[Parameter(Mandatory = $false)]
|
|
[ValidateSet("x86", "x64", "arm", "arm64")]
|
|
[string]$Arch = "",
|
|
|
|
[Parameter(Mandatory = $false)]
|
|
[ValidateSet("schannel", "openssl", "openssl3")]
|
|
[string]$Tls = "",
|
|
|
|
[Parameter(Mandatory = $false)]
|
|
[Int32]$Timeout = 60000,
|
|
|
|
[Parameter(Mandatory = $false)]
|
|
[Int32]$RepeatCount = 1,
|
|
|
|
[Parameter(Mandatory = $false)]
|
|
[Int32]$AllocFail = 0,
|
|
|
|
[Parameter(Mandatory = $false)]
|
|
[string]$Seed = "",
|
|
|
|
[Parameter(Mandatory = $false)]
|
|
[string]$Target = "",
|
|
|
|
[Parameter(Mandatory = $false)]
|
|
[switch]$KeepOutputOnSuccess = $false,
|
|
|
|
[Parameter(Mandatory = $false)]
|
|
[switch]$GenerateXmlResults = $false,
|
|
|
|
[Parameter(Mandatory = $false)]
|
|
[switch]$Debugger = $false,
|
|
|
|
[Parameter(Mandatory = $false)]
|
|
[switch]$InitialBreak = $false,
|
|
|
|
[Parameter(Mandatory = $false)]
|
|
[ValidateSet("None", "Basic.Light", "Basic.Verbose", "Full.Light", "Full.Verbose", "SpinQuic.Light", "SpinQuicWarnings.Light")]
|
|
[string]$LogProfile = "None",
|
|
|
|
[Parameter(Mandatory = $false)]
|
|
[switch]$CodeCoverage = $false,
|
|
|
|
[Parameter(Mandatory = $false)]
|
|
[string]$ExtraArtifactDir = "",
|
|
|
|
[Parameter(Mandatory = $false)]
|
|
[switch]$AZP = $false,
|
|
|
|
[Parameter(Mandatory = $false)]
|
|
[switch]$UseXdp
|
|
)
|
|
|
|
Set-StrictMode -Version 'Latest'
|
|
$PSDefaultParameterValues['*:ErrorAction'] = 'Stop'
|
|
|
|
$BuildConfig = & (Join-Path $PSScriptRoot get-buildconfig.ps1) -Tls $Tls -Arch $Arch -ExtraArtifactDir $ExtraArtifactDir -Config $Config
|
|
|
|
$Tls = $BuildConfig.Tls
|
|
$Arch = $BuildConfig.Arch
|
|
$RootArtifactDir = $BuildConfig.ArtifactsDir
|
|
|
|
# Root directory of the project.
|
|
$RootDir = Split-Path $PSScriptRoot -Parent
|
|
|
|
# Path to the run-executable Powershell script.
|
|
$RunExecutable = Join-Path $RootDir "scripts/run-executable.ps1"
|
|
|
|
# Helper for XDP usage.
|
|
if ($UseXdp) {
|
|
$Target = "192.168.1.11"
|
|
}
|
|
|
|
# Validate the code coverage switch.
|
|
if ($CodeCoverage) {
|
|
if (!$IsWindows) {
|
|
Write-Error "-CodeCoverage switch only supported on Windows";
|
|
}
|
|
if ($Debugger) {
|
|
Write-Error "-CodeCoverage switch is not supported with debugging";
|
|
}
|
|
if (!(Test-Path "C:\Program Files\OpenCppCoverage\OpenCppCoverage.exe")) {
|
|
Write-Error "Code coverage tools are not installed";
|
|
}
|
|
}
|
|
|
|
# Path to the spinquic exectuable.
|
|
$SpinQuic = $null
|
|
if ($IsWindows) {
|
|
$SpinQuic = Join-Path $RootArtifactDir "spinquic.exe"
|
|
} elseif ($IsLinux -or $IsMacOS) {
|
|
$SpinQuic = Join-Path $RootArtifactDir "spinquic"
|
|
} else {
|
|
Write-Error "Unsupported platform type!"
|
|
}
|
|
|
|
# Make sure the build is present.
|
|
if (!(Test-Path $SpinQuic)) {
|
|
Write-Error "Build does not exist!`n `nRun the following to generate it:`n `n $(Join-Path $RootDir "scripts" "build.ps1") -Config $Config -Arch $Arch -Tls $Tls`n"
|
|
}
|
|
|
|
# Build up all the arguments to pass to the Powershell script.
|
|
$SpinQuicArgs = "both -timeout:$($Timeout) -repeat_count:$($RepeatCount)"
|
|
|
|
if ($AllocFail -gt 0) {
|
|
$SpinQuicArgs += " -alloc_fail:$($AllocFail)"
|
|
}
|
|
if ($Seed -ne "") {
|
|
$SpinQuicArgs += " -seed:$($Seed)"
|
|
}
|
|
if ($Target -ne "") {
|
|
$SpinQuicArgs += " -target:$($Target)"
|
|
}
|
|
|
|
$Arguments = "-Path $($SpinQuic) -Arguments '$($SpinQuicArgs)' -ShowOutput"
|
|
if ($KeepOutputOnSuccess) {
|
|
$Arguments += " -KeepOutputOnSuccess"
|
|
}
|
|
if ($GenerateXmlResults) {
|
|
$Arguments += " -GenerateXmlResults"
|
|
}
|
|
if ($Debugger) {
|
|
$Arguments += " -Debugger"
|
|
}
|
|
if ($InitialBreak) {
|
|
$Arguments += " -InitialBreak"
|
|
}
|
|
if ("None" -ne $LogProfile) {
|
|
$Arguments += " -LogProfile $($LogProfile)"
|
|
}
|
|
if ($CodeCoverage) {
|
|
$Arguments += " -CodeCoverage"
|
|
}
|
|
if ($AZP) {
|
|
$Arguments += " -AZP"
|
|
}
|
|
|
|
if (![string]::IsNullOrWhiteSpace($ExtraArtifactDir)) {
|
|
$Arguments += " -ExtraArtifactDir $ExtraArtifactDir"
|
|
}
|
|
|
|
# Run the script.
|
|
if ($IsLinux -and $UseXdp) {
|
|
$NOFILE = Invoke-Expression "bash -c 'ulimit -n'"
|
|
Invoke-Expression ('/usr/bin/sudo bash -c "ulimit -n $NOFILE && pwsh $RunExecutable $Arguments"')
|
|
} else {
|
|
Invoke-Expression ($RunExecutable + " " + $Arguments)
|
|
}
|