Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[wasm] WBT: Use project ids that are safe for use as identifiers #89945

Merged
merged 2 commits into from
Aug 3, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/mono/wasi/Wasi.Build.Tests/BuildTestBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -637,6 +637,8 @@ public void Dispose()
_buildContext.RemoveFromCache(_projectDir, keepDir: s_skipProjectCleanup);
}

public static string GetRandomId() => TestUtils.FixupSymbolName(Path.GetRandomFileName());

private static string GetEnvironmentVariableOrDefault(string envVarName, string defaultValue)
{
string? value = Environment.GetEnvironmentVariable(envVarName);
Expand Down
4 changes: 2 additions & 2 deletions src/mono/wasi/Wasi.Build.Tests/WasiTemplateTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ public WasiTemplateTests(ITestOutputHelper output, SharedBuildPerTestClassFixtur
[InlineData("Release")]
public void ConsoleBuildThenPublish(string config)
{
string id = $"{config}_{Path.GetRandomFileName()}";
string id = $"{config}_{GetRandomId()}";
string projectFile = CreateWasmTemplateProject(id, "wasiconsole");
string projectName = Path.GetFileNameWithoutExtension(projectFile);
File.WriteAllText(Path.Combine(_projectDir!, "Program.cs"), s_simpleMainWithArgs);
Expand Down Expand Up @@ -88,7 +88,7 @@ public static TheoryData<string, bool, bool> TestDataForConsolePublishAndRun()
[MemberData(nameof(TestDataForConsolePublishAndRun))]
public void ConsolePublishAndRunForSingleFileBundle(string config, bool relinking, bool invariantTimezone)
{
string id = $"{config}_{Path.GetRandomFileName()}";
string id = $"{config}_{GetRandomId()}";
string projectFile = CreateWasmTemplateProject(id, "wasiconsole");
string projectName = Path.GetFileNameWithoutExtension(projectFile);
File.WriteAllText(Path.Combine(_projectDir!, "Program.cs"), s_simpleMainWithArgs);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public AppsettingsTests(ITestOutputHelper output, SharedBuildPerTestClassFixture
[Fact]
public async Task FileInVfs()
{
string id = $"blazor_{Path.GetRandomFileName()}";
string id = $"blazor_{GetRandomId()}";
string projectFile = CreateWasmTemplateProject(id, "blazorwasm");

string projectDirectory = Path.GetDirectoryName(projectFile)!;
Expand Down
14 changes: 7 additions & 7 deletions src/mono/wasm/Wasm.Build.Tests/Blazor/BuildPublishTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public BuildPublishTests(ITestOutputHelper output, SharedBuildPerTestClassFixtur
[InlineData("Release")]
public async Task DefaultTemplate_WithoutWorkload(string config)
{
string id = $"blz_no_workload_{config}_{Path.GetRandomFileName()}_{s_unicodeChar}";
string id = $"blz_no_workload_{config}_{GetRandomId()}_{s_unicodeChar}";
CreateBlazorWasmTemplateProject(id);

BlazorBuild(new BlazorBuildOptions(id, config));
Expand All @@ -45,8 +45,8 @@ public void DefaultTemplate_NoAOT_WithWorkload(string config)
// disable relinking tests for Unicode: github.com/emscripten-core/emscripten/issues/17817
// [ActiveIssue("https://github.com/dotnet/runtime/issues/83497")]
string id = config == "Release" ?
$"blz_no_aot_{config}_{Path.GetRandomFileName()}" :
$"blz_no_aot_{config}_{Path.GetRandomFileName()}_{s_unicodeChar}";
$"blz_no_aot_{config}_{GetRandomId()}" :
$"blz_no_aot_{config}_{GetRandomId()}_{s_unicodeChar}";
CreateBlazorWasmTemplateProject(id);

BlazorBuild(new BlazorBuildOptions(id, config, NativeFilesType.FromRuntimePack));
Expand All @@ -68,7 +68,7 @@ public void DefaultTemplate_NoAOT_WithWorkload(string config)
[InlineData("Release", true)]
public void DefaultTemplate_CheckFingerprinting(string config, bool expectFingerprintOnDotnetJs)
{
string id = $"blz_checkfingerprinting_{config}_{Path.GetRandomFileName()}";
string id = $"blz_checkfingerprinting_{config}_{GetRandomId()}";

CreateBlazorWasmTemplateProject(id);

Expand Down Expand Up @@ -172,7 +172,7 @@ async Task TestDllImport(IPage page)
[Fact]
public void BugRegression_60479_WithRazorClassLib()
{
string id = $"blz_razor_lib_top_{Path.GetRandomFileName()}";
string id = $"blz_razor_lib_top_{GetRandomId()}";
InitBlazorWasmProjectDir(id);

string wasmProjectDir = Path.Combine(_projectDir!, "wasm");
Expand Down Expand Up @@ -227,7 +227,7 @@ public void BugRegression_60479_WithRazorClassLib()
[InlineData("Release")]
public async Task BlazorBuildRunTest(string config)
{
string id = $"blazor_{config}_{Path.GetRandomFileName()}";
string id = $"blazor_{config}_{GetRandomId()}";
string projectFile = CreateWasmTemplateProject(id, "blazorwasm");

BlazorBuild(new BlazorBuildOptions(id, config, NativeFilesType.FromRuntimePack));
Expand All @@ -241,7 +241,7 @@ public async Task BlazorBuildRunTest(string config)
[InlineData("Release", true)]
public async Task BlazorPublishRunTest(string config, bool aot)
{
string id = $"blazor_{config}_{Path.GetRandomFileName()}";
string id = $"blazor_{config}_{GetRandomId()}";
string projectFile = CreateWasmTemplateProject(id, "blazorwasm");
if (aot)
AddItemsPropertiesToProject(projectFile, "<RunAOTCompilation>true</RunAOTCompilation>");
Expand Down
4 changes: 2 additions & 2 deletions src/mono/wasm/Wasm.Build.Tests/Blazor/CleanTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ public CleanTests(ITestOutputHelper output, SharedBuildPerTestClassFixture build
[InlineData("Release")]
public void Blazor_BuildThenClean_NativeRelinking(string config)
{
string id = Path.GetRandomFileName();
string id = GetRandomId();

InitBlazorWasmProjectDir(id);
string projectFile = CreateBlazorWasmTemplateProject(id);
Expand Down Expand Up @@ -63,7 +63,7 @@ public void Blazor_BuildNative_ThenBuildNonNative_ThenClean(string config)

private void Blazor_BuildNativeNonNative_ThenCleanTest(string config, bool firstBuildNative)
{
string id = Path.GetRandomFileName();
string id = GetRandomId();

InitBlazorWasmProjectDir(id);
string projectFile = CreateBlazorWasmTemplateProject(id);
Expand Down
4 changes: 2 additions & 2 deletions src/mono/wasm/Wasm.Build.Tests/Blazor/MiscTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public MiscTests(ITestOutputHelper output, SharedBuildPerTestClassFixture buildC
[InlineData("Release", false)]
public void NativeBuild_WithDeployOnBuild_UsedByVS(string config, bool nativeRelink)
{
string id = $"blz_deploy_on_build_{config}_{nativeRelink}_{Path.GetRandomFileName()}";
string id = $"blz_deploy_on_build_{config}_{nativeRelink}_{GetRandomId()}";
string projectFile = CreateProjectWithNativeReference(id);
string extraProperties = config == "Debug"
? ("<EmccLinkOptimizationFlag>-O1</EmccLinkOptimizationFlag>" +
Expand Down Expand Up @@ -57,7 +57,7 @@ public void NativeBuild_WithDeployOnBuild_UsedByVS(string config, bool nativeRel
[InlineData("Release")]
public void DefaultTemplate_AOT_InProjectFile(string config)
{
string id = $"blz_aot_prj_file_{config}_{Path.GetRandomFileName()}";
string id = $"blz_aot_prj_file_{config}_{GetRandomId()}";
string projectFile = CreateBlazorWasmTemplateProject(id);

string extraProperties = config == "Debug"
Expand Down
2 changes: 1 addition & 1 deletion src/mono/wasm/Wasm.Build.Tests/Blazor/MiscTests2.cs
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ public void AOT_And_NativeRef_FailBecauseTheyRequireWorkload(string config)

private CommandResult PublishForRequiresWorkloadTest(string config, string extraItems="", string extraProperties="")
{
string id = $"needs_workload_{config}_{Path.GetRandomFileName()}";
string id = $"needs_workload_{config}_{GetRandomId()}";
CreateBlazorWasmTemplateProject(id);

AddItemsPropertiesToProject(Path.Combine(_projectDir!, $"{id}.csproj"),
Expand Down
6 changes: 3 additions & 3 deletions src/mono/wasm/Wasm.Build.Tests/Blazor/NativeRefTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public NativeTests(ITestOutputHelper output, SharedBuildPerTestClassFixture buil
[ActiveIssue("https://github.com/dotnet/runtime/issues/82725")]
public void WithNativeReference_AOTInProjectFile(string config)
{
string id = $"blz_nativeref_aot_{config}_{Path.GetRandomFileName()}";
string id = $"blz_nativeref_aot_{config}_{GetRandomId()}";
string projectFile = CreateProjectWithNativeReference(id);
string extraProperties = config == "Debug"
? ("<EmccLinkOptimizationFlag>-O1</EmccLinkOptimizationFlag>" +
Expand All @@ -45,7 +45,7 @@ public void WithNativeReference_AOTInProjectFile(string config)
[ActiveIssue("https://github.com/dotnet/runtime/issues/82725")]
public void WithNativeReference_AOTOnCommandLine(string config)
{
string id = $"blz_nativeref_aot_{config}_{Path.GetRandomFileName()}";
string id = $"blz_nativeref_aot_{config}_{GetRandomId()}";
string projectFile = CreateProjectWithNativeReference(id);
string extraProperties = config == "Debug"
? ("<EmccLinkOptimizationFlag>-O1</EmccLinkOptimizationFlag>" +
Expand All @@ -66,7 +66,7 @@ public void WithNativeReference_AOTOnCommandLine(string config)
[InlineData("Release")]
public void BlazorWasm_CanRunMonoAOTCross_WithNoTrimming(string config)
{
string id = $"blazorwasm_{config}_aot_{Path.GetRandomFileName()}";
string id = $"blazorwasm_{config}_aot_{GetRandomId()}";
CreateBlazorWasmTemplateProject(id);

// We don't want to emcc compile, and link ~180 assemblies!
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public NoopNativeRebuildTest(ITestOutputHelper output, SharedBuildPerTestClassFi
[InlineData("Release")]
public void BlazorNoopRebuild(string config)
{
string id = $"blz_rebuild_{config}_{Path.GetRandomFileName()}";
string id = $"blz_rebuild_{config}_{GetRandomId()}";
string projectFile = CreateBlazorWasmTemplateProject(id);
AddItemsPropertiesToProject(projectFile, extraProperties: "<WasmBuildNative>true</WasmBuildNative>");

Expand All @@ -50,7 +50,7 @@ public void BlazorNoopRebuild(string config)
[InlineData("Release")]
public void BlazorOnlyLinkRebuild(string config)
{
string id = $"blz_relink_{config}_{Path.GetRandomFileName()}";
string id = $"blz_relink_{config}_{GetRandomId()}";
string projectFile = CreateBlazorWasmTemplateProject(id);
AddItemsPropertiesToProject(projectFile, extraProperties: "<WasmBuildNative>true</WasmBuildNative>");

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ public SimpleMultiThreadedTests(ITestOutputHelper output, SharedBuildPerTestClas
// [InlineData("Release")]
// public async Task BlazorBuildRunTest(string config)
// {
// string id = $"blazor_mt_{config}_{Path.GetRandomFileName()}";
// string id = $"blazor_mt_{config}_{GetRandomId()}";
// string projectFile = CreateWasmTemplateProject(id, "blazorwasm");

// AddItemsPropertiesToProject(projectFile, "<WasmEnableThreads>true</WasmEnableThreads>");
Expand All @@ -44,7 +44,7 @@ public SimpleMultiThreadedTests(ITestOutputHelper output, SharedBuildPerTestClas
// [InlineData("Release", true)]
public async Task BlazorPublishRunTest(string config, bool aot)
{
string id = $"blazor_mt_{config}_{Path.GetRandomFileName()}";
string id = $"blazor_mt_{config}_{GetRandomId()}";
string projectFile = CreateWasmTemplateProject(id, "blazorwasm");
AddItemsPropertiesToProject(projectFile, "<WasmEnableThreads>true</WasmEnableThreads>");
// if (aot)
Expand Down
3 changes: 3 additions & 0 deletions src/mono/wasm/Wasm.Build.Tests/BuildTestBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ public abstract class BuildTestBase : IClassFixture<SharedBuildPerTestClassFixtu
protected string _nugetPackagesDir = string.Empty;
private ProjectProviderBase _providerOfBaseType;

private static readonly char[] s_charsToReplace = new[] { '.', '-', '+' };
private static bool s_isWindows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows);
// changing Windows's language programistically is complicated and Node is using OS's language to determine
// what is client's preferred locale and then to load corresponding ICU => skip automatic icu testing with Node
Expand Down Expand Up @@ -575,6 +576,8 @@ public void Dispose()
_buildContext.RemoveFromCache(_projectDir, keepDir: s_skipProjectCleanup);
}

public static string GetRandomId() => TestUtils.FixupSymbolName(Path.GetRandomFileName());

internal BuildPaths GetBuildPaths(BuildArgs buildArgs, bool forPublish = true)
{
string objDir = GetObjDir(buildArgs.Config);
Expand Down
4 changes: 2 additions & 2 deletions src/mono/wasm/Wasm.Build.Tests/Common/HelperExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -93,11 +93,11 @@ public static class HelperExtensions
{
IEnumerable<object?> hostsEnumerable = hosts.Enumerate();
if (hosts == RunHost.None)
return data.Select(d => d.Append((object?) Path.GetRandomFileName()));
return data.Select(d => d.Append((object?) BuildTestBase.GetRandomId()));

return data.SelectMany(d =>
{
string runId = Path.GetRandomFileName();
string runId = BuildTestBase.GetRandomId();
return hostsEnumerable.Select(o =>
d.Append((object?)o)
.Append((object?)runId));
Expand Down
30 changes: 30 additions & 0 deletions src/mono/wasm/Wasm.Build.Tests/Common/TestUtils.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using Xunit;
using Xunit.Sdk;

Expand Down Expand Up @@ -82,4 +83,33 @@ public static void AssertEqual(object expected, object actual, string label)
expected, actual,
$"[{label}]\n");
}

private static readonly char[] s_charsToReplace = new[] { '.', '-', '+' };
public static string FixupSymbolName(string name)
{
UTF8Encoding utf8 = new();
byte[] bytes = utf8.GetBytes(name);
StringBuilder sb = new();

foreach (byte b in bytes)
{
if ((b >= (byte)'0' && b <= (byte)'9') ||
(b >= (byte)'a' && b <= (byte)'z') ||
(b >= (byte)'A' && b <= (byte)'Z') ||
(b == (byte)'_'))
{
sb.Append((char)b);
}
else if (s_charsToReplace.Contains((char)b))
{
sb.Append('_');
}
else
{
sb.Append($"_{b:X}_");
}
}

return sb.ToString();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ private void NonWasmConsoleBuild(string config,
string? directoryBuildTargets = null,
bool shouldRun = true)
{
string id = $"nonwasm_{targetFramework}_{config}_{Path.GetRandomFileName()}";
string id = $"nonwasm_{targetFramework}_{config}_{GetRandomId()}";
InitPaths(id);
InitProjectDir(_projectDir);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public NativeBuildTests(ITestOutputHelper output, SharedBuildPerTestClassFixture
[InlineData(false)]
public void BuildWithUndefinedNativeSymbol(bool allowUndefined)
{
string id = $"UndefinedNativeSymbol_{(allowUndefined ? "allowed" : "disabled")}_{Path.GetRandomFileName()}";
string id = $"UndefinedNativeSymbol_{(allowUndefined ? "allowed" : "disabled")}_{GetRandomId()}";

string code = @"
using System;
Expand Down Expand Up @@ -67,7 +67,7 @@ public void BuildWithUndefinedNativeSymbol(bool allowUndefined)
[InlineData("Release")]
public void ProjectWithDllImportsRequiringMarshalIlGen_ArrayTypeParameter(string config)
{
string id = $"dllimport_incompatible_{Path.GetRandomFileName()}";
string id = $"dllimport_incompatible_{GetRandomId()}";
string projectPath = CreateWasmTemplateProject(id, template: "wasmconsole");

string nativeSourceFilename = "incompatible_type.c";
Expand Down
14 changes: 7 additions & 7 deletions src/mono/wasm/Wasm.Build.Tests/Templates/WasmTemplateTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ private void UpdateMainJsEnvironmentVariables(params (string key, string value)[
[InlineData("Release")]
public void BrowserBuildThenPublish(string config)
{
string id = $"browser_{config}_{Path.GetRandomFileName()}";
string id = $"browser_{config}_{GetRandomId()}";
string projectFile = CreateWasmTemplateProject(id, "wasmbrowser");
string projectName = Path.GetFileNameWithoutExtension(projectFile);

Expand Down Expand Up @@ -131,7 +131,7 @@ public void BrowserBuildThenPublish(string config)
[InlineData("Release")]
public void ConsoleBuildThenPublish(string config)
{
string id = $"{config}_{Path.GetRandomFileName()}";
string id = $"{config}_{GetRandomId()}";
string projectFile = CreateWasmTemplateProject(id, "wasmconsole");
string projectName = Path.GetFileNameWithoutExtension(projectFile);

Expand Down Expand Up @@ -196,7 +196,7 @@ public void ConsoleBuildAndRunForSpecificTFM(string config, string extraNewArgs,

private void ConsoleBuildAndRun(string config, bool relinking, string extraNewArgs, string expectedTFM)
{
string id = $"{config}_{Path.GetRandomFileName()}";
string id = $"{config}_{GetRandomId()}";
string projectFile = CreateWasmTemplateProject(id, "wasmconsole", extraNewArgs);
string projectName = Path.GetFileNameWithoutExtension(projectFile);

Expand Down Expand Up @@ -262,7 +262,7 @@ public async Task RunWithDifferentAppBundleLocations(bool forConsole, bool runOu

private async Task BrowserRunTwiceWithAndThenWithoutBuildAsync(string config, string extraProperties = "", bool runOutsideProjectDirectory = false)
{
string id = $"browser_{config}_{Path.GetRandomFileName()}";
string id = $"browser_{config}_{GetRandomId()}";
string projectFile = CreateWasmTemplateProject(id, "wasmbrowser");

UpdateBrowserMainJs(DefaultTargetFramework);
Expand Down Expand Up @@ -295,7 +295,7 @@ private async Task BrowserRunTwiceWithAndThenWithoutBuildAsync(string config, st

private Task ConsoleRunWithAndThenWithoutBuildAsync(string config, string extraProperties = "", bool runOutsideProjectDirectory = false)
{
string id = $"console_{config}_{Path.GetRandomFileName()}";
string id = $"console_{config}_{GetRandomId()}";
string projectFile = CreateWasmTemplateProject(id, "wasmconsole");

UpdateProgramCS();
Expand Down Expand Up @@ -358,7 +358,7 @@ public static TheoryData<string, bool, bool> TestDataForConsolePublishAndRun()
[MemberData(nameof(TestDataForConsolePublishAndRun))]
public void ConsolePublishAndRun(string config, bool aot, bool relinking)
{
string id = $"{config}_{Path.GetRandomFileName()}";
string id = $"{config}_{GetRandomId()}";
string projectFile = CreateWasmTemplateProject(id, "wasmconsole");
string projectName = Path.GetFileNameWithoutExtension(projectFile);

Expand Down Expand Up @@ -416,7 +416,7 @@ public void ConsolePublishAndRun(string config, bool aot, bool relinking)
public async Task BrowserBuildAndRun(string extraNewArgs, string targetFramework, string runtimeAssetsRelativePath)
{
string config = "Debug";
string id = $"browser_{config}_{Path.GetRandomFileName()}";
string id = $"browser_{config}_{GetRandomId()}";
CreateWasmTemplateProject(id, "wasmbrowser", extraNewArgs);

UpdateBrowserMainJs(targetFramework, runtimeAssetsRelativePath);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ protected AppTestBase(ITestOutputHelper output, SharedBuildPerTestClassFixture b

protected void CopyTestAsset(string assetName, string generatedProjectNamePrefix = null)
{
Id = $"{generatedProjectNamePrefix ?? assetName}_{Path.GetRandomFileName()}";
Id = $"{generatedProjectNamePrefix ?? assetName}_{GetRandomId()}";
InitBlazorWasmProjectDir(Id);

LogPath = Path.Combine(s_buildEnv.LogRootPath, Id);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ private string CheckWasmNativeDefaultValue(string projectName,
insertAtEnd: printValueTarget);

(_, string output) = BuildProject(buildArgs,
id: Path.GetRandomFileName(),
id: GetRandomId(),
new BuildProjectOptions(
InitProject: () => File.WriteAllText(Path.Combine(_projectDir!, "Program.cs"), s_mainReturns42),
DotnetWasmFromRuntimePack: dotnetWasmFromRuntimePack,
Expand Down
Loading
Loading