Run trimming tests as AOT tests - #101229

Merged
MichalStrehovsky merged 6 commits into
dotnet:mainfrom
MichalStrehovsky:aottests
Apr 22, 2024
Merged

Run trimming tests as AOT tests#101229
MichalStrehovsky merged 6 commits into
dotnet:mainfrom
MichalStrehovsky:aottests

Conversation

@MichalStrehovsky

@MichalStrehovskyMichalStrehovsky commented Apr 18, 2024

Copy link
Copy Markdown
Member

Not everything is passing, so I baselined this. Some we'll probably exclude permanently, others are more concerning and we need to determine if it's test issues or product issues.

Cc @dotnet/ilc-contrib

Not everything is passing, so I baselined this. Some we'll probably exclude permanently, others are more concerning and we need to determine if it's test issues or product issues.
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-infrastructure-libraries
See info in area-owners.md if you want to be subscribed.

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-nativeaot-outerloop

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

Comment threadsrc/libraries/tests.proj Outdated
<DisabledNativeAotTestAppProjects Include="$(MSBuildThisFileDirectory)\System.Runtime\tests\System.Runtime.Tests\TrimmingTests\System.Runtime.TrimmingTests.proj" />
<DisabledNativeAotTestAppProjects Include="$(MSBuildThisFileDirectory)\System.Text.Json\tests\System.Text.Json.Tests\TrimmingTests\System.Text.Json.TrimmingTests.proj" />

<NativeAotTestAppProjects Include="$(MSBuildThisFileDirectory)*\tests\**\*.NativeAotTests.proj;$(MSBuildThisFileDirectory)*\tests\**\*.TrimmingTests.proj"

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we just get rid of the NativeAotTests.proj extension (there is only 1 currently in the repo) and instead just have TrimmingTests.proj, which are run as both PublishTrimmed and PublishAot?

@MichalStrehovskyMichalStrehovskyApr 18, 2024

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you don't have concerns about running the NativeAotTests with trimming as well, that sounds good to me too.

Trimming is generally a subset of AOT.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the only NativeAotTests today:

publicstaticintMain()
{
DiagnosticSourcediagnosticSource=newDiagnosticListener("TestDiagnosticListener");
using(varlistener=newTestEventListener())
{
vardata=newEventData()
{
Id=Guid.NewGuid(),
};
Write(diagnosticSource,"Test.Start",data);
if(!(listener.LogDataPayload?.Count==3&&
(string)listener.LogDataPayload[0]=="TestDiagnosticListener"&&
(string)listener.LogDataPayload[1]=="Test.Start"))
{
return-1;
}
object[]args=(object[])listener.LogDataPayload[2];
if(args.Length!=2)
{
return-2;
}
IDictionary<string,object>arg=(IDictionary<string,object>)args[0];
if(!((string)arg["Key"]=="Id"&&(string)arg["Value"]==data.Id.ToString()))
{
return-3;
}
arg=(IDictionary<string,object>)args[1];
if(!((string)arg["Key"]=="*Enumerate"&&(string)arg["Value"]=="1,2,3"))
{
return-4;
}
return100;
}
}

It should work just fine with PublishTrimmed. It was written to test the MakeGenericType deep inside of DiagnosticSourceEventSource works with NativeAOT.

I think it would be best to just have 1 "kind of test" and it runs for both PublishTrimmed and PublishAot. It will make it easier to write these, and it will add a bit of coverage to both scenarios.

<MSBuild Projects="@(TestConsoleApps)"
Targets="Publish"
Properties="Configuration=$(Configuration);BuildProjectReferences=false;TargetOS=$(TargetOS);TargetArchitecture=$(TargetArchitecture)" />
Properties="Configuration=$(Configuration);BuildProjectReferences=false;TargetOS=$(TargetOS);TargetArchitecture=$(TargetArchitecture);_IsPublishing=true" />

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this change necessary?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The tests weren't building because they couldn't find AppHost. This is running the Publish target directly, which is very problematic because it bypasses logic in the SDK. We have been having a conversation with the SDK team for months. The fix is to do what real publish does and that's setting _IsPublishing. We do that in multiple places in this repo even though it's used/defined by the SDK.

@eerhardteerhardt left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Thank you for making this happen.

<_additionalPropertiesString>@(_propertiesAsItems->'&lt;%(Identity)&gt;%(Value)&lt;/%(Identity)&gt;', '%0a ')</_additionalPropertiesString>
</PropertyGroup>

<!-- RunNativeAotTestApps trumps TestTrimming, same as PublishAot trumps PublishTrimmed -->

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(nit) this comment doesn't align with the code. The comment says one trumps the other. The code says if they are both true it is an error.

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

/ba-g slow mac

@MichalStrehovsky
MichalStrehovsky merged commit d8eecb7 into dotnet:mainApr 22, 2024
@MichalStrehovsky
MichalStrehovsky deleted the aottests branch April 22, 2024 09:44
matouskozak pushed a commit to matouskozak/runtime that referenced this pull request Apr 30, 2024
Not everything is passing, so I baselined this. Some we'll probably exclude permanently, others are more concerning and we need to determine if it's test issues or product issues.
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 23, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@MichalStrehovsky@eerhardt
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Run trimming tests as AOT tests - #101229

