diff --git a/docs/workflow/building/libraries/webassembly-instructions.md b/docs/workflow/building/libraries/webassembly-instructions.md
index fdc5dc31d22267..3ae2d2f808abfe 100644
--- a/docs/workflow/building/libraries/webassembly-instructions.md
+++ b/docs/workflow/building/libraries/webassembly-instructions.md
@@ -152,7 +152,7 @@ Submit a PR request with the updated version, wait for all checks to pass and fo
{
"dockerfile": "src/ubuntu/18.04/webassembly/Dockerfile",
"simpleTags": [
- "ubuntu-18.04-webassembly-20200529220811-6a6da63"
+ "ubuntu-18.04-webassembly-20210707133424-12f133e"
],
"digest": "sha256:1f2d920a70bd8d55bbb329e87c3bd732ef930d64ff288dab4af0aa700c25cfaf",
"osType": "Linux",
@@ -169,7 +169,7 @@ Copy the docker image tag and replace it in [platform-matrix.yml](https://github
```
container:
- image: ubuntu-18.04-webassembly-20200409132031-f70ea41
+ image: ubuntu-18.04-webassembly-20210707133424-12f133e
registry: mcr
```
diff --git a/eng/pipelines/common/platform-matrix.yml b/eng/pipelines/common/platform-matrix.yml
index ad3dbd4db8bc0d..ade8c7aab981b6 100644
--- a/eng/pipelines/common/platform-matrix.yml
+++ b/eng/pipelines/common/platform-matrix.yml
@@ -279,7 +279,7 @@ jobs:
targetRid: browser-wasm
platform: Browser_wasm
container:
- image: ubuntu-18.04-webassembly-20210531091624-f5c7a43
+ image: ubuntu-18.04-webassembly-20210707133424-12f133e
registry: mcr
jobParameters:
runtimeFlavor: ${{ parameters.runtimeFlavor }}
diff --git a/eng/pipelines/runtime-manual.yml b/eng/pipelines/runtime-manual.yml
index 77f7b29cad8ac4..4da10d969f39bb 100644
--- a/eng/pipelines/runtime-manual.yml
+++ b/eng/pipelines/runtime-manual.yml
@@ -317,6 +317,7 @@ jobs:
scenarios:
- normal
- wasmtestonbrowser
+ - wasmtestonnodejs
condition: >-
or(
eq(variables['librariesContainsChange'], true),
@@ -463,6 +464,47 @@ jobs:
scenarios:
- normal
+#
+# Build for Browser/wasm and test it on NodeJS
+#
+- template: /eng/pipelines/common/platform-matrix.yml
+ parameters:
+ jobTemplate: /eng/pipelines/common/global-build-job.yml
+ helixQueuesTemplate: /eng/pipelines/libraries/helix-queues-setup.yml
+ buildConfig: Release
+ runtimeFlavor: mono
+ platforms:
+ - Browser_wasm
+ variables:
+ # map dependencies variables to local variables
+ - name: librariesContainsChange
+ value: $[ dependencies.evaluate_paths.outputs['SetPathVars_libraries.containsChange'] ]
+ - name: monoContainsChange
+ value: $[ dependencies.evaluate_paths.outputs['SetPathVars_mono.containsChange'] ]
+ jobParameters:
+ testGroup: innerloop
+ nameSuffix: AllSubsets_Mono
+ buildArgs: -s mono+libs+host+packs+libs.tests -c $(_BuildConfig) /p:ArchiveTests=true
+ timeoutInMinutes: 180
+ condition: >-
+ or(
+ eq(dependencies.evaluate_paths.outputs['SetPathVars_libraries.containsChange'], true),
+ eq(dependencies.evaluate_paths.outputs['SetPathVars_mono.containsChange'], true),
+ eq(dependencies.evaluate_paths.outputs['SetPathVars_installer.containsChange'], true),
+ eq(variables['isFullMatrix'], true))
+ # extra steps, run tests
+ extraStepsTemplate: /eng/pipelines/libraries/helix.yml
+ extraStepsParameters:
+ creator: dotnet-bot
+ testRunNamePrefixSuffix: Mono_$(_BuildConfig)
+ scenarios:
+ - wasmtestonnodejs
+ condition: >-
+ or(
+ eq(variables['librariesContainsChange'], true),
+ eq(variables['monoContainsChange'], true),
+ eq(variables['isFullMatrix'], true))
+
#
# Build the whole product using Mono and run runtime tests
#
diff --git a/eng/testing/WasmRunnerAOTTemplate.sh b/eng/testing/WasmRunnerAOTTemplate.sh
index 4aa271b960a537..160f103656664e 100644
--- a/eng/testing/WasmRunnerAOTTemplate.sh
+++ b/eng/testing/WasmRunnerAOTTemplate.sh
@@ -1,11 +1,15 @@
#!/usr/bin/env bash
-EXECUTION_DIR=$(dirname $0)
-SCENARIO=$3
+# SetCommands defined in eng\testing\tests.wasm.targets
+[[SetCommands]]
+[[SetCommandsEcho]]
-cd $EXECUTION_DIR
+EXECUTION_DIR=$(dirname $0)
+if [[ -n "$3" ]]; then
+ SCENARIO=$3
+fi
-if [ -z "$HELIX_WORKITEM_UPLOAD_ROOT" ]; then
+if [[ -z "$HELIX_WORKITEM_UPLOAD_ROOT" ]]; then
XHARNESS_OUT="$EXECUTION_DIR/xharness-output"
else
XHARNESS_OUT="$HELIX_WORKITEM_UPLOAD_ROOT/xharness-output"
@@ -19,12 +23,47 @@ else
HARNESS_RUNNER="dotnet xharness"
fi
-if [[ "$SCENARIO" == "WasmTestOnBrowser" ]]; then
- XHARNESS_COMMAND="test-browser"
-elif [ -z "$XHARNESS_COMMAND" ]; then
- XHARNESS_COMMAND="test"
+if [[ -z "$XHARNESS_COMMAND" ]]; then
+ if [[ "${SCENARIO,,}" == "wasmtestonbrowser" ]]; then
+ XHARNESS_COMMAND="test-browser"
+ else
+ XHARNESS_COMMAND="test"
+ fi
+fi
+
+if [[ "${XHARNESS_COMMAND,,}" == "test" ]]; then
+ if [[ -z "$JS_ENGINE" ]]; then
+ if [[ "${SCENARIO,,}" == "wasmtestonnodejs" ]]; then
+ JS_ENGINE="--engine=NodeJS"
+ else
+ JS_ENGINE="--engine=V8"
+ fi
+ fi
+
+ if [[ -z "$MAIN_JS" ]]; then
+ MAIN_JS="--js-file=test-main.js"
+ fi
+
+ if [[ -z "$JS_ENGINE_ARGS" ]]; then
+ JS_ENGINE_ARGS="--engine-arg=--stack-trace-limit=1000"
+ fi
+fi
+
+if [[ -z "$XHARNESS_ARGS" ]]; then
+ XHARNESS_ARGS="$JS_ENGINE $JS_ENGINE_ARGS $MAIN_JS"
fi
+echo EXECUTION_DIR=$EXECUTION_DIR
+echo SCENARIO=$SCENARIO
+echo XHARNESS_OUT=$XHARNESS_OUT
+echo XHARNESS_CLI_PATH=$XHARNESS_CLI_PATH
+echo HARNESS_RUNNER=$HARNESS_RUNNER
+echo XHARNESS_COMMAND=$XHARNESS_COMMAND
+echo MAIN_JS=$MAIN_JS
+echo JS_ENGINE=$JS_ENGINE
+echo JS_ENGINE_ARGS=$JS_ENGINE_ARGS
+echo XHARNESS_ARGS=$XHARNESS_ARGS
+
function _buildAOTFunc()
{
local projectFile=$1
@@ -56,11 +95,23 @@ function _buildAOTFunc()
return 0
}
-# RunCommands defined in tests.mobile.targets
-[[RunCommands]]
+pushd $EXECUTION_DIR
+
+# ========================= BEGIN Test Execution =============================
+echo ----- start $(date) =============== To repro directly: =====================================================
+echo pushd $EXECUTION_DIR
+# RunCommands defined in eng\testing\tests.wasm.targets
+[[RunCommandsEcho]]
+echo popd
+echo ===========================================================================================================
+pushd $EXECUTION_DIR
+# RunCommands defined in eng\testing\tests.wasm.targets
+[[RunCommands]]
_exitCode=$?
+popd
+echo ----- end $(date) ----- exit code $_exitCode ----------------------------------------------------------
echo "XHarness artifacts: $XHARNESS_OUT"
-exit $_exitCode
+exit $_exitCode
\ No newline at end of file
diff --git a/eng/testing/WasmRunnerTemplate.cmd b/eng/testing/WasmRunnerTemplate.cmd
index 603199341a2b08..2ba3baa0948e03 100644
--- a/eng/testing/WasmRunnerTemplate.cmd
+++ b/eng/testing/WasmRunnerTemplate.cmd
@@ -1,8 +1,14 @@
@echo off
setlocal enabledelayedexpansion
+:: SetCommands defined in eng\testing\tests.wasm.targets
+[[SetCommands]]
+[[SetCommandsEcho]]
+
set EXECUTION_DIR=%~dp0
-set SCENARIO=%3
+if [%3] NEQ [] (
+ set SCENARIO=%3
+)
if [%HELIX_WORKITEM_UPLOAD_ROOT%] == [] (
set "XHARNESS_OUT=%EXECUTION_DIR%xharness-output"
@@ -18,22 +24,60 @@ if [%XHARNESS_CLI_PATH%] NEQ [] (
set HARNESS_RUNNER=dotnet.exe xharness
)
-if [%SCENARIO%]==[WasmTestOnBrowser] (
- set XHARNESS_COMMAND=test-browser
+if [%XHARNESS_COMMAND%] == [] (
+ if /I [%SCENARIO%]==[wasmtestonbrowser] (
+ set XHARNESS_COMMAND=test-browser
+ ) else (
+ set XHARNESS_COMMAND=test
+ )
+)
+
+if /I [%XHARNESS_COMMAND%] == [test] (
+ if [%JS_ENGINE%] == [] (
+ if /I [%SCENARIO%] == [wasmtestonnodejs] (
+ set "JS_ENGINE=--engine^=NodeJS"
+ ) else (
+ set "JS_ENGINE=--engine^=V8"
+ )
+ )
+ if [%MAIN_JS%] == [] (
+ set "MAIN_JS=--js-file^=test-main.js"
+ )
+
+ if [%JS_ENGINE_ARGS%] == [] (
+ set "JS_ENGINE_ARGS=--engine-arg^=--stack-trace-limit^=1000"
+ )
) else (
- if [%XHARNESS_COMMAND%] == [] (
- set XHARNESS_COMMAND=test
+ if [%BROWSER_PATH%] == [] (
+ set "BROWSER_PATH=--browser-path^=%HELIX_CORRELATION_PAYLOAD%\chrome-win\chrome.exe"
)
)
+if [%XHARNESS_ARGS%] == [] (
+ set "XHARNESS_ARGS=%JS_ENGINE% %JS_ENGINE_ARGS% %BROWSER_PATH% %MAIN_JS%"
+)
+
+echo EXECUTION_DIR=%EXECUTION_DIR%
+echo SCENARIO=%SCENARIO%
+echo XHARNESS_OUT=%XHARNESS_OUT%
+echo XHARNESS_CLI_PATH=%XHARNESS_CLI_PATH%
+echo HARNESS_RUNNER=%HARNESS_RUNNER%
+echo XHARNESS_COMMAND=%XHARNESS_COMMAND%
+echo MAIN_JS=%MAIN_JS%
+echo JS_ENGINE=%JS_ENGINE%
+echo JS_ENGINE_ARGS=%JS_ENGINE_ARGS%
+echo XHARNESS_ARGS=%XHARNESS_ARGS%
+
:: ========================= BEGIN Test Execution =============================
echo ----- start %DATE% %TIME% =============== To repro directly: =====================================================
echo pushd %EXECUTION_DIR%
+:: RunCommands defined in eng\testing\tests.wasm.targets
[[RunCommandsEcho]]
echo popd
echo ===========================================================================================================
pushd %EXECUTION_DIR%
@echo on
+:: RunCommands defined in eng\testing\tests.wasm.targets
[[RunCommands]]
set EXIT_CODE=%ERRORLEVEL%
@echo off
diff --git a/eng/testing/WasmRunnerTemplate.sh b/eng/testing/WasmRunnerTemplate.sh
index 412c33724aa158..edd491603c27db 100644
--- a/eng/testing/WasmRunnerTemplate.sh
+++ b/eng/testing/WasmRunnerTemplate.sh
@@ -1,9 +1,13 @@
#!/usr/bin/env bash
-EXECUTION_DIR=$(dirname $0)
-SCENARIO=$3
+# SetCommands defined in eng\testing\tests.wasm.targets
+[[SetCommands]]
+[[SetCommandsEcho]]
-cd $EXECUTION_DIR
+EXECUTION_DIR=$(dirname $0)
+if [[ -n "$3" ]]; then
+ SCENARIO=$3
+fi
if [[ -z "$HELIX_WORKITEM_UPLOAD_ROOT" ]]; then
XHARNESS_OUT="$EXECUTION_DIR/xharness-output"
@@ -19,17 +23,64 @@ else
HARNESS_RUNNER="dotnet xharness"
fi
-if [[ "$SCENARIO" == "WasmTestOnBrowser" ]]; then
- XHARNESS_COMMAND="test-browser"
-elif [[ -z "$XHARNESS_COMMAND" ]]; then
- XHARNESS_COMMAND="test"
+if [[ -z "$XHARNESS_COMMAND" ]]; then
+ if [[ "${SCENARIO,,}" == "wasmtestonbrowser" ]]; then
+ XHARNESS_COMMAND="test-browser"
+ else
+ XHARNESS_COMMAND="test"
+ fi
fi
-# RunCommands defined in tests.mobile.targets
-[[RunCommands]]
+if [[ "${XHARNESS_COMMAND,,}" == "test" ]]; then
+ if [[ -z "$JS_ENGINE" ]]; then
+ if [[ "${SCENARIO,,}" == "wasmtestonnodejs" ]]; then
+ JS_ENGINE="--engine=NodeJS"
+ else
+ JS_ENGINE="--engine=V8"
+ fi
+ fi
+
+ if [[ -z "$MAIN_JS" ]]; then
+ MAIN_JS="--js-file=test-main.js"
+ fi
+
+ if [[ -z "$JS_ENGINE_ARGS" ]]; then
+ JS_ENGINE_ARGS="--engine-arg=--stack-trace-limit=1000"
+ fi
+fi
+if [[ -z "$XHARNESS_ARGS" ]]; then
+ XHARNESS_ARGS="$JS_ENGINE $JS_ENGINE_ARGS $MAIN_JS"
+fi
+
+echo EXECUTION_DIR=$EXECUTION_DIR
+echo SCENARIO=$SCENARIO
+echo XHARNESS_OUT=$XHARNESS_OUT
+echo XHARNESS_CLI_PATH=$XHARNESS_CLI_PATH
+echo HARNESS_RUNNER=$HARNESS_RUNNER
+echo XHARNESS_COMMAND=$XHARNESS_COMMAND
+echo MAIN_JS=$MAIN_JS
+echo JS_ENGINE=$JS_ENGINE
+echo JS_ENGINE_ARGS=$JS_ENGINE_ARGS
+echo XHARNESS_ARGS=$XHARNESS_ARGS
+
+
+pushd $EXECUTION_DIR
+
+# ========================= BEGIN Test Execution =============================
+echo ----- start $(date) =============== To repro directly: =====================================================
+echo pushd $EXECUTION_DIR
+# RunCommands defined in eng\testing\tests.wasm.targets
+[[RunCommandsEcho]]
+echo popd
+echo ===========================================================================================================
+pushd $EXECUTION_DIR
+# RunCommands defined in eng\testing\tests.wasm.targets
+[[RunCommands]]
_exitCode=$?
+popd
+echo ----- end $(date) ----- exit code $_exitCode ----------------------------------------------------------
echo "XHarness artifacts: $XHARNESS_OUT"
-exit $_exitCode
+exit $_exitCode
\ No newline at end of file
diff --git a/eng/testing/tests.targets b/eng/testing/tests.targets
index 1d14775dadd90b..6706d6e6d64529 100644
--- a/eng/testing/tests.targets
+++ b/eng/testing/tests.targets
@@ -102,6 +102,7 @@
diff --git a/eng/testing/tests.wasm.targets b/eng/testing/tests.wasm.targets
index ff38cc8686b995..273ab76ef90a3f 100644
--- a/eng/testing/tests.wasm.targets
+++ b/eng/testing/tests.wasm.targets
@@ -14,6 +14,7 @@
<_ShellCommandSeparator Condition="'$(OS)' == 'Windows_NT'">&&
<_ShellCommandSeparator Condition="'$(OS)' != 'Windows_NT'">&&
false
+ <_WasmMainJSFileName Condition="'$(WasmMainJSPath)' != ''">$([System.IO.Path]::GetFileName('$(WasmMainJSPath)'))
@@ -22,15 +23,27 @@
local
+
+
+
+
+
+
+
+
+
+
+
+
+
- V8
- $(JSEngineArgs) --engine-arg=--stack-trace-limit=1000
-
<_XHarnessArgs Condition="'$(OS)' != 'Windows_NT'">wasm $XHARNESS_COMMAND --app=. --output-directory=$XHARNESS_OUT
<_XHarnessArgs Condition="'$(OS)' == 'Windows_NT'">wasm %XHARNESS_COMMAND% --app=. --output-directory=%XHARNESS_OUT%
- <_XHarnessArgs Condition="'$(Scenario)' != 'WasmTestOnBrowser' and '$(Scenario)' != 'BuildWasmApps'">$(_XHarnessArgs) --engine=$(JSEngine) $(JSEngineArgs) --js-file=test-main.js
- <_XHarnessArgs Condition="'$(BrowserHost)' == 'windows'">$(_XHarnessArgs) --browser=chrome --browser-path=%HELIX_CORRELATION_PAYLOAD%\chrome-win\chrome.exe
<_XHarnessArgs Condition="'$(IsFunctionalTest)' == 'true'" >$(_XHarnessArgs) --expected-exit-code=$(ExpectedExitCode)
<_XHarnessArgs Condition="'$(WasmXHarnessArgs)' != ''" >$(_XHarnessArgs) $(WasmXHarnessArgs)
@@ -39,8 +52,8 @@
<_AppArgs Condition="'$(WasmTestAppArgs)' != ''">$(_AppArgs) $(WasmTestAppArgs)
- $HARNESS_RUNNER $(_XHarnessArgs) %24WasmXHarnessArgs -- $(WasmXHarnessMonoArgs) %24WasmXHarnessMonoArgs $(_AppArgs) %24WasmTestAppArgs
- %HARNESS_RUNNER% $(_XHarnessArgs) %WasmXHarnessArgs% -- $(WasmXHarnessMonoArgs) %WasmXHarnessMonoArgs% $(_AppArgs) %WasmTestAppArgs%
+ $HARNESS_RUNNER $(_XHarnessArgs) %24XHARNESS_ARGS %24WasmXHarnessArgs -- $(WasmXHarnessMonoArgs) %24WasmXHarnessMonoArgs $(_AppArgs) %24WasmTestAppArgs
+ %HARNESS_RUNNER% $(_XHarnessArgs) %XHARNESS_ARGS% %WasmXHarnessArgs% -- $(WasmXHarnessMonoArgs) %WasmXHarnessMonoArgs% $(_AppArgs) %WasmTestAppArgs%
diff --git a/src/libraries/System.Data.Common/tests/System/Data/DataTableTest.cs b/src/libraries/System.Data.Common/tests/System/Data/DataTableTest.cs
index 28cd4f7494b1d9..7538f21eac709d 100644
--- a/src/libraries/System.Data.Common/tests/System/Data/DataTableTest.cs
+++ b/src/libraries/System.Data.Common/tests/System/Data/DataTableTest.cs
@@ -3566,6 +3566,7 @@ public void Remote()
}
[Fact]
+ [ActiveIssue("https://github.com/dotnet/runtime/issues/62965", TestPlatforms.Browser)] // fails on NodeJS on windows
public void Bug55978()
{
DataTable dt = new DataTable();
diff --git a/src/libraries/System.Private.Runtime.InteropServices.JavaScript/tests/System/Runtime/InteropServices/JavaScript/MarshalTests.cs b/src/libraries/System.Private.Runtime.InteropServices.JavaScript/tests/System/Runtime/InteropServices/JavaScript/MarshalTests.cs
index b3139a60a93b27..f8955384981e0e 100644
--- a/src/libraries/System.Private.Runtime.InteropServices.JavaScript/tests/System/Runtime/InteropServices/JavaScript/MarshalTests.cs
+++ b/src/libraries/System.Private.Runtime.InteropServices.JavaScript/tests/System/Runtime/InteropServices/JavaScript/MarshalTests.cs
@@ -909,9 +909,10 @@ private static async Task MarshalTask(string helperMethodName, string help
@"globalThis.__test_promise_resolved = false; " +
@"globalThis.__test_promise_failed = false; " +
$@"var t = App.call_test_method ('{helperMethodName}', [ {helperMethodArgs} ], 'i'); " +
- "t.finally(result => { globalThis.__test_promise_completed = true; }); " +
- "t.then(result => { globalThis.__test_promise_resolved = true; " + resolvedBody + " }); " +
- "t.catch(e => { globalThis.__test_promise_failed = true; }); "
+ "t.then(result => { globalThis.__test_promise_resolved = true; " + resolvedBody + " })" +
+ " .catch(e => { globalThis.__test_promise_failed = true; })" +
+ " .finally(result => { globalThis.__test_promise_completed = true; }); " +
+ ""
);
await Task.Delay(1);
diff --git a/src/libraries/sendtohelixhelp.proj b/src/libraries/sendtohelixhelp.proj
index 6fcbb9d4e59475..39e85a0a1a5f89 100644
--- a/src/libraries/sendtohelixhelp.proj
+++ b/src/libraries/sendtohelixhelp.proj
@@ -66,10 +66,13 @@
true
+
$(RepoRoot)src\mono\wasm\emsdk\
+ $([MSBuild]::NormalizeDirectory('$(RepoRoot)', 'src', 'mono', 'wasm', 'emsdk'))
true
true
+ true
true
true
@@ -104,14 +107,18 @@
+
+
+
+
@@ -137,6 +144,13 @@
+
+
+
+
+
+
+
@@ -153,6 +167,12 @@
true
+
+
+ true
+ true
+
+
true
@@ -363,7 +383,6 @@
- $([MSBuild]::NormalizeDirectory('$(RepoRoot)', 'src', 'mono', 'wasm', 'emsdk'))
$([MSBuild]::NormalizeDirectory('$(RepoRoot)', 'src', 'mono', 'wasm', 'build'))
$([MSBuild]::NormalizeDirectory('$(ArtifactsDir)', 'bin', 'NetCoreServer', '$(AspNetCoreAppCurrent)-$(Configuration)'))
$([MSBuild]::NormalizeDirectory('$(ArtifactsDir)', 'bin', 'RemoteLoopServer', '$(AspNetCoreAppCurrent)-$(Configuration)'))
@@ -399,7 +418,7 @@
-
+
@@ -430,13 +449,13 @@
-
+
-
+
@@ -445,6 +464,10 @@
+
+
+
+
@@ -517,10 +540,9 @@
dotnet exec %XHARNESS_CLI_PATH%
%HELIX_WORKITEM_UPLOAD_ROOT%\xharness-output
%XHARNESS_COMMAND%
- --browser-path=%HELIX_CORRELATION_PAYLOAD%\chrome-win\chrome.exe
-
+
<_RunOnlyWorkItem Include="$(TestArchiveRoot)runonly/**/*.Console.Sample.zip" />
@@ -562,19 +584,16 @@
-
+
-
- $([MSBuild]::NormalizeDirectory('$(RepoRoot)', 'src', 'mono', 'wasm', 'emsdk'))
-
+
<_EmSdkFiles Include="$(EMSDK_PATH)\**\*" Exclude="$(EMSDK_PATH)\.git\**\*" />
-
diff --git a/src/mono/wasm/debugger/DebuggerTestSuite/TestHarnessStartup.cs b/src/mono/wasm/debugger/DebuggerTestSuite/TestHarnessStartup.cs
index e7be4958421bed..c8ac7709007118 100644
--- a/src/mono/wasm/debugger/DebuggerTestSuite/TestHarnessStartup.cs
+++ b/src/mono/wasm/debugger/DebuggerTestSuite/TestHarnessStartup.cs
@@ -114,9 +114,9 @@ public async Task LaunchAndServe(ProcessStartInfo psi, HttpContext context, Func
proc.BeginErrorReadLine();
proc.BeginOutputReadLine();
- if (await Task.WhenAny(tcs.Task, Task.Delay(5000)) != tcs.Task)
+ if (await Task.WhenAny(tcs.Task, Task.Delay(20000)) != tcs.Task)
{
- Logger.LogError("Didnt get the con string after 5s.");
+ Logger.LogError("Didnt get the con string after 20s.");
throw new Exception("node.js timedout");
}
var line = await tcs.Task;
diff --git a/src/tasks/installer.tasks/GenerateRunScript.cs b/src/tasks/installer.tasks/GenerateRunScript.cs
index a2629768aa2027..142ac7c996fbd6 100644
--- a/src/tasks/installer.tasks/GenerateRunScript.cs
+++ b/src/tasks/installer.tasks/GenerateRunScript.cs
@@ -11,6 +11,9 @@ namespace Microsoft.DotNet.Build.Tasks
{
public class GenerateRunScript : Task
{
+ [Required]
+ public string[] SetCommands { get; set; }
+
[Required]
public string[] RunCommands { get; set; }
@@ -60,6 +63,17 @@ private void WriteRunScript(string templateContent, string extension)
bool isUnix = extension == ".sh";
string lineFeed = isUnix ? "\n" : "\r\n";
+ var setCommandsBuilder = new StringBuilder();
+ for (int i = 0; i < SetCommands.Length; i++)
+ {
+ setCommandsBuilder.Append(SetCommands[i]);
+ if (i < SetCommands.Length - 1)
+ {
+ setCommandsBuilder.Append(lineFeed);
+ }
+ }
+ templateContent = templateContent.Replace("[[SetCommands]]", setCommandsBuilder.ToString());
+
var runCommandsBuilder = new StringBuilder();
for (int i = 0; i < RunCommands.Length; i++)
{
@@ -71,29 +85,22 @@ private void WriteRunScript(string templateContent, string extension)
}
templateContent = templateContent.Replace("[[RunCommands]]", runCommandsBuilder.ToString());
+
+ var setCommandEchoesBuilder = new StringBuilder();
+ foreach (string setCommand in SetCommands)
+ {
+ setCommandEchoesBuilder.Append($"echo {SanitizeEcho(setCommand,isUnix)}{lineFeed}");
+ }
+ templateContent = templateContent.Replace("[[SetCommandsEcho]]", setCommandEchoesBuilder.ToString());
+
var runCommandEchoesBuilder = new StringBuilder();
foreach (string runCommand in RunCommands)
{
- // Escape backtick and question mark characters to avoid running commands instead of echo'ing them.
- string sanitizedRunCommand = runCommand.Replace("`", "\\`")
- .Replace("?", "\\")
- .Replace("\r","")
- .Replace("\n"," ")
- .Replace("&", "^&")
- .Replace(">", "^>");
-
- if (isUnix)
- {
- // Remove parentheses and quotes from echo command before wrapping it in quotes to avoid errors on Linux.
- sanitizedRunCommand = "\"" + sanitizedRunCommand.Replace("\"", "")
- .Replace("(", "")
- .Replace(")", "") + "\"";
- }
-
- runCommandEchoesBuilder.Append($"echo {sanitizedRunCommand}{lineFeed}");
+ runCommandEchoesBuilder.Append($"echo {SanitizeEcho(runCommand,isUnix)}{lineFeed}");
}
templateContent = templateContent.Replace("[[RunCommandsEcho]]", runCommandEchoesBuilder.ToString());
+
if (isUnix)
{
// Just in case any Windows EOLs have made it in by here, clean any up.
@@ -109,5 +116,26 @@ private void WriteRunScript(string templateContent, string extension)
Log.LogMessage($"Wrote {extension} run script to {OutputPath}");
}
+
+ private static string SanitizeEcho(string command, bool isUnix){
+ // Escape backtick and question mark characters to avoid running commands instead of echo'ing them.
+ string sanitizedRunCommand = command.Replace("`", "\\`")
+ .Replace("?", "\\")
+ .Replace("$", "")
+ .Replace("%", "")
+ .Replace("\r","")
+ .Replace("\n"," ")
+ .Replace("&", "^&")
+ .Replace(">", "^>");
+
+ if (isUnix)
+ {
+ // Remove parentheses and quotes from echo command before wrapping it in quotes to avoid errors on Linux.
+ sanitizedRunCommand = "\"" + sanitizedRunCommand.Replace("\"", "")
+ .Replace("(", "")
+ .Replace(")", "") + "\"";
+ }
+ return sanitizedRunCommand;
+ }
}
}
\ No newline at end of file
diff --git a/src/tests/BuildWasmApps/Wasm.Build.Tests/BuildTestBase.cs b/src/tests/BuildWasmApps/Wasm.Build.Tests/BuildTestBase.cs
index aebb02920310af..ec37a933562bd7 100644
--- a/src/tests/BuildWasmApps/Wasm.Build.Tests/BuildTestBase.cs
+++ b/src/tests/BuildWasmApps/Wasm.Build.Tests/BuildTestBase.cs
@@ -147,8 +147,9 @@ protected string RunAndTestWasmApp(BuildArgs buildArgs,
string bundleDir = Path.Combine(GetBinDir(baseDir: buildDir, config: buildArgs.Config), "AppBundle");
(string testCommand, string extraXHarnessArgs) = host switch
{
- RunHost.V8 => ("wasm test", "--js-file=test-main.js --engine=V8 -v trace"),
- _ => ("wasm test-browser", $"-v trace -b {host}")
+ RunHost.V8 => ("wasm test", "--js-file=test-main.js --engine=V8 -v trace"),
+ RunHost.NodeJS => ("wasm test", "--js-file=test-main.js --engine=NodeJS -v trace"),
+ _ => ("wasm test-browser", $"-v trace -b {host}")
};
string testLogPath = Path.Combine(_logPath, host.ToString());
diff --git a/src/tests/BuildWasmApps/Wasm.Build.Tests/RunHost.cs b/src/tests/BuildWasmApps/Wasm.Build.Tests/RunHost.cs
index 0aa1ae14ea8120..137316ebb546c5 100644
--- a/src/tests/BuildWasmApps/Wasm.Build.Tests/RunHost.cs
+++ b/src/tests/BuildWasmApps/Wasm.Build.Tests/RunHost.cs
@@ -13,7 +13,8 @@ public enum RunHost
Chrome = 2,
Safari = 4,
Firefox = 8,
+ NodeJS = 16,
- All = V8 | Chrome//| Firefox//Safari
+ All = V8 | NodeJS | Chrome//| Firefox//Safari
}
}
diff --git a/src/tests/BuildWasmApps/Wasm.Build.Tests/data/RunScriptTemplate.cmd b/src/tests/BuildWasmApps/Wasm.Build.Tests/data/RunScriptTemplate.cmd
index 95772327e6a258..5e70805c803e9b 100644
--- a/src/tests/BuildWasmApps/Wasm.Build.Tests/data/RunScriptTemplate.cmd
+++ b/src/tests/BuildWasmApps/Wasm.Build.Tests/data/RunScriptTemplate.cmd
@@ -1,15 +1,19 @@
@echo off
setlocal enabledelayedexpansion
-set EXECUTION_DIR=%~dp0
-set SCENARIO=%3
+:: SetCommands defined in eng\testing\tests.wasm.targets
+[[SetCommands]]
+[[SetCommandsEcho]]
-cd %EXECUTION_DIR%
+set EXECUTION_DIR=%~dp0
+if [%3] NEQ [] (
+ set SCENARIO=%3
+)
if [%HELIX_WORKITEM_UPLOAD_ROOT%] == [] (
- set XHARNESS_OUT=%EXECUTION_DIR%xharness-output
+ set "XHARNESS_OUT=%EXECUTION_DIR%xharness-output"
) else (
- set XHARNESS_OUT=%HELIX_WORKITEM_UPLOAD_ROOT%\xharness-output
+ set "XHARNESS_OUT=%HELIX_WORKITEM_UPLOAD_ROOT%\xharness-output"
)
if [%XHARNESS_CLI_PATH%] NEQ [] (
@@ -20,16 +24,63 @@ if [%XHARNESS_CLI_PATH%] NEQ [] (
set HARNESS_RUNNER=dotnet.exe xharness
)
+if [%XHARNESS_COMMAND%] == [] (
+ if /I [%SCENARIO%]==[wasmtestonbrowser] (
+ set XHARNESS_COMMAND=test-browser
+ ) else (
+ set XHARNESS_COMMAND=test
+ )
+)
+
+if /I [%XHARNESS_COMMAND%] == [test] (
+ if [%JS_ENGINE%] == [] (
+ if /I [%SCENARIO%] == [wasmtestonnodejs] (
+ set "JS_ENGINE=--engine^=NodeJS"
+ ) else (
+ set "JS_ENGINE=--engine^=V8"
+ )
+ )
+
+ if [%MAIN_JS%] == [] (
+ set "MAIN_JS=--js-file^=test-main.js"
+ )
+
+ if [%JS_ENGINE_ARGS%] == [] (
+ set "JS_ENGINE_ARGS=--engine-arg^=--stack-trace-limit^=1000"
+ )
+) else (
+ if [%BROWSER_PATH%] == [] (
+ set "BROWSER_PATH=--browser-path^=%HELIX_CORRELATION_PAYLOAD%\chrome-win\chrome.exe"
+ )
+)
+
+if [%XHARNESS_ARGS%] == [] (
+ set "XHARNESS_ARGS=%JS_ENGINE% %JS_ENGINE_ARGS% %BROWSER_PATH% %MAIN_JS%"
+)
+
+echo EXECUTION_DIR=%EXECUTION_DIR%
+echo SCENARIO=%SCENARIO%
+echo XHARNESS_OUT=%XHARNESS_OUT%
+echo XHARNESS_CLI_PATH=%XHARNESS_CLI_PATH%
+echo HARNESS_RUNNER=%HARNESS_RUNNER%
+echo XHARNESS_COMMAND=%XHARNESS_COMMAND%
+echo MAIN_JS=%MAIN_JS%
+echo JS_ENGINE=%JS_ENGINE%
+echo JS_ENGINE_ARGS=%JS_ENGINE_ARGS%
+echo XHARNESS_ARGS=%XHARNESS_ARGS%
+
set TEST_LOG_PATH=%XHARNESS_OUT%\logs
:: ========================= BEGIN Test Execution =============================
echo ----- start %DATE% %TIME% =============== To repro directly: =====================================================
echo pushd %EXECUTION_DIR%
+:: RunCommands defined in eng\testing\tests.wasm.targets
[[RunCommandsEcho]]
echo popd
echo ===========================================================================================================
pushd %EXECUTION_DIR%
@echo on
+:: RunCommands defined in eng\testing\tests.wasm.targets
[[RunCommands]]
set EXIT_CODE=%ERRORLEVEL%
@echo off
diff --git a/src/tests/BuildWasmApps/Wasm.Build.Tests/data/RunScriptTemplate.sh b/src/tests/BuildWasmApps/Wasm.Build.Tests/data/RunScriptTemplate.sh
index 7965b10230178e..8a099b9c601363 100644
--- a/src/tests/BuildWasmApps/Wasm.Build.Tests/data/RunScriptTemplate.sh
+++ b/src/tests/BuildWasmApps/Wasm.Build.Tests/data/RunScriptTemplate.sh
@@ -1,8 +1,13 @@
#!/usr/bin/env bash
-EXECUTION_DIR=$(dirname $0)
+# SetCommands defined in eng\testing\tests.wasm.targets
+[[SetCommands]]
+[[SetCommandsEcho]]
-cd $EXECUTION_DIR
+EXECUTION_DIR=$(dirname $0)
+if [[ -n "$3" ]]; then
+ SCENARIO=$3
+fi
if [[ -z "$HELIX_WORKITEM_UPLOAD_ROOT" ]]; then
XHARNESS_OUT="$EXECUTION_DIR/xharness-output"
@@ -18,6 +23,47 @@ else
HARNESS_RUNNER="dotnet xharness"
fi
+if [[ -z "$XHARNESS_COMMAND" ]]; then
+ if [[ "${SCENARIO,,}" == "wasmtestonbrowser" ]]; then
+ XHARNESS_COMMAND="test-browser"
+ else
+ XHARNESS_COMMAND="test"
+ fi
+fi
+
+if [[ "${XHARNESS_COMMAND,,}" == "test" ]]; then
+ if [[ -z "$JS_ENGINE" ]]; then
+ if [[ "${SCENARIO,,}" == "wasmtestonnodejs" ]]; then
+ JS_ENGINE="--engine=NodeJS"
+ else
+ JS_ENGINE="--engine=V8"
+ fi
+ fi
+
+ if [[ -z "$MAIN_JS" ]]; then
+ MAIN_JS="--js-file=test-main.js"
+ fi
+
+ if [[ -z "$JS_ENGINE_ARGS" ]]; then
+ JS_ENGINE_ARGS="--engine-arg=--stack-trace-limit=1000"
+ fi
+fi
+
+if [[ -z "$XHARNESS_ARGS" ]]; then
+ XHARNESS_ARGS="$JS_ENGINE $JS_ENGINE_ARGS $MAIN_JS"
+fi
+
+echo EXECUTION_DIR=$EXECUTION_DIR
+echo SCENARIO=$SCENARIO
+echo XHARNESS_OUT=$XHARNESS_OUT
+echo XHARNESS_CLI_PATH=$XHARNESS_CLI_PATH
+echo HARNESS_RUNNER=$HARNESS_RUNNER
+echo XHARNESS_COMMAND=$XHARNESS_COMMAND
+echo MAIN_JS=$MAIN_JS
+echo JS_ENGINE=$JS_ENGINE
+echo JS_ENGINE_ARGS=$JS_ENGINE_ARGS
+echo XHARNESS_ARGS=$XHARNESS_ARGS
+
function set_env_vars()
{
if [ "x$TEST_USING_WORKLOADS" = "xtrue" ]; then
@@ -36,10 +82,22 @@ function set_env_vars()
export TEST_LOG_PATH=${XHARNESS_OUT}/logs
-[[RunCommands]]
+pushd $EXECUTION_DIR
+# ========================= BEGIN Test Execution =============================
+echo ----- start $(date) =============== To repro directly: =====================================================
+echo pushd $EXECUTION_DIR
+# RunCommands defined in eng\testing\tests.wasm.targets
+[[RunCommandsEcho]]
+echo popd
+echo ===========================================================================================================
+pushd $EXECUTION_DIR
+# RunCommands defined in eng\testing\tests.wasm.targets
+[[RunCommands]]
_exitCode=$?
+popd
+echo ----- end $(date) ----- exit code $_exitCode ----------------------------------------------------------
echo "XHarness artifacts: $XHARNESS_OUT"
-exit $_exitCode
+exit $_exitCode
\ No newline at end of file