summaryrefslogtreecommitdiff
path: root/tests/runtest.cmd
diff options
context:
space:
mode:
authorJiyoung Yun <jy910.yun@samsung.com>2016-11-23 10:09:09 (GMT)
committerJiyoung Yun <jy910.yun@samsung.com>2016-11-23 10:09:09 (GMT)
commit4b4aad7217d3292650e77eec2cf4c198ea9c3b4b (patch)
tree98110734c91668dfdbb126fcc0e15ddbd93738ca /tests/runtest.cmd
parentfa45f57ed55137c75ac870356a1b8f76c84b229c (diff)
downloadcoreclr-4b4aad7217d3292650e77eec2cf4c198ea9c3b4b.zip
coreclr-4b4aad7217d3292650e77eec2cf4c198ea9c3b4b.tar.gz
coreclr-4b4aad7217d3292650e77eec2cf4c198ea9c3b4b.tar.bz2
Imported Upstream version 1.1.0upstream/1.1.0
Diffstat (limited to 'tests/runtest.cmd')
-rw-r--r--tests/runtest.cmd379
1 files changed, 379 insertions, 0 deletions
diff --git a/tests/runtest.cmd b/tests/runtest.cmd
new file mode 100644
index 0000000..5620789
--- /dev/null
+++ b/tests/runtest.cmd
@@ -0,0 +1,379 @@
+@if not defined __echo @echo off
+setlocal EnableDelayedExpansion
+
+:: Set the default arguments
+set __BuildArch=x64
+set __BuildType=Debug
+set __BuildOS=Windows_NT
+
+:: Default to highest Visual Studio version available
+set __VSVersion=vs2015
+
+if defined VS120COMNTOOLS set __VSVersion=vs2013
+if defined VS140COMNTOOLS set __VSVersion=vs2015
+
+:: Define a prefix for most output progress messages that come from this script. That makes
+:: it easier to see where these are coming from. Note that there is a trailing space here.
+set __MsgPrefix=RUNTEST:
+
+set __ProjectDir=%~dp0
+:: remove trailing slash
+if %__ProjectDir:~-1%==\ set "__ProjectDir=%__ProjectDir:~0,-1%"
+set "__ProjectFilesDir=%__ProjectDir%"
+set "__RootBinDir=%__ProjectDir%\..\bin"
+set "__LogsDir=%__RootBinDir%\Logs"
+
+:: Default __Exclude to issues.targets
+set __Exclude0=%~dp0\issues.targets
+
+set __Sequential=
+set __msbuildExtraArgs=
+set __LongGCTests=
+set __GCSimulatorTests=
+
+:Arg_Loop
+if "%1" == "" goto ArgsDone
+
+if /i "%1" == "/?" goto Usage
+if /i "%1" == "-?" goto Usage
+if /i "%1" == "/h" goto Usage
+if /i "%1" == "-h" goto Usage
+if /i "%1" == "/help" goto Usage
+if /i "%1" == "-help" goto Usage
+
+if /i "%1" == "x64" (set __BuildArch=x64&set __MSBuildBuildArch=x64&shift&goto Arg_Loop)
+if /i "%1" == "x86" (set __BuildArch=x86&set __MSBuildBuildArch=x86&shift&goto Arg_Loop)
+
+if /i "%1" == "debug" (set __BuildType=Debug&shift&goto Arg_Loop)
+if /i "%1" == "release" (set __BuildType=Release&shift&goto Arg_Loop)
+if /i "%1" == "checked" (set __BuildType=Checked&shift&goto Arg_Loop)
+
+if /i "%1" == "vs2013" (set __VSVersion=%1&shift&goto Arg_Loop)
+if /i "%1" == "vs2015" (set __VSVersion=%1&shift&goto Arg_Loop)
+
+if /i "%1" == "SkipWrapperGeneration" (set __SkipWrapperGeneration=true&shift&goto Arg_Loop)
+if /i "%1" == "Exclude" (set __Exclude=%2&shift&shift&goto Arg_Loop)
+if /i "%1" == "Exclude0" (set __Exclude0=%2&shift&shift&goto Arg_Loop)
+if /i "%1" == "TestEnv" (set __TestEnv=%2&shift&shift&goto Arg_Loop)
+if /i "%1" == "sequential" (set __Sequential=1&shift&goto Arg_Loop)
+if /i "%1" == "crossgen" (set __DoCrossgen=1&shift&goto Arg_Loop)
+if /i "%1" == "longgc" (set __LongGCTests=1&shift&goto Arg_Loop)
+if /i "%1" == "gcsimulator" (set __GCSimulatorTests=1&shift&goto Arg_Loop)
+if /i "%1" == "jitstress" (set COMPlus_JitStress=%2&shift&shift&goto Arg_Loop)
+if /i "%1" == "jitstressregs" (set COMPlus_JitStressRegs=%2&shift&shift&goto Arg_Loop)
+if /i "%1" == "jitminopts" (set COMPlus_JITMinOpts=1&shift&shift&goto Arg_Loop)
+if /i "%1" == "jitforcerelocs" (set COMPlus_ForceRelocs=1&shift&shift&goto Arg_Loop)
+if /i "%1" == "GenerateLayoutOnly" (set __GenerateLayoutOnly=1&set __SkipWrapperGeneration=true&shift&goto Arg_Loop)
+if /i "%1" == "PerfTests" (set __PerfTests=true&set __SkipWrapperGeneration=true&shift&goto Arg_Loop)
+if /i "%1" == "runcrossgentests" (set RunCrossGen=true&shift&goto Arg_Loop)
+REM change it to COMPlus_GCStress when we stop using xunit harness
+if /i "%1" == "gcstresslevel" (set __GCSTRESSLEVEL=%2&set __TestTimeout=1800000&shift&shift&goto Arg_Loop)
+
+if /i not "%1" == "msbuildargs" goto SkipMsbuildArgs
+:: All the rest of the args will be collected and passed directly to msbuild.
+:CollectMsbuildArgs
+shift
+if "%1"=="" goto ArgsDone
+set __msbuildExtraArgs=%__msbuildExtraArgs% %1
+goto CollectMsbuildArgs
+:SkipMsbuildArgs
+
+set CORE_ROOT=%1
+echo %__MsgPrefix%CORE_ROOT is initially set to: "%CORE_ROOT%"
+shift
+:ArgsDone
+
+:: Set the remaining variables based upon the determined configuration
+set "__BinDir=%__RootBinDir%\Product\%__BuildOS%.%__BuildArch%.%__BuildType%"
+set "__TestWorkingDir=%__RootBinDir%\tests\%__BuildOS%.%__BuildArch%.%__BuildType%"
+
+:: Default global test environment variables
+:: REVIEW: are these ever expected to be defined on entry to this script? Why? By whom?
+:: REVIEW: XunitTestReportDirBase is not used in this script. Who needs to have it set?
+if not defined XunitTestBinBase set XunitTestBinBase=%__TestWorkingDir%
+if not defined XunitTestReportDirBase set XunitTestReportDirBase=%XunitTestBinBase%\Reports\
+
+if not exist %__LogsDir% md %__LogsDir%
+
+set __VSProductVersion=
+if /i "%__VSVersion%" == "vs2013" set __VSProductVersion=120
+if /i "%__VSVersion%" == "vs2015" set __VSProductVersion=140
+
+:: Check presence of VS
+if not defined VS%__VSProductVersion%COMNTOOLS goto NoVS
+
+set __VSToolsRoot=!VS%__VSProductVersion%COMNTOOLS!
+if %__VSToolsRoot:~-1%==\ set "__VSToolsRoot=%__VSToolsRoot:~0,-1%"
+
+:: Does VS really exist?
+if not exist "%__VSToolsRoot%\..\IDE\devenv.exe" goto NoVS
+if not exist "%__VSToolsRoot%\..\..\VC\vcvarsall.bat" goto NoVS
+if not exist "%__VSToolsRoot%\VsDevCmd.bat" goto NoVS
+
+if /i "%__VSVersion%" =="vs2015" goto MSBuild14
+set _msbuildexe="%ProgramFiles(x86)%\MSBuild\12.0\Bin\MSBuild.exe"
+if not exist %_msbuildexe% set _msbuildexe="%ProgramFiles%\MSBuild\12.0\Bin\MSBuild.exe"
+if not exist %_msbuildexe% set _msbuildexe="%ProgramFiles(x86)%\MSBuild\14.0\Bin\MSBuild.exe"
+goto :CheckMSBuild14
+:MSBuild14
+set _msbuildexe="%ProgramFiles(x86)%\MSBuild\14.0\Bin\MSBuild.exe"
+:CheckMSBuild14
+if not exist %_msbuildexe% set _msbuildexe="%ProgramFiles%\MSBuild\14.0\Bin\MSBuild.exe"
+if not exist %_msbuildexe% echo Error: Could not find MSBuild.exe. Please see https://github.com/dotnet/coreclr/blob/master/Documentation/project-docs/developer-guide.md for build instructions. && exit /b 1
+
+:: Set the environment for the build- VS cmd prompt
+echo %__MsgPrefix%Using environment: "%__VSToolsRoot%\VsDevCmd.bat"
+call "%__VSToolsRoot%\VsDevCmd.bat"
+
+if not defined VSINSTALLDIR (
+ echo %__MsgPrefix%Error: runtest.cmd should be run from a Visual Studio Command Prompt. Please see https://github.com/dotnet/coreclr/blob/master/Documentation/project-docs/developer-guide.md for build instructions.
+ exit /b 1
+)
+
+:: Note: We've disabled node reuse because it causes file locking issues.
+:: The issue is that we extend the build with our own targets which
+:: means that that rebuilding cannot successfully delete the task
+:: assembly.
+set __msbuildCommonArgs=/nologo /nodeReuse:false %__msbuildExtraArgs% /p:Platform=%__MSBuildBuildArch%
+
+if not defined __Sequential (
+ set __msbuildCommonArgs=%__msbuildCommonArgs% /maxcpucount
+) else (
+ set __msbuildCommonArgs=%__msbuildCommonArgs% /p:ParallelRun=false
+)
+
+REM Prepare the Test Drop
+REM Cleans any NI from the last run
+powershell "Get-ChildItem -path %__TestWorkingDir% -Include '*.ni.*' -Recurse -Force | Remove-Item -force"
+REM Cleans up any lock folder used for synchronization from last run
+powershell "Get-ChildItem -path %__TestWorkingDir% -Include 'lock' -Recurse -Force | where {$_.Attributes -eq 'Directory'}| Remove-Item -force -Recurse"
+
+if defined CORE_ROOT goto SkipCoreRootSetup
+
+set "CORE_ROOT=%XunitTestBinBase%\Tests\Core_Root"
+echo %__MsgPrefix%Using Default CORE_ROOT as %CORE_ROOT%
+echo %__MsgPrefix%Copying Built binaries from %__BinDir% to %CORE_ROOT%
+if exist "%CORE_ROOT%" rd /s /q "%CORE_ROOT%"
+md "%CORE_ROOT%"
+xcopy /s "%__BinDir%" "%CORE_ROOT%"
+
+:SkipCoreRootSetup
+
+
+if defined __Exclude (if not exist %__Exclude% echo %__MsgPrefix%Error: Exclusion .targets file not found && exit /b 1)
+if defined __TestEnv (if not exist %__TestEnv% echo %__MsgPrefix%Error: Test Environment script not found && exit /b 1)
+
+REM These log files are created automatically by the test run process. Q: what do they depend on being set?
+set __TestRunHtmlLog=%__LogsDir%\TestRun_%__BuildOS%__%__BuildArch%__%__BuildType%.html
+set __TestRunXmlLog=%__LogsDir%\TestRun_%__BuildOS%__%__BuildArch%__%__BuildType%.xml
+
+
+if "%__PerfTests%"=="true" goto RunPerfTests
+if "%__SkipWrapperGeneration%"=="true" goto SkipWrapperGeneration
+
+set __BuildLogRootName=Tests_XunitWrapper
+call :msbuild "%__ProjectFilesDir%\runtest.proj" /p:BuildWrappers=true
+if errorlevel 1 exit /b 1
+
+:SkipWrapperGeneration
+
+call :ResolveDependecies
+
+if not defined __DoCrossgen goto :SkipPrecompileFX
+call :PrecompileFX
+
+:SkipPrecompileFX
+
+if defined __GenerateLayoutOnly (
+ exit /b 1
+)
+
+if not exist %CORE_ROOT%\coreclr.dll (
+ echo %__MsgPrefix%Error: Ensure you have done a successful build of the Product and %CORE_ROOT% contains runtime binaries.
+ exit /b 1
+)
+
+::Check if the test Binaries are built
+if not exist %XunitTestBinBase% (
+ echo %__MsgPrefix%Error: Ensure the Test Binaries are built and are present at %XunitTestBinBase%.
+ echo %__MsgPrefix%Run "buildtest.cmd %__BuildArch% %__BuildType%" to build the tests first.
+ exit /b 1
+)
+echo %__MsgPrefix%CORE_ROOT that will be used is: %CORE_ROOT%
+echo %__MsgPrefix%Starting the test run ...
+
+set __BuildLogRootName=TestRunResults
+call :msbuild "%__ProjectFilesDir%\runtest.proj" /p:Runtests=true /clp:showcommandline
+
+if errorlevel 1 (
+ echo Test Run failed. Refer to the following:
+ echo Html report: %__TestRunHtmlLog%
+ exit /b 1
+)
+
+if not defined __PerfTests goto :SkipRunPerfTests
+
+:RunPerfTests
+echo %__MsgPrefix%CORE_ROOT that will be used is: %CORE_ROOT%
+echo %__MsgPrefix%Starting the test run ...
+
+set __BuildLogRootName=PerfTestRunResults
+echo Running perf tests
+call :msbuild "%__ProjectFilesDir%\runtest.proj" /t:RunPerfTests /clp:showcommandline
+
+if errorlevel 1 (
+ echo Test Run failed. Refer to the following:
+ echo Html report: %__TestRunHtmlLog%
+)
+
+:SkipRunPerfTests
+
+REM =========================================================================================
+REM ===
+REM === All tests complete!
+REM ===
+REM =========================================================================================
+
+echo %__MsgPrefix%Test run successful. Refer to the log files for details:
+echo %__TestRunHtmlLog%
+echo %__TestRunXmlLog%
+exit /b 0
+
+REM =========================================================================================
+REM ===
+REM === Helper routines
+REM ===
+REM =========================================================================================
+
+REM Compile the managed assemblies in Core_ROOT before running the tests
+:PrecompileAssembly
+
+REM Skip mscorlib since it is already precompiled.
+if /I "%3" == "mscorlib.dll" exit /b 0
+if /I "%3" == "mscorlib.ni.dll" exit /b 0
+
+"%1\crossgen.exe" /Platform_Assemblies_Paths "%CORE_ROOT%" "%2" >nul 2>nul
+set /a __exitCode = %errorlevel%
+if "%__exitCode%" == "-2146230517" (
+ echo %2 is not a managed assembly.
+ exit /b 0
+)
+
+if %__exitCode% neq 0 (
+ echo Unable to precompile %2
+ exit /b 0
+)
+
+echo Successfully precompiled %2
+exit /b 0
+
+:PrecompileFX
+for %%F in (%CORE_ROOT%\*.dll) do call :PrecompileAssembly "%CORE_ROOT%" "%%F" %%~nF%%~xF
+exit /b 0
+
+:msbuild
+@REM Subroutine to invoke msbuild. All arguments are passed to msbuild. The first argument should be the
+@REM .proj file to invoke.
+@REM
+@REM On entry, __BuildLogRootName must be set to a file name prefix for the generated log file.
+@REM All the "standard" environment variables that aren't expected to change per invocation must also be set,
+@REM like __msbuildCommonArgs.
+@REM
+@REM The build log files will be overwritten, not appended to.
+
+echo %__MsgPrefix%Invoking msbuild
+
+set "__BuildLog=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.log"
+set "__BuildWrn=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.wrn"
+set "__BuildErr=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.err"
+
+set __msbuildLogArgs=^
+/fileloggerparameters:Verbosity=normal;LogFile="%__BuildLog%";Append ^
+/fileloggerparameters1:WarningsOnly;LogFile="%__BuildWrn%" ^
+/fileloggerparameters2:ErrorsOnly;LogFile="%__BuildErr%" ^
+/consoleloggerparameters:Summary ^
+/verbosity:minimal
+
+set __msbuildArgs=%* %__msbuildCommonArgs% %__msbuildLogArgs%
+
+@REM The next line will overwrite the existing log file, if any.
+echo Invoking: %_msbuildexe% %__msbuildArgs% > "%__BuildLog%"
+
+%_msbuildexe% %__msbuildArgs%
+if errorlevel 1 (
+ echo %__MsgPrefix%Error: msbuild failed. Refer to the log files for details:
+ echo %__BuildLog%
+ echo %__BuildWrn%
+ echo %__BuildErr%
+ exit /b 1
+)
+
+exit /b 0
+
+:ResolveDependecies:
+
+if "%CORE_ROOT%" == "" (
+ echo %__MsgPrefix%Error: Ensure you have done a successful build of the Product and Run - runtest BuildArch BuildType {path to product binaries}.
+ exit /b 1
+)
+
+:: Long GC tests take about 10 minutes per test on average, so
+:: they often bump up against the default 10 minute timeout.
+:: 20 minutes is more than enough time for a test to complete successfully.
+if defined __LongGCTests (
+ echo Running Long GC tests, extending timeout to 20 minutes
+ set __TestTimeout=1200000
+ set RunningLongGCTests=1
+)
+
+:: GCSimulator tests can take up to an hour to complete. They are run twice a week in the
+:: CI, so it's fine if they take a long time.
+if defined __GCSimulatorTests (
+ echo Running GCSimulator tests, extending timeout to one hour
+ set __TestTimeout=3600000
+ set RunningGCSimulatorTests=1
+)
+
+set __BuildLogRootName=Tests_GenerateRuntimeLayout
+call :msbuild "%__ProjectFilesDir%\runtest.proj" /p:GenerateRuntimeLayout=true
+if errorlevel 1 (
+ echo Test Dependency Resolution Failed
+ exit /b 1
+)
+echo %__MsgPrefix% Created the runtime layout with all dependencies in %CORE_ROOT%
+exit /b 0
+
+
+
+:Usage
+echo.
+echo Usage:
+echo %0 BuildArch BuildType [SkipWrapperGeneration] [Exclude EXCLUSION_TARGETS] [TestEnv TEST_ENV_SCRIPT] [VSVersion] CORE_ROOT
+echo where:
+echo.
+echo./? -? /h -h /help -help: view this message.
+echo BuildArch- Optional parameter - x64 or x86 ^(default: x64^).
+echo BuildType- Optional parameter - Debug, Release, or Checked ^(default: Debug^).
+echo SkipWrapperGeneration- Optional parameter - this will run the same set of tests as the last time it was run
+echo Exclude0- Optional parameter - specify location of default exclusion file (defaults to issues.targets if not specified)
+echo Set to "" to disable default exclusion file.
+echo Exclude- Optional parameter - this will exclude individual tests from running, specified by ExcludeList ItemGroup in an .targets file.
+echo TestEnv- Optional parameter - this will run a custom script to set custom test environment settings.
+echo VSVersion- Optional parameter - VS2013 or VS2015 ^(default: VS2015^)
+echo GenerateLayoutOnly - If specified will not run the tests and will only create the Runtime Dependency Layout
+echo RunCrossgenTests - Runs ReadytoRun tests
+echo jitstress n - Runs the tests with COMPlus_JitStress=n
+echo jitstressregs n - Runs the tests with COMPlus_JitStressRegs=n
+echo jitminopts - Runs the tests with COMPlus_JITMinOpts=1
+echo jitforcerelocs - Runs the tests with COMPlus_ForceRelocs=1
+echo gcstresslevel n - Runs the tests with COMPlus_GCStress=n
+echo 0: None 1: GC on all allocs and 'easy' places
+echo 2: GC on transitions to preemptive GC 4: GC on every allowable JITed instr
+echo 8: GC on every allowable NGEN instr 16: GC only on a unique stack trace
+echo CORE_ROOT The path to the runtime
+exit /b 1
+
+:NoVS
+echo Visual Studio 2013+ ^(Community is free^) is a prerequisite to build this repository.
+echo See: https://github.com/dotnet/coreclr/blob/master/Documentation/project-docs/developer-guide.md#prerequisites
+exit /b 1