Merged
MichalStrehovsky merged 6 commits into
dotnet:mainfrom
MichalStrehovsky:aottests
Apr 22, 2024
Merged

Run trimming tests as AOT tests#101229
MichalStrehovsky merged 6 commits into
dotnet:mainfrom
MichalStrehovsky:aottests

Conversation

@MichalStrehovsky

@MichalStrehovskyMichalStrehovsky commented Apr 18, 2024

Copy link
Copy Markdown
Member

Not everything is passing, so I baselined this. Some we'll probably exclude permanently, others are more concerning and we need to determine if it's test issues or product issues.

Cc @dotnet/ilc-contrib

Not everything is passing, so I baselined this. Some we'll probably exclude permanently, others are more concerning and we need to determine if it's test issues or product issues.
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-infrastructure-libraries
See info in area-owners.md if you want to be subscribed.

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-nativeaot-outerloop

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

Comment threadsrc/libraries/tests.proj Outdated
<DisabledNativeAotTestAppProjects Include="$(MSBuildThisFileDirectory)\System.Runtime\tests\System.Runtime.Tests\TrimmingTests\System.Runtime.TrimmingTests.proj" />
<DisabledNativeAotTestAppProjects Include="$(MSBuildThisFileDirectory)\System.Text.Json\tests\System.Text.Json.Tests\TrimmingTests\System.Text.Json.TrimmingTests.proj" />

<NativeAotTestAppProjects Include="$(MSBuildThisFileDirectory)*\tests\**\*.NativeAotTests.proj;$(MSBuildThisFileDirectory)*\tests\**\*.TrimmingTests.proj"

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we just get rid of the NativeAotTests.proj extension (there is only 1 currently in the repo) and instead just have TrimmingTests.proj, which are run as both PublishTrimmed and PublishAot?

@MichalStrehovskyMichalStrehovskyApr 18, 2024

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you don't have concerns about running the NativeAotTests with trimming as well, that sounds good to me too.

Trimming is generally a subset of AOT.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the only NativeAotTests today:

publicstaticintMain()
{
DiagnosticSourcediagnosticSource=newDiagnosticListener("TestDiagnosticListener");
using(varlistener=newTestEventListener())
{
vardata=newEventData()
{
Id=Guid.NewGuid(),
};
Write(diagnosticSource,"Test.Start",data);
if(!(listener.LogDataPayload?.Count==3&&
(string)listener.LogDataPayload[0]=="TestDiagnosticListener"&&
(string)listener.LogDataPayload[1]=="Test.Start"))
{
return-1;
}
object[]args=(object[])listener.LogDataPayload[2];
if(args.Length!=2)
{
return-2;
}
IDictionary<string,object>arg=(IDictionary<string,object>)args[0];
if(!((string)arg["Key"]=="Id"&&(string)arg["Value"]==data.Id.ToString()))
{
return-3;
}
arg=(IDictionary<string,object>)args[1];
if(!((string)arg["Key"]=="*Enumerate"&&(string)arg["Value"]=="1,2,3"))
{
return-4;
}
return100;
}
}

It should work just fine with PublishTrimmed. It was written to test the MakeGenericType deep inside of DiagnosticSourceEventSource works with NativeAOT.

I think it would be best to just have 1 "kind of test" and it runs for both PublishTrimmed and PublishAot. It will make it easier to write these, and it will add a bit of coverage to both scenarios.

<MSBuild Projects="@(TestConsoleApps)"
Targets="Publish"
Properties="Configuration=$(Configuration);BuildProjectReferences=false;TargetOS=$(TargetOS);TargetArchitecture=$(TargetArchitecture)" />
Properties="Configuration=$(Configuration);BuildProjectReferences=false;TargetOS=$(TargetOS);TargetArchitecture=$(TargetArchitecture);_IsPublishing=true" />

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this change necessary?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The tests weren't building because they couldn't find AppHost. This is running the Publish target directly, which is very problematic because it bypasses logic in the SDK. We have been having a conversation with the SDK team for months. The fix is to do what real publish does and that's setting _IsPublishing. We do that in multiple places in this repo even though it's used/defined by the SDK.

@eerhardteerhardt left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Thank you for making this happen.

<_additionalPropertiesString>@(_propertiesAsItems->'&lt;%(Identity)&gt;%(Value)&lt;/%(Identity)&gt;', '%0a ')</_additionalPropertiesString>
</PropertyGroup>

<!-- RunNativeAotTestApps trumps TestTrimming, same as PublishAot trumps PublishTrimmed -->

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(nit) this comment doesn't align with the code. The comment says one trumps the other. The code says if they are both true it is an error.

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

/ba-g slow mac

@MichalStrehovsky
MichalStrehovsky merged commit d8eecb7 into dotnet:mainApr 22, 2024
@MichalStrehovsky
MichalStrehovsky deleted the aottests branch April 22, 2024 09:44
matouskozak pushed a commit to matouskozak/runtime that referenced this pull request Apr 30, 2024
Not everything is passing, so I baselined this. Some we'll probably exclude permanently, others are more concerning and we need to determine if it's test issues or product issues.
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 23, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@MichalStrehovsky@eerhardt
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Run trimming tests as AOT tests - #101229

Merged
MichalStrehovsky merged 6 commits into
dotnet:mainfrom
MichalStrehovsky:aottests
Apr 22, 2024
Merged

Run trimming tests as AOT tests#101229
MichalStrehovsky merged 6 commits into
dotnet:mainfrom
MichalStrehovsky:aottests

Conversation

@MichalStrehovsky

@MichalStrehovskyMichalStrehovsky commented Apr 18, 2024

Copy link
Copy Markdown
Member

Not everything is passing, so I baselined this. Some we'll probably exclude permanently, others are more concerning and we need to determine if it's test issues or product issues.

Cc @dotnet/ilc-contrib

Not everything is passing, so I baselined this. Some we'll probably exclude permanently, others are more concerning and we need to determine if it's test issues or product issues.
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-infrastructure-libraries
See info in area-owners.md if you want to be subscribed.

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-nativeaot-outerloop

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

Comment threadsrc/libraries/tests.proj Outdated
<DisabledNativeAotTestAppProjects Include="$(MSBuildThisFileDirectory)\System.Runtime\tests\System.Runtime.Tests\TrimmingTests\System.Runtime.TrimmingTests.proj" />
<DisabledNativeAotTestAppProjects Include="$(MSBuildThisFileDirectory)\System.Text.Json\tests\System.Text.Json.Tests\TrimmingTests\System.Text.Json.TrimmingTests.proj" />

<NativeAotTestAppProjects Include="$(MSBuildThisFileDirectory)*\tests\**\*.NativeAotTests.proj;$(MSBuildThisFileDirectory)*\tests\**\*.TrimmingTests.proj"

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we just get rid of the NativeAotTests.proj extension (there is only 1 currently in the repo) and instead just have TrimmingTests.proj, which are run as both PublishTrimmed and PublishAot?

@MichalStrehovskyMichalStrehovskyApr 18, 2024

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you don't have concerns about running the NativeAotTests with trimming as well, that sounds good to me too.

Trimming is generally a subset of AOT.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the only NativeAotTests today:

publicstaticintMain()
{
DiagnosticSourcediagnosticSource=newDiagnosticListener("TestDiagnosticListener");
using(varlistener=newTestEventListener())
{
vardata=newEventData()
{
Id=Guid.NewGuid(),
};
Write(diagnosticSource,"Test.Start",data);
if(!(listener.LogDataPayload?.Count==3&&
(string)listener.LogDataPayload[0]=="TestDiagnosticListener"&&
(string)listener.LogDataPayload[1]=="Test.Start"))
{
return-1;
}
object[]args=(object[])listener.LogDataPayload[2];
if(args.Length!=2)
{
return-2;
}
IDictionary<string,object>arg=(IDictionary<string,object>)args[0];
if(!((string)arg["Key"]=="Id"&&(string)arg["Value"]==data.Id.ToString()))
{
return-3;
}
arg=(IDictionary<string,object>)args[1];
if(!((string)arg["Key"]=="*Enumerate"&&(string)arg["Value"]=="1,2,3"))
{
return-4;
}
return100;
}
}

It should work just fine with PublishTrimmed. It was written to test the MakeGenericType deep inside of DiagnosticSourceEventSource works with NativeAOT.

I think it would be best to just have 1 "kind of test" and it runs for both PublishTrimmed and PublishAot. It will make it easier to write these, and it will add a bit of coverage to both scenarios.

<MSBuild Projects="@(TestConsoleApps)"
Targets="Publish"
Properties="Configuration=$(Configuration);BuildProjectReferences=false;TargetOS=$(TargetOS);TargetArchitecture=$(TargetArchitecture)" />
Properties="Configuration=$(Configuration);BuildProjectReferences=false;TargetOS=$(TargetOS);TargetArchitecture=$(TargetArchitecture);_IsPublishing=true" />

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this change necessary?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The tests weren't building because they couldn't find AppHost. This is running the Publish target directly, which is very problematic because it bypasses logic in the SDK. We have been having a conversation with the SDK team for months. The fix is to do what real publish does and that's setting _IsPublishing. We do that in multiple places in this repo even though it's used/defined by the SDK.

@eerhardteerhardt left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Thank you for making this happen.

<_additionalPropertiesString>@(_propertiesAsItems->'&lt;%(Identity)&gt;%(Value)&lt;/%(Identity)&gt;', '%0a ')</_additionalPropertiesString>
</PropertyGroup>

<!-- RunNativeAotTestApps trumps TestTrimming, same as PublishAot trumps PublishTrimmed -->

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(nit) this comment doesn't align with the code. The comment says one trumps the other. The code says if they are both true it is an error.

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

/ba-g slow mac

@MichalStrehovsky
MichalStrehovsky merged commit d8eecb7 into dotnet:mainApr 22, 2024
@MichalStrehovsky
MichalStrehovsky deleted the aottests branch April 22, 2024 09:44
matouskozak pushed a commit to matouskozak/runtime that referenced this pull request Apr 30, 2024
Not everything is passing, so I baselined this. Some we'll probably exclude permanently, others are more concerning and we need to determine if it's test issues or product issues.
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 23, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@MichalStrehovsky@eerhardt
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Run trimming tests as AOT tests - #101229

Merged
MichalStrehovsky merged 6 commits into
dotnet:mainfrom
MichalStrehovsky:aottests
Apr 22, 2024
Merged

Run trimming tests as AOT tests#101229
MichalStrehovsky merged 6 commits into
dotnet:mainfrom
MichalStrehovsky:aottests

Conversation

@MichalStrehovsky

@MichalStrehovskyMichalStrehovsky commented Apr 18, 2024

Copy link
Copy Markdown
Member

Not everything is passing, so I baselined this. Some we'll probably exclude permanently, others are more concerning and we need to determine if it's test issues or product issues.

Cc @dotnet/ilc-contrib

Not everything is passing, so I baselined this. Some we'll probably exclude permanently, others are more concerning and we need to determine if it's test issues or product issues.
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-infrastructure-libraries
See info in area-owners.md if you want to be subscribed.

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-nativeaot-outerloop

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

Comment threadsrc/libraries/tests.proj Outdated
<DisabledNativeAotTestAppProjects Include="$(MSBuildThisFileDirectory)\System.Runtime\tests\System.Runtime.Tests\TrimmingTests\System.Runtime.TrimmingTests.proj" />
<DisabledNativeAotTestAppProjects Include="$(MSBuildThisFileDirectory)\System.Text.Json\tests\System.Text.Json.Tests\TrimmingTests\System.Text.Json.TrimmingTests.proj" />

<NativeAotTestAppProjects Include="$(MSBuildThisFileDirectory)*\tests\**\*.NativeAotTests.proj;$(MSBuildThisFileDirectory)*\tests\**\*.TrimmingTests.proj"

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we just get rid of the NativeAotTests.proj extension (there is only 1 currently in the repo) and instead just have TrimmingTests.proj, which are run as both PublishTrimmed and PublishAot?

@MichalStrehovskyMichalStrehovskyApr 18, 2024

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you don't have concerns about running the NativeAotTests with trimming as well, that sounds good to me too.

Trimming is generally a subset of AOT.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the only NativeAotTests today:

publicstaticintMain()
{
DiagnosticSourcediagnosticSource=newDiagnosticListener("TestDiagnosticListener");
using(varlistener=newTestEventListener())
{
vardata=newEventData()
{
Id=Guid.NewGuid(),
};
Write(diagnosticSource,"Test.Start",data);
if(!(listener.LogDataPayload?.Count==3&&
(string)listener.LogDataPayload[0]=="TestDiagnosticListener"&&
(string)listener.LogDataPayload[1]=="Test.Start"))
{
return-1;
}
object[]args=(object[])listener.LogDataPayload[2];
if(args.Length!=2)
{
return-2;
}
IDictionary<string,object>arg=(IDictionary<string,object>)args[0];
if(!((string)arg["Key"]=="Id"&&(string)arg["Value"]==data.Id.ToString()))
{
return-3;
}
arg=(IDictionary<string,object>)args[1];
if(!((string)arg["Key"]=="*Enumerate"&&(string)arg["Value"]=="1,2,3"))
{
return-4;
}
return100;
}
}

It should work just fine with PublishTrimmed. It was written to test the MakeGenericType deep inside of DiagnosticSourceEventSource works with NativeAOT.

I think it would be best to just have 1 "kind of test" and it runs for both PublishTrimmed and PublishAot. It will make it easier to write these, and it will add a bit of coverage to both scenarios.

<MSBuild Projects="@(TestConsoleApps)"
Targets="Publish"
Properties="Configuration=$(Configuration);BuildProjectReferences=false;TargetOS=$(TargetOS);TargetArchitecture=$(TargetArchitecture)" />
Properties="Configuration=$(Configuration);BuildProjectReferences=false;TargetOS=$(TargetOS);TargetArchitecture=$(TargetArchitecture);_IsPublishing=true" />

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this change necessary?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The tests weren't building because they couldn't find AppHost. This is running the Publish target directly, which is very problematic because it bypasses logic in the SDK. We have been having a conversation with the SDK team for months. The fix is to do what real publish does and that's setting _IsPublishing. We do that in multiple places in this repo even though it's used/defined by the SDK.

@eerhardteerhardt left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Thank you for making this happen.

<_additionalPropertiesString>@(_propertiesAsItems->'&lt;%(Identity)&gt;%(Value)&lt;/%(Identity)&gt;', '%0a ')</_additionalPropertiesString>
</PropertyGroup>

<!-- RunNativeAotTestApps trumps TestTrimming, same as PublishAot trumps PublishTrimmed -->

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(nit) this comment doesn't align with the code. The comment says one trumps the other. The code says if they are both true it is an error.

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

/ba-g slow mac

@MichalStrehovsky
MichalStrehovsky merged commit d8eecb7 into dotnet:mainApr 22, 2024
@MichalStrehovsky
MichalStrehovsky deleted the aottests branch April 22, 2024 09:44
matouskozak pushed a commit to matouskozak/runtime that referenced this pull request Apr 30, 2024
Not everything is passing, so I baselined this. Some we'll probably exclude permanently, others are more concerning and we need to determine if it's test issues or product issues.
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 23, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@MichalStrehovsky@eerhardt
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Run trimming tests as AOT tests - #101229

Merged
MichalStrehovsky merged 6 commits into
dotnet:mainfrom
MichalStrehovsky:aottests
Apr 22, 2024
Merged

Run trimming tests as AOT tests#101229
MichalStrehovsky merged 6 commits into
dotnet:mainfrom
MichalStrehovsky:aottests

Conversation

@MichalStrehovsky

@MichalStrehovskyMichalStrehovsky commented Apr 18, 2024

Copy link
Copy Markdown
Member

Not everything is passing, so I baselined this. Some we'll probably exclude permanently, others are more concerning and we need to determine if it's test issues or product issues.

Cc @dotnet/ilc-contrib

Not everything is passing, so I baselined this. Some we'll probably exclude permanently, others are more concerning and we need to determine if it's test issues or product issues.
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-infrastructure-libraries
See info in area-owners.md if you want to be subscribed.

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-nativeaot-outerloop

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

Comment threadsrc/libraries/tests.proj Outdated
<DisabledNativeAotTestAppProjects Include="$(MSBuildThisFileDirectory)\System.Runtime\tests\System.Runtime.Tests\TrimmingTests\System.Runtime.TrimmingTests.proj" />
<DisabledNativeAotTestAppProjects Include="$(MSBuildThisFileDirectory)\System.Text.Json\tests\System.Text.Json.Tests\TrimmingTests\System.Text.Json.TrimmingTests.proj" />

<NativeAotTestAppProjects Include="$(MSBuildThisFileDirectory)*\tests\**\*.NativeAotTests.proj;$(MSBuildThisFileDirectory)*\tests\**\*.TrimmingTests.proj"

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we just get rid of the NativeAotTests.proj extension (there is only 1 currently in the repo) and instead just have TrimmingTests.proj, which are run as both PublishTrimmed and PublishAot?

@MichalStrehovskyMichalStrehovskyApr 18, 2024

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you don't have concerns about running the NativeAotTests with trimming as well, that sounds good to me too.

Trimming is generally a subset of AOT.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the only NativeAotTests today:

publicstaticintMain()
{
DiagnosticSourcediagnosticSource=newDiagnosticListener("TestDiagnosticListener");
using(varlistener=newTestEventListener())
{
vardata=newEventData()
{
Id=Guid.NewGuid(),
};
Write(diagnosticSource,"Test.Start",data);
if(!(listener.LogDataPayload?.Count==3&&
(string)listener.LogDataPayload[0]=="TestDiagnosticListener"&&
(string)listener.LogDataPayload[1]=="Test.Start"))
{
return-1;
}
object[]args=(object[])listener.LogDataPayload[2];
if(args.Length!=2)
{
return-2;
}
IDictionary<string,object>arg=(IDictionary<string,object>)args[0];
if(!((string)arg["Key"]=="Id"&&(string)arg["Value"]==data.Id.ToString()))
{
return-3;
}
arg=(IDictionary<string,object>)args[1];
if(!((string)arg["Key"]=="*Enumerate"&&(string)arg["Value"]=="1,2,3"))
{
return-4;
}
return100;
}
}

It should work just fine with PublishTrimmed. It was written to test the MakeGenericType deep inside of DiagnosticSourceEventSource works with NativeAOT.

I think it would be best to just have 1 "kind of test" and it runs for both PublishTrimmed and PublishAot. It will make it easier to write these, and it will add a bit of coverage to both scenarios.

<MSBuild Projects="@(TestConsoleApps)"
Targets="Publish"
Properties="Configuration=$(Configuration);BuildProjectReferences=false;TargetOS=$(TargetOS);TargetArchitecture=$(TargetArchitecture)" />
Properties="Configuration=$(Configuration);BuildProjectReferences=false;TargetOS=$(TargetOS);TargetArchitecture=$(TargetArchitecture);_IsPublishing=true" />

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this change necessary?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The tests weren't building because they couldn't find AppHost. This is running the Publish target directly, which is very problematic because it bypasses logic in the SDK. We have been having a conversation with the SDK team for months. The fix is to do what real publish does and that's setting _IsPublishing. We do that in multiple places in this repo even though it's used/defined by the SDK.

@eerhardteerhardt left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Thank you for making this happen.

<_additionalPropertiesString>@(_propertiesAsItems->'&lt;%(Identity)&gt;%(Value)&lt;/%(Identity)&gt;', '%0a ')</_additionalPropertiesString>
</PropertyGroup>

<!-- RunNativeAotTestApps trumps TestTrimming, same as PublishAot trumps PublishTrimmed -->

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(nit) this comment doesn't align with the code. The comment says one trumps the other. The code says if they are both true it is an error.

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

/ba-g slow mac

@MichalStrehovsky
MichalStrehovsky merged commit d8eecb7 into dotnet:mainApr 22, 2024
@MichalStrehovsky
MichalStrehovsky deleted the aottests branch April 22, 2024 09:44
matouskozak pushed a commit to matouskozak/runtime that referenced this pull request Apr 30, 2024
Not everything is passing, so I baselined this. Some we'll probably exclude permanently, others are more concerning and we need to determine if it's test issues or product issues.
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 23, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@MichalStrehovsky@eerhardt
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Run trimming tests as AOT tests - #101229

Merged
MichalStrehovsky merged 6 commits into
dotnet:mainfrom
MichalStrehovsky:aottests
Apr 22, 2024
Merged

Run trimming tests as AOT tests#101229
MichalStrehovsky merged 6 commits into
dotnet:mainfrom
MichalStrehovsky:aottests

Conversation

@MichalStrehovsky

@MichalStrehovskyMichalStrehovsky commented Apr 18, 2024

Copy link
Copy Markdown
Member

Not everything is passing, so I baselined this. Some we'll probably exclude permanently, others are more concerning and we need to determine if it's test issues or product issues.

Cc @dotnet/ilc-contrib

Not everything is passing, so I baselined this. Some we'll probably exclude permanently, others are more concerning and we need to determine if it's test issues or product issues.
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-infrastructure-libraries
See info in area-owners.md if you want to be subscribed.

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-nativeaot-outerloop

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

Comment threadsrc/libraries/tests.proj Outdated
<DisabledNativeAotTestAppProjects Include="$(MSBuildThisFileDirectory)\System.Runtime\tests\System.Runtime.Tests\TrimmingTests\System.Runtime.TrimmingTests.proj" />
<DisabledNativeAotTestAppProjects Include="$(MSBuildThisFileDirectory)\System.Text.Json\tests\System.Text.Json.Tests\TrimmingTests\System.Text.Json.TrimmingTests.proj" />

<NativeAotTestAppProjects Include="$(MSBuildThisFileDirectory)*\tests\**\*.NativeAotTests.proj;$(MSBuildThisFileDirectory)*\tests\**\*.TrimmingTests.proj"

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we just get rid of the NativeAotTests.proj extension (there is only 1 currently in the repo) and instead just have TrimmingTests.proj, which are run as both PublishTrimmed and PublishAot?

@MichalStrehovskyMichalStrehovskyApr 18, 2024

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you don't have concerns about running the NativeAotTests with trimming as well, that sounds good to me too.

Trimming is generally a subset of AOT.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the only NativeAotTests today:

publicstaticintMain()
{
DiagnosticSourcediagnosticSource=newDiagnosticListener("TestDiagnosticListener");
using(varlistener=newTestEventListener())
{
vardata=newEventData()
{
Id=Guid.NewGuid(),
};
Write(diagnosticSource,"Test.Start",data);
if(!(listener.LogDataPayload?.Count==3&&
(string)listener.LogDataPayload[0]=="TestDiagnosticListener"&&
(string)listener.LogDataPayload[1]=="Test.Start"))
{
return-1;
}
object[]args=(object[])listener.LogDataPayload[2];
if(args.Length!=2)
{
return-2;
}
IDictionary<string,object>arg=(IDictionary<string,object>)args[0];
if(!((string)arg["Key"]=="Id"&&(string)arg["Value"]==data.Id.ToString()))
{
return-3;
}
arg=(IDictionary<string,object>)args[1];
if(!((string)arg["Key"]=="*Enumerate"&&(string)arg["Value"]=="1,2,3"))
{
return-4;
}
return100;
}
}

It should work just fine with PublishTrimmed. It was written to test the MakeGenericType deep inside of DiagnosticSourceEventSource works with NativeAOT.

I think it would be best to just have 1 "kind of test" and it runs for both PublishTrimmed and PublishAot. It will make it easier to write these, and it will add a bit of coverage to both scenarios.

<MSBuild Projects="@(TestConsoleApps)"
Targets="Publish"
Properties="Configuration=$(Configuration);BuildProjectReferences=false;TargetOS=$(TargetOS);TargetArchitecture=$(TargetArchitecture)" />
Properties="Configuration=$(Configuration);BuildProjectReferences=false;TargetOS=$(TargetOS);TargetArchitecture=$(TargetArchitecture);_IsPublishing=true" />

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this change necessary?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The tests weren't building because they couldn't find AppHost. This is running the Publish target directly, which is very problematic because it bypasses logic in the SDK. We have been having a conversation with the SDK team for months. The fix is to do what real publish does and that's setting _IsPublishing. We do that in multiple places in this repo even though it's used/defined by the SDK.

@eerhardteerhardt left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Thank you for making this happen.

<_additionalPropertiesString>@(_propertiesAsItems->'&lt;%(Identity)&gt;%(Value)&lt;/%(Identity)&gt;', '%0a ')</_additionalPropertiesString>
</PropertyGroup>

<!-- RunNativeAotTestApps trumps TestTrimming, same as PublishAot trumps PublishTrimmed -->

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(nit) this comment doesn't align with the code. The comment says one trumps the other. The code says if they are both true it is an error.

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

/ba-g slow mac

@MichalStrehovsky
MichalStrehovsky merged commit d8eecb7 into dotnet:mainApr 22, 2024
@MichalStrehovsky
MichalStrehovsky deleted the aottests branch April 22, 2024 09:44
matouskozak pushed a commit to matouskozak/runtime that referenced this pull request Apr 30, 2024
Not everything is passing, so I baselined this. Some we'll probably exclude permanently, others are more concerning and we need to determine if it's test issues or product issues.
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 23, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@MichalStrehovsky@eerhardt
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Run trimming tests as AOT tests - #101229

Merged
MichalStrehovsky merged 6 commits into
dotnet:mainfrom
MichalStrehovsky:aottests
Apr 22, 2024
Merged

Run trimming tests as AOT tests#101229
MichalStrehovsky merged 6 commits into
dotnet:mainfrom
MichalStrehovsky:aottests

Conversation

@MichalStrehovsky

@MichalStrehovskyMichalStrehovsky commented Apr 18, 2024

Copy link
Copy Markdown
Member

Not everything is passing, so I baselined this. Some we'll probably exclude permanently, others are more concerning and we need to determine if it's test issues or product issues.

Cc @dotnet/ilc-contrib

Not everything is passing, so I baselined this. Some we'll probably exclude permanently, others are more concerning and we need to determine if it's test issues or product issues.
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-infrastructure-libraries
See info in area-owners.md if you want to be subscribed.

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-nativeaot-outerloop

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

Comment threadsrc/libraries/tests.proj Outdated
<DisabledNativeAotTestAppProjects Include="$(MSBuildThisFileDirectory)\System.Runtime\tests\System.Runtime.Tests\TrimmingTests\System.Runtime.TrimmingTests.proj" />
<DisabledNativeAotTestAppProjects Include="$(MSBuildThisFileDirectory)\System.Text.Json\tests\System.Text.Json.Tests\TrimmingTests\System.Text.Json.TrimmingTests.proj" />

<NativeAotTestAppProjects Include="$(MSBuildThisFileDirectory)*\tests\**\*.NativeAotTests.proj;$(MSBuildThisFileDirectory)*\tests\**\*.TrimmingTests.proj"

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we just get rid of the NativeAotTests.proj extension (there is only 1 currently in the repo) and instead just have TrimmingTests.proj, which are run as both PublishTrimmed and PublishAot?

@MichalStrehovskyMichalStrehovskyApr 18, 2024

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you don't have concerns about running the NativeAotTests with trimming as well, that sounds good to me too.

Trimming is generally a subset of AOT.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the only NativeAotTests today:

publicstaticintMain()
{
DiagnosticSourcediagnosticSource=newDiagnosticListener("TestDiagnosticListener");
using(varlistener=newTestEventListener())
{
vardata=newEventData()
{
Id=Guid.NewGuid(),
};
Write(diagnosticSource,"Test.Start",data);
if(!(listener.LogDataPayload?.Count==3&&
(string)listener.LogDataPayload[0]=="TestDiagnosticListener"&&
(string)listener.LogDataPayload[1]=="Test.Start"))
{
return-1;
}
object[]args=(object[])listener.LogDataPayload[2];
if(args.Length!=2)
{
return-2;
}
IDictionary<string,object>arg=(IDictionary<string,object>)args[0];
if(!((string)arg["Key"]=="Id"&&(string)arg["Value"]==data.Id.ToString()))
{
return-3;
}
arg=(IDictionary<string,object>)args[1];
if(!((string)arg["Key"]=="*Enumerate"&&(string)arg["Value"]=="1,2,3"))
{
return-4;
}
return100;
}
}

It should work just fine with PublishTrimmed. It was written to test the MakeGenericType deep inside of DiagnosticSourceEventSource works with NativeAOT.

I think it would be best to just have 1 "kind of test" and it runs for both PublishTrimmed and PublishAot. It will make it easier to write these, and it will add a bit of coverage to both scenarios.

<MSBuild Projects="@(TestConsoleApps)"
Targets="Publish"
Properties="Configuration=$(Configuration);BuildProjectReferences=false;TargetOS=$(TargetOS);TargetArchitecture=$(TargetArchitecture)" />
Properties="Configuration=$(Configuration);BuildProjectReferences=false;TargetOS=$(TargetOS);TargetArchitecture=$(TargetArchitecture);_IsPublishing=true" />

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this change necessary?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The tests weren't building because they couldn't find AppHost. This is running the Publish target directly, which is very problematic because it bypasses logic in the SDK. We have been having a conversation with the SDK team for months. The fix is to do what real publish does and that's setting _IsPublishing. We do that in multiple places in this repo even though it's used/defined by the SDK.

@eerhardteerhardt left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Thank you for making this happen.

<_additionalPropertiesString>@(_propertiesAsItems->'&lt;%(Identity)&gt;%(Value)&lt;/%(Identity)&gt;', '%0a ')</_additionalPropertiesString>
</PropertyGroup>

<!-- RunNativeAotTestApps trumps TestTrimming, same as PublishAot trumps PublishTrimmed -->

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(nit) this comment doesn't align with the code. The comment says one trumps the other. The code says if they are both true it is an error.

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

/ba-g slow mac

@MichalStrehovsky
MichalStrehovsky merged commit d8eecb7 into dotnet:mainApr 22, 2024
@MichalStrehovsky
MichalStrehovsky deleted the aottests branch April 22, 2024 09:44
matouskozak pushed a commit to matouskozak/runtime that referenced this pull request Apr 30, 2024
Not everything is passing, so I baselined this. Some we'll probably exclude permanently, others are more concerning and we need to determine if it's test issues or product issues.
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 23, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@MichalStrehovsky@eerhardt
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Run trimming tests as AOT tests - #101229

Merged
MichalStrehovsky merged 6 commits into
dotnet:mainfrom
MichalStrehovsky:aottests
Apr 22, 2024
Merged

Run trimming tests as AOT tests#101229
MichalStrehovsky merged 6 commits into
dotnet:mainfrom
MichalStrehovsky:aottests

Conversation

@MichalStrehovsky

@MichalStrehovskyMichalStrehovsky commented Apr 18, 2024

Copy link
Copy Markdown
Member

Not everything is passing, so I baselined this. Some we'll probably exclude permanently, others are more concerning and we need to determine if it's test issues or product issues.

Cc @dotnet/ilc-contrib

Not everything is passing, so I baselined this. Some we'll probably exclude permanently, others are more concerning and we need to determine if it's test issues or product issues.
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-infrastructure-libraries
See info in area-owners.md if you want to be subscribed.

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-nativeaot-outerloop

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

Comment threadsrc/libraries/tests.proj Outdated
<DisabledNativeAotTestAppProjects Include="$(MSBuildThisFileDirectory)\System.Runtime\tests\System.Runtime.Tests\TrimmingTests\System.Runtime.TrimmingTests.proj" />
<DisabledNativeAotTestAppProjects Include="$(MSBuildThisFileDirectory)\System.Text.Json\tests\System.Text.Json.Tests\TrimmingTests\System.Text.Json.TrimmingTests.proj" />

<NativeAotTestAppProjects Include="$(MSBuildThisFileDirectory)*\tests\**\*.NativeAotTests.proj;$(MSBuildThisFileDirectory)*\tests\**\*.TrimmingTests.proj"

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we just get rid of the NativeAotTests.proj extension (there is only 1 currently in the repo) and instead just have TrimmingTests.proj, which are run as both PublishTrimmed and PublishAot?

@MichalStrehovskyMichalStrehovskyApr 18, 2024

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you don't have concerns about running the NativeAotTests with trimming as well, that sounds good to me too.

Trimming is generally a subset of AOT.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the only NativeAotTests today:

publicstaticintMain()
{
DiagnosticSourcediagnosticSource=newDiagnosticListener("TestDiagnosticListener");
using(varlistener=newTestEventListener())
{
vardata=newEventData()
{
Id=Guid.NewGuid(),
};
Write(diagnosticSource,"Test.Start",data);
if(!(listener.LogDataPayload?.Count==3&&
(string)listener.LogDataPayload[0]=="TestDiagnosticListener"&&
(string)listener.LogDataPayload[1]=="Test.Start"))
{
return-1;
}
object[]args=(object[])listener.LogDataPayload[2];
if(args.Length!=2)
{
return-2;
}
IDictionary<string,object>arg=(IDictionary<string,object>)args[0];
if(!((string)arg["Key"]=="Id"&&(string)arg["Value"]==data.Id.ToString()))
{
return-3;
}
arg=(IDictionary<string,object>)args[1];
if(!((string)arg["Key"]=="*Enumerate"&&(string)arg["Value"]=="1,2,3"))
{
return-4;
}
return100;
}
}

It should work just fine with PublishTrimmed. It was written to test the MakeGenericType deep inside of DiagnosticSourceEventSource works with NativeAOT.

I think it would be best to just have 1 "kind of test" and it runs for both PublishTrimmed and PublishAot. It will make it easier to write these, and it will add a bit of coverage to both scenarios.

<MSBuild Projects="@(TestConsoleApps)"
Targets="Publish"
Properties="Configuration=$(Configuration);BuildProjectReferences=false;TargetOS=$(TargetOS);TargetArchitecture=$(TargetArchitecture)" />
Properties="Configuration=$(Configuration);BuildProjectReferences=false;TargetOS=$(TargetOS);TargetArchitecture=$(TargetArchitecture);_IsPublishing=true" />

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this change necessary?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The tests weren't building because they couldn't find AppHost. This is running the Publish target directly, which is very problematic because it bypasses logic in the SDK. We have been having a conversation with the SDK team for months. The fix is to do what real publish does and that's setting _IsPublishing. We do that in multiple places in this repo even though it's used/defined by the SDK.

@eerhardteerhardt left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Thank you for making this happen.

<_additionalPropertiesString>@(_propertiesAsItems->'&lt;%(Identity)&gt;%(Value)&lt;/%(Identity)&gt;', '%0a ')</_additionalPropertiesString>
</PropertyGroup>

<!-- RunNativeAotTestApps trumps TestTrimming, same as PublishAot trumps PublishTrimmed -->

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(nit) this comment doesn't align with the code. The comment says one trumps the other. The code says if they are both true it is an error.

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

/ba-g slow mac

@MichalStrehovsky
MichalStrehovsky merged commit d8eecb7 into dotnet:mainApr 22, 2024
@MichalStrehovsky
MichalStrehovsky deleted the aottests branch April 22, 2024 09:44
matouskozak pushed a commit to matouskozak/runtime that referenced this pull request Apr 30, 2024
Not everything is passing, so I baselined this. Some we'll probably exclude permanently, others are more concerning and we need to determine if it's test issues or product issues.
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 23, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@MichalStrehovsky@eerhardt