Roll back conversion of native aot tests to merged model - #100269

Merged
MichalStrehovsky merged 3 commits into
dotnet:mainfrom
MichalStrehovsky:rollb
Mar 27, 2024
Merged

Roll back conversion of native aot tests to merged model#100269
MichalStrehovsky merged 3 commits into
dotnet:mainfrom
MichalStrehovsky:rollb

Conversation

@MichalStrehovsky

Copy link
Copy Markdown
Member

There are two issues with this:

1. The merged tests are actually broken, but the failures are only observable without Helix

Helix does not report the failures (this is the reason I’m doing a rollback right away instead of waiting around for a fix). Example:

if(!stackTrace.Contains("BringUpTest.Main"))
{
Console.WriteLine("Unexpected stack trace: "+stackTrace);
returnFail;
}

The above should obviously fail because there is no BringUpTest.Main (it got renamed to BringUpTest.TestEntryPoint as part of merging). The CI is all green, despite of this. The test fails if I run it locally through:

build clr.aot+libs -rc Checked -lc Release
src\tests\build.cmd nativeaot checked tree nativeaot\SmokeTests
src\tests\run.cmd runnativeaottests checked

2. There are several test failures, some of which look like they’ll need fixes in the merged wrapper infrastructure

  • The Exceptions test wants to be able to test AppDomain.UnhandledException:

    AppDomain.CurrentDomain.UnhandledException+=UnhandledExceptionEventHandler;

    The wrapper however generates a Try/Catch that doesn’t let UnhandledException happen. The test fails.

  • The TrimmingBehaviors test is sensitive to ripple effects in whole program view. The wrapper’s use of Xunit Assert.Equal brings in a massive amount of reflection that causes ripple effects all over the place. The test fails in a rather obscure way and it took a while to root cause.

I’m also concerned about whether we have any tests that may now be succeeding because of the ripple effects from the wrapper (and we would not notice if the thing they are testing gets broken because they get saved by the ripple effects.

To fix this one, can we make it so RequiresProcessIsolation really just generates a Main that calls the other Main, without checking exit codes, wrapping anything, Assert.Equaling etc?

Cc @dotnet/ilc-contrib

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @agocke, @MichalStrehovsky, @jkotas
See info in area-owners.md if you want to be subscribed.

@jkotas

Copy link
Copy Markdown
Member

Helix does not report the failures

Does this affect all merged tests or just the nativeaot ones that you are reverting?

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

Helix does not report the failures

Does this affect all merged tests or just the nativeaot ones that you are reverting?

I'm afraid of the answer to this. I didn't check. Smoke tests are absolutely critical.

@jkotas

Copy link
Copy Markdown
Member

I'm afraid of the answer to this. I didn't check.

Checking: #100319

@agocke

agocke commented Mar 27, 2024

Copy link
Copy Markdown
Member

The wrapper’s use of Xunit Assert.Equal brings in a massive amount of reflection that causes ripple effects all over the place.

This shouldn't be true anymore. The Microsoft.Dotnet.XUnitAssert package should sub in and it should be trim safe.

@jkotas

Copy link
Copy Markdown
Member

I'm afraid of the answer to this. I didn't check.

The other runtime tests are failing as expected https://dev.azure.com/dnceng-public/public/_build/results?buildId=620112&view=ms.vss-test-web.build-test-results-tab .

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

The wrapper’s use of Xunit Assert.Equal brings in a massive amount of reflection that causes ripple effects all over the place.

This shouldn't be true anymore. The Microsoft.Dotnet.XUnitAssert package should sub in and it should be trim safe.

Trim safety is not the problem here, it's the use of reflection on random stuff in the BCL.

In the case I saw, somewhere after Assert.Equal<T> we marked methods on IEquatable<T> as reflected on and that was breaking what a test was trying to exercise because we were no longer able to remove something. (It took extra long to troubleshoot because I thought it's something I broke, only to find out the test is broken in main.)

The tests under nativeaot need to have very precise control over what's in the dependency graph to be able to test the things they are testing. The implementation of Assert.Equal that still depends on reflection doesn't feel like what we'd want in the runtime test tree (it's fine for libs testing if it's trim safe, but runtime tests should have as little code running as part of the test infrastructure as possible).

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

I'm afraid of the answer to this. I didn't check.

The other runtime tests are failing as expected https://dev.azure.com/dnceng-public/public/_build/results?buildId=620112&view=ms.vss-test-web.build-test-results-tab .

Thanks for re-running the check - I also suspect this might be related to RequiresProcessIsolation; there's not much else that is different in these tests. We'll see if that's the case soon enough...

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

Can anyone sign off? It's not acceptable to have main in a state where we basically don't run nativeaot testing for a week.

This needs to be merged before #100331 can fix testing RequiresProcessIsolation tests.

The test failure is an unrelated GC issue.

@MichalStrehovsky
MichalStrehovsky merged commit 782c2ee into dotnet:mainMar 27, 2024
@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

Thanks!

@MichalStrehovsky
MichalStrehovsky deleted the rollb branch March 27, 2024 11:32
MichalStrehovsky added a commit to MichalStrehovsky/runtime that referenced this pull request Apr 3, 2024
This is unfortunate because it was added for native AOT sake in dotnet#91415.
Then Tomas rewrote the test to execute corerun.exe in dotnet#91560 making it 100% unsupportable with native AOT.
What the test is doing doesn't look supportable with the merged runner infra and runs into the same issues I saw in dotnet#100269.
We never noticed this test is broken because tests requiring process isolation are completely busted with native AOT. I did a local run and started re-baselining again because this is not the only regression.
MichalStrehovsky added a commit that referenced this pull request Apr 8, 2024
This is unfortunate because it was added for native AOT sake in #91415.
Then Tomas rewrote the test to execute corerun.exe in #91560 making it 100% unsupportable with native AOT.
What the test is doing doesn't look supportable with the merged runner infra and runs into the same issues I saw in #100269.
We never noticed this test is broken because tests requiring process isolation are completely busted with native AOT. I did a local run and started re-baselining again because this is not the only regression.
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Apr 27, 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.

4 participants

@MichalStrehovsky@jkotas@agocke@vitek-karas
, '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

Roll back conversion of native aot tests to merged model - #100269

Merged
MichalStrehovsky merged 3 commits into
dotnet:mainfrom
MichalStrehovsky:rollb
Mar 27, 2024
Merged

Roll back conversion of native aot tests to merged model#100269
MichalStrehovsky merged 3 commits into
dotnet:mainfrom
MichalStrehovsky:rollb

Conversation

@MichalStrehovsky

Copy link
Copy Markdown
Member

There are two issues with this:

1. The merged tests are actually broken, but the failures are only observable without Helix

Helix does not report the failures (this is the reason I’m doing a rollback right away instead of waiting around for a fix). Example:

if(!stackTrace.Contains("BringUpTest.Main"))
{
Console.WriteLine("Unexpected stack trace: "+stackTrace);
returnFail;
}

The above should obviously fail because there is no BringUpTest.Main (it got renamed to BringUpTest.TestEntryPoint as part of merging). The CI is all green, despite of this. The test fails if I run it locally through:

build clr.aot+libs -rc Checked -lc Release
src\tests\build.cmd nativeaot checked tree nativeaot\SmokeTests
src\tests\run.cmd runnativeaottests checked

2. There are several test failures, some of which look like they’ll need fixes in the merged wrapper infrastructure

  • The Exceptions test wants to be able to test AppDomain.UnhandledException:

    AppDomain.CurrentDomain.UnhandledException+=UnhandledExceptionEventHandler;

    The wrapper however generates a Try/Catch that doesn’t let UnhandledException happen. The test fails.

  • The TrimmingBehaviors test is sensitive to ripple effects in whole program view. The wrapper’s use of Xunit Assert.Equal brings in a massive amount of reflection that causes ripple effects all over the place. The test fails in a rather obscure way and it took a while to root cause.

I’m also concerned about whether we have any tests that may now be succeeding because of the ripple effects from the wrapper (and we would not notice if the thing they are testing gets broken because they get saved by the ripple effects.

To fix this one, can we make it so RequiresProcessIsolation really just generates a Main that calls the other Main, without checking exit codes, wrapping anything, Assert.Equaling etc?

Cc @dotnet/ilc-contrib

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @agocke, @MichalStrehovsky, @jkotas
See info in area-owners.md if you want to be subscribed.

@jkotas

Copy link
Copy Markdown
Member

Helix does not report the failures

Does this affect all merged tests or just the nativeaot ones that you are reverting?

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

Helix does not report the failures

Does this affect all merged tests or just the nativeaot ones that you are reverting?

I'm afraid of the answer to this. I didn't check. Smoke tests are absolutely critical.

@jkotas

Copy link
Copy Markdown
Member

I'm afraid of the answer to this. I didn't check.

Checking: #100319

@agocke

agocke commented Mar 27, 2024

Copy link
Copy Markdown
Member

The wrapper’s use of Xunit Assert.Equal brings in a massive amount of reflection that causes ripple effects all over the place.

This shouldn't be true anymore. The Microsoft.Dotnet.XUnitAssert package should sub in and it should be trim safe.

@jkotas

Copy link
Copy Markdown
Member

I'm afraid of the answer to this. I didn't check.

The other runtime tests are failing as expected https://dev.azure.com/dnceng-public/public/_build/results?buildId=620112&view=ms.vss-test-web.build-test-results-tab .

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

The wrapper’s use of Xunit Assert.Equal brings in a massive amount of reflection that causes ripple effects all over the place.

This shouldn't be true anymore. The Microsoft.Dotnet.XUnitAssert package should sub in and it should be trim safe.

Trim safety is not the problem here, it's the use of reflection on random stuff in the BCL.

In the case I saw, somewhere after Assert.Equal<T> we marked methods on IEquatable<T> as reflected on and that was breaking what a test was trying to exercise because we were no longer able to remove something. (It took extra long to troubleshoot because I thought it's something I broke, only to find out the test is broken in main.)

The tests under nativeaot need to have very precise control over what's in the dependency graph to be able to test the things they are testing. The implementation of Assert.Equal that still depends on reflection doesn't feel like what we'd want in the runtime test tree (it's fine for libs testing if it's trim safe, but runtime tests should have as little code running as part of the test infrastructure as possible).

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

I'm afraid of the answer to this. I didn't check.

The other runtime tests are failing as expected https://dev.azure.com/dnceng-public/public/_build/results?buildId=620112&view=ms.vss-test-web.build-test-results-tab .

Thanks for re-running the check - I also suspect this might be related to RequiresProcessIsolation; there's not much else that is different in these tests. We'll see if that's the case soon enough...

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

Can anyone sign off? It's not acceptable to have main in a state where we basically don't run nativeaot testing for a week.

This needs to be merged before #100331 can fix testing RequiresProcessIsolation tests.

The test failure is an unrelated GC issue.

@MichalStrehovsky
MichalStrehovsky merged commit 782c2ee into dotnet:mainMar 27, 2024
@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

Thanks!

@MichalStrehovsky
MichalStrehovsky deleted the rollb branch March 27, 2024 11:32
MichalStrehovsky added a commit to MichalStrehovsky/runtime that referenced this pull request Apr 3, 2024
This is unfortunate because it was added for native AOT sake in dotnet#91415.
Then Tomas rewrote the test to execute corerun.exe in dotnet#91560 making it 100% unsupportable with native AOT.
What the test is doing doesn't look supportable with the merged runner infra and runs into the same issues I saw in dotnet#100269.
We never noticed this test is broken because tests requiring process isolation are completely busted with native AOT. I did a local run and started re-baselining again because this is not the only regression.
MichalStrehovsky added a commit that referenced this pull request Apr 8, 2024
This is unfortunate because it was added for native AOT sake in #91415.
Then Tomas rewrote the test to execute corerun.exe in #91560 making it 100% unsupportable with native AOT.
What the test is doing doesn't look supportable with the merged runner infra and runs into the same issues I saw in #100269.
We never noticed this test is broken because tests requiring process isolation are completely busted with native AOT. I did a local run and started re-baselining again because this is not the only regression.
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Apr 27, 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.

4 participants

@MichalStrehovsky@jkotas@agocke@vitek-karas
, '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

Roll back conversion of native aot tests to merged model - #100269

Merged
MichalStrehovsky merged 3 commits into
dotnet:mainfrom
MichalStrehovsky:rollb
Mar 27, 2024
Merged

Roll back conversion of native aot tests to merged model#100269
MichalStrehovsky merged 3 commits into
dotnet:mainfrom
MichalStrehovsky:rollb

Conversation

@MichalStrehovsky

Copy link
Copy Markdown
Member

There are two issues with this:

1. The merged tests are actually broken, but the failures are only observable without Helix

Helix does not report the failures (this is the reason I’m doing a rollback right away instead of waiting around for a fix). Example:

if(!stackTrace.Contains("BringUpTest.Main"))
{
Console.WriteLine("Unexpected stack trace: "+stackTrace);
returnFail;
}

The above should obviously fail because there is no BringUpTest.Main (it got renamed to BringUpTest.TestEntryPoint as part of merging). The CI is all green, despite of this. The test fails if I run it locally through:

build clr.aot+libs -rc Checked -lc Release
src\tests\build.cmd nativeaot checked tree nativeaot\SmokeTests
src\tests\run.cmd runnativeaottests checked

2. There are several test failures, some of which look like they’ll need fixes in the merged wrapper infrastructure

  • The Exceptions test wants to be able to test AppDomain.UnhandledException:

    AppDomain.CurrentDomain.UnhandledException+=UnhandledExceptionEventHandler;

    The wrapper however generates a Try/Catch that doesn’t let UnhandledException happen. The test fails.

  • The TrimmingBehaviors test is sensitive to ripple effects in whole program view. The wrapper’s use of Xunit Assert.Equal brings in a massive amount of reflection that causes ripple effects all over the place. The test fails in a rather obscure way and it took a while to root cause.

I’m also concerned about whether we have any tests that may now be succeeding because of the ripple effects from the wrapper (and we would not notice if the thing they are testing gets broken because they get saved by the ripple effects.

To fix this one, can we make it so RequiresProcessIsolation really just generates a Main that calls the other Main, without checking exit codes, wrapping anything, Assert.Equaling etc?

Cc @dotnet/ilc-contrib

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @agocke, @MichalStrehovsky, @jkotas
See info in area-owners.md if you want to be subscribed.

@jkotas

Copy link
Copy Markdown
Member

Helix does not report the failures

Does this affect all merged tests or just the nativeaot ones that you are reverting?

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

Helix does not report the failures

Does this affect all merged tests or just the nativeaot ones that you are reverting?

I'm afraid of the answer to this. I didn't check. Smoke tests are absolutely critical.

@jkotas

Copy link
Copy Markdown
Member

I'm afraid of the answer to this. I didn't check.

Checking: #100319

@agocke

agocke commented Mar 27, 2024

Copy link
Copy Markdown
Member

The wrapper’s use of Xunit Assert.Equal brings in a massive amount of reflection that causes ripple effects all over the place.

This shouldn't be true anymore. The Microsoft.Dotnet.XUnitAssert package should sub in and it should be trim safe.

@jkotas

Copy link
Copy Markdown
Member

I'm afraid of the answer to this. I didn't check.

The other runtime tests are failing as expected https://dev.azure.com/dnceng-public/public/_build/results?buildId=620112&view=ms.vss-test-web.build-test-results-tab .

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

The wrapper’s use of Xunit Assert.Equal brings in a massive amount of reflection that causes ripple effects all over the place.

This shouldn't be true anymore. The Microsoft.Dotnet.XUnitAssert package should sub in and it should be trim safe.

Trim safety is not the problem here, it's the use of reflection on random stuff in the BCL.

In the case I saw, somewhere after Assert.Equal<T> we marked methods on IEquatable<T> as reflected on and that was breaking what a test was trying to exercise because we were no longer able to remove something. (It took extra long to troubleshoot because I thought it's something I broke, only to find out the test is broken in main.)

The tests under nativeaot need to have very precise control over what's in the dependency graph to be able to test the things they are testing. The implementation of Assert.Equal that still depends on reflection doesn't feel like what we'd want in the runtime test tree (it's fine for libs testing if it's trim safe, but runtime tests should have as little code running as part of the test infrastructure as possible).

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

I'm afraid of the answer to this. I didn't check.

The other runtime tests are failing as expected https://dev.azure.com/dnceng-public/public/_build/results?buildId=620112&view=ms.vss-test-web.build-test-results-tab .

Thanks for re-running the check - I also suspect this might be related to RequiresProcessIsolation; there's not much else that is different in these tests. We'll see if that's the case soon enough...

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

Can anyone sign off? It's not acceptable to have main in a state where we basically don't run nativeaot testing for a week.

This needs to be merged before #100331 can fix testing RequiresProcessIsolation tests.

The test failure is an unrelated GC issue.

@MichalStrehovsky
MichalStrehovsky merged commit 782c2ee into dotnet:mainMar 27, 2024
@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

Thanks!

@MichalStrehovsky
MichalStrehovsky deleted the rollb branch March 27, 2024 11:32
MichalStrehovsky added a commit to MichalStrehovsky/runtime that referenced this pull request Apr 3, 2024
This is unfortunate because it was added for native AOT sake in dotnet#91415.
Then Tomas rewrote the test to execute corerun.exe in dotnet#91560 making it 100% unsupportable with native AOT.
What the test is doing doesn't look supportable with the merged runner infra and runs into the same issues I saw in dotnet#100269.
We never noticed this test is broken because tests requiring process isolation are completely busted with native AOT. I did a local run and started re-baselining again because this is not the only regression.
MichalStrehovsky added a commit that referenced this pull request Apr 8, 2024
This is unfortunate because it was added for native AOT sake in #91415.
Then Tomas rewrote the test to execute corerun.exe in #91560 making it 100% unsupportable with native AOT.
What the test is doing doesn't look supportable with the merged runner infra and runs into the same issues I saw in #100269.
We never noticed this test is broken because tests requiring process isolation are completely busted with native AOT. I did a local run and started re-baselining again because this is not the only regression.
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Apr 27, 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.

4 participants

@MichalStrehovsky@jkotas@agocke@vitek-karas
, '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

Roll back conversion of native aot tests to merged model - #100269

Merged
MichalStrehovsky merged 3 commits into
dotnet:mainfrom
MichalStrehovsky:rollb
Mar 27, 2024
Merged

Roll back conversion of native aot tests to merged model#100269
MichalStrehovsky merged 3 commits into
dotnet:mainfrom
MichalStrehovsky:rollb

Conversation

@MichalStrehovsky

Copy link
Copy Markdown
Member

There are two issues with this:

1. The merged tests are actually broken, but the failures are only observable without Helix

Helix does not report the failures (this is the reason I’m doing a rollback right away instead of waiting around for a fix). Example:

if(!stackTrace.Contains("BringUpTest.Main"))
{
Console.WriteLine("Unexpected stack trace: "+stackTrace);
returnFail;
}

The above should obviously fail because there is no BringUpTest.Main (it got renamed to BringUpTest.TestEntryPoint as part of merging). The CI is all green, despite of this. The test fails if I run it locally through:

build clr.aot+libs -rc Checked -lc Release
src\tests\build.cmd nativeaot checked tree nativeaot\SmokeTests
src\tests\run.cmd runnativeaottests checked

2. There are several test failures, some of which look like they’ll need fixes in the merged wrapper infrastructure

  • The Exceptions test wants to be able to test AppDomain.UnhandledException:

    AppDomain.CurrentDomain.UnhandledException+=UnhandledExceptionEventHandler;

    The wrapper however generates a Try/Catch that doesn’t let UnhandledException happen. The test fails.

  • The TrimmingBehaviors test is sensitive to ripple effects in whole program view. The wrapper’s use of Xunit Assert.Equal brings in a massive amount of reflection that causes ripple effects all over the place. The test fails in a rather obscure way and it took a while to root cause.

I’m also concerned about whether we have any tests that may now be succeeding because of the ripple effects from the wrapper (and we would not notice if the thing they are testing gets broken because they get saved by the ripple effects.

To fix this one, can we make it so RequiresProcessIsolation really just generates a Main that calls the other Main, without checking exit codes, wrapping anything, Assert.Equaling etc?

Cc @dotnet/ilc-contrib

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @agocke, @MichalStrehovsky, @jkotas
See info in area-owners.md if you want to be subscribed.

@jkotas

Copy link
Copy Markdown
Member

Helix does not report the failures

Does this affect all merged tests or just the nativeaot ones that you are reverting?

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

Helix does not report the failures

Does this affect all merged tests or just the nativeaot ones that you are reverting?

I'm afraid of the answer to this. I didn't check. Smoke tests are absolutely critical.

@jkotas

Copy link
Copy Markdown
Member

I'm afraid of the answer to this. I didn't check.

Checking: #100319

@agocke

agocke commented Mar 27, 2024

Copy link
Copy Markdown
Member

The wrapper’s use of Xunit Assert.Equal brings in a massive amount of reflection that causes ripple effects all over the place.

This shouldn't be true anymore. The Microsoft.Dotnet.XUnitAssert package should sub in and it should be trim safe.

@jkotas

Copy link
Copy Markdown
Member

I'm afraid of the answer to this. I didn't check.

The other runtime tests are failing as expected https://dev.azure.com/dnceng-public/public/_build/results?buildId=620112&view=ms.vss-test-web.build-test-results-tab .

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

The wrapper’s use of Xunit Assert.Equal brings in a massive amount of reflection that causes ripple effects all over the place.

This shouldn't be true anymore. The Microsoft.Dotnet.XUnitAssert package should sub in and it should be trim safe.

Trim safety is not the problem here, it's the use of reflection on random stuff in the BCL.

In the case I saw, somewhere after Assert.Equal<T> we marked methods on IEquatable<T> as reflected on and that was breaking what a test was trying to exercise because we were no longer able to remove something. (It took extra long to troubleshoot because I thought it's something I broke, only to find out the test is broken in main.)

The tests under nativeaot need to have very precise control over what's in the dependency graph to be able to test the things they are testing. The implementation of Assert.Equal that still depends on reflection doesn't feel like what we'd want in the runtime test tree (it's fine for libs testing if it's trim safe, but runtime tests should have as little code running as part of the test infrastructure as possible).

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

I'm afraid of the answer to this. I didn't check.

The other runtime tests are failing as expected https://dev.azure.com/dnceng-public/public/_build/results?buildId=620112&view=ms.vss-test-web.build-test-results-tab .

Thanks for re-running the check - I also suspect this might be related to RequiresProcessIsolation; there's not much else that is different in these tests. We'll see if that's the case soon enough...

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

Can anyone sign off? It's not acceptable to have main in a state where we basically don't run nativeaot testing for a week.

This needs to be merged before #100331 can fix testing RequiresProcessIsolation tests.

The test failure is an unrelated GC issue.

@MichalStrehovsky
MichalStrehovsky merged commit 782c2ee into dotnet:mainMar 27, 2024
@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

Thanks!

@MichalStrehovsky
MichalStrehovsky deleted the rollb branch March 27, 2024 11:32
MichalStrehovsky added a commit to MichalStrehovsky/runtime that referenced this pull request Apr 3, 2024
This is unfortunate because it was added for native AOT sake in dotnet#91415.
Then Tomas rewrote the test to execute corerun.exe in dotnet#91560 making it 100% unsupportable with native AOT.
What the test is doing doesn't look supportable with the merged runner infra and runs into the same issues I saw in dotnet#100269.
We never noticed this test is broken because tests requiring process isolation are completely busted with native AOT. I did a local run and started re-baselining again because this is not the only regression.
MichalStrehovsky added a commit that referenced this pull request Apr 8, 2024
This is unfortunate because it was added for native AOT sake in #91415.
Then Tomas rewrote the test to execute corerun.exe in #91560 making it 100% unsupportable with native AOT.
What the test is doing doesn't look supportable with the merged runner infra and runs into the same issues I saw in #100269.
We never noticed this test is broken because tests requiring process isolation are completely busted with native AOT. I did a local run and started re-baselining again because this is not the only regression.
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Apr 27, 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.

4 participants

@MichalStrehovsky@jkotas@agocke@vitek-karas
, '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

Roll back conversion of native aot tests to merged model - #100269

Merged
MichalStrehovsky merged 3 commits into
dotnet:mainfrom
MichalStrehovsky:rollb
Mar 27, 2024
Merged

Roll back conversion of native aot tests to merged model#100269
MichalStrehovsky merged 3 commits into
dotnet:mainfrom
MichalStrehovsky:rollb

Conversation

@MichalStrehovsky

Copy link
Copy Markdown
Member

There are two issues with this:

1. The merged tests are actually broken, but the failures are only observable without Helix

Helix does not report the failures (this is the reason I’m doing a rollback right away instead of waiting around for a fix). Example:

if(!stackTrace.Contains("BringUpTest.Main"))
{
Console.WriteLine("Unexpected stack trace: "+stackTrace);
returnFail;
}

The above should obviously fail because there is no BringUpTest.Main (it got renamed to BringUpTest.TestEntryPoint as part of merging). The CI is all green, despite of this. The test fails if I run it locally through:

build clr.aot+libs -rc Checked -lc Release
src\tests\build.cmd nativeaot checked tree nativeaot\SmokeTests
src\tests\run.cmd runnativeaottests checked

2. There are several test failures, some of which look like they’ll need fixes in the merged wrapper infrastructure

  • The Exceptions test wants to be able to test AppDomain.UnhandledException:

    AppDomain.CurrentDomain.UnhandledException+=UnhandledExceptionEventHandler;

    The wrapper however generates a Try/Catch that doesn’t let UnhandledException happen. The test fails.

  • The TrimmingBehaviors test is sensitive to ripple effects in whole program view. The wrapper’s use of Xunit Assert.Equal brings in a massive amount of reflection that causes ripple effects all over the place. The test fails in a rather obscure way and it took a while to root cause.

I’m also concerned about whether we have any tests that may now be succeeding because of the ripple effects from the wrapper (and we would not notice if the thing they are testing gets broken because they get saved by the ripple effects.

To fix this one, can we make it so RequiresProcessIsolation really just generates a Main that calls the other Main, without checking exit codes, wrapping anything, Assert.Equaling etc?

Cc @dotnet/ilc-contrib

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @agocke, @MichalStrehovsky, @jkotas
See info in area-owners.md if you want to be subscribed.

@jkotas

Copy link
Copy Markdown
Member

Helix does not report the failures

Does this affect all merged tests or just the nativeaot ones that you are reverting?

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

Helix does not report the failures

Does this affect all merged tests or just the nativeaot ones that you are reverting?

I'm afraid of the answer to this. I didn't check. Smoke tests are absolutely critical.

@jkotas

Copy link
Copy Markdown
Member

I'm afraid of the answer to this. I didn't check.

Checking: #100319

@agocke

agocke commented Mar 27, 2024

Copy link
Copy Markdown
Member

The wrapper’s use of Xunit Assert.Equal brings in a massive amount of reflection that causes ripple effects all over the place.

This shouldn't be true anymore. The Microsoft.Dotnet.XUnitAssert package should sub in and it should be trim safe.

@jkotas

Copy link
Copy Markdown
Member

I'm afraid of the answer to this. I didn't check.

The other runtime tests are failing as expected https://dev.azure.com/dnceng-public/public/_build/results?buildId=620112&view=ms.vss-test-web.build-test-results-tab .

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

The wrapper’s use of Xunit Assert.Equal brings in a massive amount of reflection that causes ripple effects all over the place.

This shouldn't be true anymore. The Microsoft.Dotnet.XUnitAssert package should sub in and it should be trim safe.

Trim safety is not the problem here, it's the use of reflection on random stuff in the BCL.

In the case I saw, somewhere after Assert.Equal<T> we marked methods on IEquatable<T> as reflected on and that was breaking what a test was trying to exercise because we were no longer able to remove something. (It took extra long to troubleshoot because I thought it's something I broke, only to find out the test is broken in main.)

The tests under nativeaot need to have very precise control over what's in the dependency graph to be able to test the things they are testing. The implementation of Assert.Equal that still depends on reflection doesn't feel like what we'd want in the runtime test tree (it's fine for libs testing if it's trim safe, but runtime tests should have as little code running as part of the test infrastructure as possible).

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

I'm afraid of the answer to this. I didn't check.

The other runtime tests are failing as expected https://dev.azure.com/dnceng-public/public/_build/results?buildId=620112&view=ms.vss-test-web.build-test-results-tab .

Thanks for re-running the check - I also suspect this might be related to RequiresProcessIsolation; there's not much else that is different in these tests. We'll see if that's the case soon enough...

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

Can anyone sign off? It's not acceptable to have main in a state where we basically don't run nativeaot testing for a week.

This needs to be merged before #100331 can fix testing RequiresProcessIsolation tests.

The test failure is an unrelated GC issue.

@MichalStrehovsky
MichalStrehovsky merged commit 782c2ee into dotnet:mainMar 27, 2024
@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

Thanks!

@MichalStrehovsky
MichalStrehovsky deleted the rollb branch March 27, 2024 11:32
MichalStrehovsky added a commit to MichalStrehovsky/runtime that referenced this pull request Apr 3, 2024
This is unfortunate because it was added for native AOT sake in dotnet#91415.
Then Tomas rewrote the test to execute corerun.exe in dotnet#91560 making it 100% unsupportable with native AOT.
What the test is doing doesn't look supportable with the merged runner infra and runs into the same issues I saw in dotnet#100269.
We never noticed this test is broken because tests requiring process isolation are completely busted with native AOT. I did a local run and started re-baselining again because this is not the only regression.
MichalStrehovsky added a commit that referenced this pull request Apr 8, 2024
This is unfortunate because it was added for native AOT sake in #91415.
Then Tomas rewrote the test to execute corerun.exe in #91560 making it 100% unsupportable with native AOT.
What the test is doing doesn't look supportable with the merged runner infra and runs into the same issues I saw in #100269.
We never noticed this test is broken because tests requiring process isolation are completely busted with native AOT. I did a local run and started re-baselining again because this is not the only regression.
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Apr 27, 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.

4 participants

@MichalStrehovsky@jkotas@agocke@vitek-karas
, '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

Roll back conversion of native aot tests to merged model - #100269

Merged
MichalStrehovsky merged 3 commits into
dotnet:mainfrom
MichalStrehovsky:rollb
Mar 27, 2024
Merged

Roll back conversion of native aot tests to merged model#100269
MichalStrehovsky merged 3 commits into
dotnet:mainfrom
MichalStrehovsky:rollb

Conversation

@MichalStrehovsky

Copy link
Copy Markdown
Member

There are two issues with this:

1. The merged tests are actually broken, but the failures are only observable without Helix

Helix does not report the failures (this is the reason I’m doing a rollback right away instead of waiting around for a fix). Example:

if(!stackTrace.Contains("BringUpTest.Main"))
{
Console.WriteLine("Unexpected stack trace: "+stackTrace);
returnFail;
}

The above should obviously fail because there is no BringUpTest.Main (it got renamed to BringUpTest.TestEntryPoint as part of merging). The CI is all green, despite of this. The test fails if I run it locally through:

build clr.aot+libs -rc Checked -lc Release
src\tests\build.cmd nativeaot checked tree nativeaot\SmokeTests
src\tests\run.cmd runnativeaottests checked

2. There are several test failures, some of which look like they’ll need fixes in the merged wrapper infrastructure

  • The Exceptions test wants to be able to test AppDomain.UnhandledException:

    AppDomain.CurrentDomain.UnhandledException+=UnhandledExceptionEventHandler;

    The wrapper however generates a Try/Catch that doesn’t let UnhandledException happen. The test fails.

  • The TrimmingBehaviors test is sensitive to ripple effects in whole program view. The wrapper’s use of Xunit Assert.Equal brings in a massive amount of reflection that causes ripple effects all over the place. The test fails in a rather obscure way and it took a while to root cause.

I’m also concerned about whether we have any tests that may now be succeeding because of the ripple effects from the wrapper (and we would not notice if the thing they are testing gets broken because they get saved by the ripple effects.

To fix this one, can we make it so RequiresProcessIsolation really just generates a Main that calls the other Main, without checking exit codes, wrapping anything, Assert.Equaling etc?

Cc @dotnet/ilc-contrib

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @agocke, @MichalStrehovsky, @jkotas
See info in area-owners.md if you want to be subscribed.

@jkotas

Copy link
Copy Markdown
Member

Helix does not report the failures

Does this affect all merged tests or just the nativeaot ones that you are reverting?

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

Helix does not report the failures

Does this affect all merged tests or just the nativeaot ones that you are reverting?

I'm afraid of the answer to this. I didn't check. Smoke tests are absolutely critical.

@jkotas

Copy link
Copy Markdown
Member

I'm afraid of the answer to this. I didn't check.

Checking: #100319

@agocke

agocke commented Mar 27, 2024

Copy link
Copy Markdown
Member

The wrapper’s use of Xunit Assert.Equal brings in a massive amount of reflection that causes ripple effects all over the place.

This shouldn't be true anymore. The Microsoft.Dotnet.XUnitAssert package should sub in and it should be trim safe.

@jkotas

Copy link
Copy Markdown
Member

I'm afraid of the answer to this. I didn't check.

The other runtime tests are failing as expected https://dev.azure.com/dnceng-public/public/_build/results?buildId=620112&view=ms.vss-test-web.build-test-results-tab .

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

The wrapper’s use of Xunit Assert.Equal brings in a massive amount of reflection that causes ripple effects all over the place.

This shouldn't be true anymore. The Microsoft.Dotnet.XUnitAssert package should sub in and it should be trim safe.

Trim safety is not the problem here, it's the use of reflection on random stuff in the BCL.

In the case I saw, somewhere after Assert.Equal<T> we marked methods on IEquatable<T> as reflected on and that was breaking what a test was trying to exercise because we were no longer able to remove something. (It took extra long to troubleshoot because I thought it's something I broke, only to find out the test is broken in main.)

The tests under nativeaot need to have very precise control over what's in the dependency graph to be able to test the things they are testing. The implementation of Assert.Equal that still depends on reflection doesn't feel like what we'd want in the runtime test tree (it's fine for libs testing if it's trim safe, but runtime tests should have as little code running as part of the test infrastructure as possible).

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

I'm afraid of the answer to this. I didn't check.

The other runtime tests are failing as expected https://dev.azure.com/dnceng-public/public/_build/results?buildId=620112&view=ms.vss-test-web.build-test-results-tab .

Thanks for re-running the check - I also suspect this might be related to RequiresProcessIsolation; there's not much else that is different in these tests. We'll see if that's the case soon enough...

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

Can anyone sign off? It's not acceptable to have main in a state where we basically don't run nativeaot testing for a week.

This needs to be merged before #100331 can fix testing RequiresProcessIsolation tests.

The test failure is an unrelated GC issue.

@MichalStrehovsky
MichalStrehovsky merged commit 782c2ee into dotnet:mainMar 27, 2024
@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

Thanks!

@MichalStrehovsky
MichalStrehovsky deleted the rollb branch March 27, 2024 11:32
MichalStrehovsky added a commit to MichalStrehovsky/runtime that referenced this pull request Apr 3, 2024
This is unfortunate because it was added for native AOT sake in dotnet#91415.
Then Tomas rewrote the test to execute corerun.exe in dotnet#91560 making it 100% unsupportable with native AOT.
What the test is doing doesn't look supportable with the merged runner infra and runs into the same issues I saw in dotnet#100269.
We never noticed this test is broken because tests requiring process isolation are completely busted with native AOT. I did a local run and started re-baselining again because this is not the only regression.
MichalStrehovsky added a commit that referenced this pull request Apr 8, 2024
This is unfortunate because it was added for native AOT sake in #91415.
Then Tomas rewrote the test to execute corerun.exe in #91560 making it 100% unsupportable with native AOT.
What the test is doing doesn't look supportable with the merged runner infra and runs into the same issues I saw in #100269.
We never noticed this test is broken because tests requiring process isolation are completely busted with native AOT. I did a local run and started re-baselining again because this is not the only regression.
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Apr 27, 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.

4 participants

@MichalStrehovsky@jkotas@agocke@vitek-karas
, '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

Roll back conversion of native aot tests to merged model - #100269

Merged
MichalStrehovsky merged 3 commits into
dotnet:mainfrom
MichalStrehovsky:rollb
Mar 27, 2024
Merged

Roll back conversion of native aot tests to merged model#100269
MichalStrehovsky merged 3 commits into
dotnet:mainfrom
MichalStrehovsky:rollb

Conversation

@MichalStrehovsky

Copy link
Copy Markdown
Member

There are two issues with this:

1. The merged tests are actually broken, but the failures are only observable without Helix

Helix does not report the failures (this is the reason I’m doing a rollback right away instead of waiting around for a fix). Example:

if(!stackTrace.Contains("BringUpTest.Main"))
{
Console.WriteLine("Unexpected stack trace: "+stackTrace);
returnFail;
}

The above should obviously fail because there is no BringUpTest.Main (it got renamed to BringUpTest.TestEntryPoint as part of merging). The CI is all green, despite of this. The test fails if I run it locally through:

build clr.aot+libs -rc Checked -lc Release
src\tests\build.cmd nativeaot checked tree nativeaot\SmokeTests
src\tests\run.cmd runnativeaottests checked

2. There are several test failures, some of which look like they’ll need fixes in the merged wrapper infrastructure

  • The Exceptions test wants to be able to test AppDomain.UnhandledException:

    AppDomain.CurrentDomain.UnhandledException+=UnhandledExceptionEventHandler;

    The wrapper however generates a Try/Catch that doesn’t let UnhandledException happen. The test fails.

  • The TrimmingBehaviors test is sensitive to ripple effects in whole program view. The wrapper’s use of Xunit Assert.Equal brings in a massive amount of reflection that causes ripple effects all over the place. The test fails in a rather obscure way and it took a while to root cause.

I’m also concerned about whether we have any tests that may now be succeeding because of the ripple effects from the wrapper (and we would not notice if the thing they are testing gets broken because they get saved by the ripple effects.

To fix this one, can we make it so RequiresProcessIsolation really just generates a Main that calls the other Main, without checking exit codes, wrapping anything, Assert.Equaling etc?

Cc @dotnet/ilc-contrib

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @agocke, @MichalStrehovsky, @jkotas
See info in area-owners.md if you want to be subscribed.

@jkotas

Copy link
Copy Markdown
Member

Helix does not report the failures

Does this affect all merged tests or just the nativeaot ones that you are reverting?

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

Helix does not report the failures

Does this affect all merged tests or just the nativeaot ones that you are reverting?

I'm afraid of the answer to this. I didn't check. Smoke tests are absolutely critical.

@jkotas

Copy link
Copy Markdown
Member

I'm afraid of the answer to this. I didn't check.

Checking: #100319

@agocke

agocke commented Mar 27, 2024

Copy link
Copy Markdown
Member

The wrapper’s use of Xunit Assert.Equal brings in a massive amount of reflection that causes ripple effects all over the place.

This shouldn't be true anymore. The Microsoft.Dotnet.XUnitAssert package should sub in and it should be trim safe.

@jkotas

Copy link
Copy Markdown
Member

I'm afraid of the answer to this. I didn't check.

The other runtime tests are failing as expected https://dev.azure.com/dnceng-public/public/_build/results?buildId=620112&view=ms.vss-test-web.build-test-results-tab .

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

The wrapper’s use of Xunit Assert.Equal brings in a massive amount of reflection that causes ripple effects all over the place.

This shouldn't be true anymore. The Microsoft.Dotnet.XUnitAssert package should sub in and it should be trim safe.

Trim safety is not the problem here, it's the use of reflection on random stuff in the BCL.

In the case I saw, somewhere after Assert.Equal<T> we marked methods on IEquatable<T> as reflected on and that was breaking what a test was trying to exercise because we were no longer able to remove something. (It took extra long to troubleshoot because I thought it's something I broke, only to find out the test is broken in main.)

The tests under nativeaot need to have very precise control over what's in the dependency graph to be able to test the things they are testing. The implementation of Assert.Equal that still depends on reflection doesn't feel like what we'd want in the runtime test tree (it's fine for libs testing if it's trim safe, but runtime tests should have as little code running as part of the test infrastructure as possible).

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

I'm afraid of the answer to this. I didn't check.

The other runtime tests are failing as expected https://dev.azure.com/dnceng-public/public/_build/results?buildId=620112&view=ms.vss-test-web.build-test-results-tab .

Thanks for re-running the check - I also suspect this might be related to RequiresProcessIsolation; there's not much else that is different in these tests. We'll see if that's the case soon enough...

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

Can anyone sign off? It's not acceptable to have main in a state where we basically don't run nativeaot testing for a week.

This needs to be merged before #100331 can fix testing RequiresProcessIsolation tests.

The test failure is an unrelated GC issue.

@MichalStrehovsky
MichalStrehovsky merged commit 782c2ee into dotnet:mainMar 27, 2024
@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

Thanks!

@MichalStrehovsky
MichalStrehovsky deleted the rollb branch March 27, 2024 11:32
MichalStrehovsky added a commit to MichalStrehovsky/runtime that referenced this pull request Apr 3, 2024
This is unfortunate because it was added for native AOT sake in dotnet#91415.
Then Tomas rewrote the test to execute corerun.exe in dotnet#91560 making it 100% unsupportable with native AOT.
What the test is doing doesn't look supportable with the merged runner infra and runs into the same issues I saw in dotnet#100269.
We never noticed this test is broken because tests requiring process isolation are completely busted with native AOT. I did a local run and started re-baselining again because this is not the only regression.
MichalStrehovsky added a commit that referenced this pull request Apr 8, 2024
This is unfortunate because it was added for native AOT sake in #91415.
Then Tomas rewrote the test to execute corerun.exe in #91560 making it 100% unsupportable with native AOT.
What the test is doing doesn't look supportable with the merged runner infra and runs into the same issues I saw in #100269.
We never noticed this test is broken because tests requiring process isolation are completely busted with native AOT. I did a local run and started re-baselining again because this is not the only regression.
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Apr 27, 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.

4 participants

@MichalStrehovsky@jkotas@agocke@vitek-karas
, '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

Roll back conversion of native aot tests to merged model - #100269

Merged
MichalStrehovsky merged 3 commits into
dotnet:mainfrom
MichalStrehovsky:rollb
Mar 27, 2024
Merged

Roll back conversion of native aot tests to merged model#100269
MichalStrehovsky merged 3 commits into
dotnet:mainfrom
MichalStrehovsky:rollb

Conversation

@MichalStrehovsky

Copy link
Copy Markdown
Member

There are two issues with this:

1. The merged tests are actually broken, but the failures are only observable without Helix

Helix does not report the failures (this is the reason I’m doing a rollback right away instead of waiting around for a fix). Example:

if(!stackTrace.Contains("BringUpTest.Main"))
{
Console.WriteLine("Unexpected stack trace: "+stackTrace);
returnFail;
}

The above should obviously fail because there is no BringUpTest.Main (it got renamed to BringUpTest.TestEntryPoint as part of merging). The CI is all green, despite of this. The test fails if I run it locally through:

build clr.aot+libs -rc Checked -lc Release
src\tests\build.cmd nativeaot checked tree nativeaot\SmokeTests
src\tests\run.cmd runnativeaottests checked

2. There are several test failures, some of which look like they’ll need fixes in the merged wrapper infrastructure

  • The Exceptions test wants to be able to test AppDomain.UnhandledException:

    AppDomain.CurrentDomain.UnhandledException+=UnhandledExceptionEventHandler;

    The wrapper however generates a Try/Catch that doesn’t let UnhandledException happen. The test fails.

  • The TrimmingBehaviors test is sensitive to ripple effects in whole program view. The wrapper’s use of Xunit Assert.Equal brings in a massive amount of reflection that causes ripple effects all over the place. The test fails in a rather obscure way and it took a while to root cause.

I’m also concerned about whether we have any tests that may now be succeeding because of the ripple effects from the wrapper (and we would not notice if the thing they are testing gets broken because they get saved by the ripple effects.

To fix this one, can we make it so RequiresProcessIsolation really just generates a Main that calls the other Main, without checking exit codes, wrapping anything, Assert.Equaling etc?

Cc @dotnet/ilc-contrib

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @agocke, @MichalStrehovsky, @jkotas
See info in area-owners.md if you want to be subscribed.

@jkotas

Copy link
Copy Markdown
Member

Helix does not report the failures

Does this affect all merged tests or just the nativeaot ones that you are reverting?

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

Helix does not report the failures

Does this affect all merged tests or just the nativeaot ones that you are reverting?

I'm afraid of the answer to this. I didn't check. Smoke tests are absolutely critical.

@jkotas

Copy link
Copy Markdown
Member

I'm afraid of the answer to this. I didn't check.

Checking: #100319

@agocke

agocke commented Mar 27, 2024

Copy link
Copy Markdown
Member

The wrapper’s use of Xunit Assert.Equal brings in a massive amount of reflection that causes ripple effects all over the place.

This shouldn't be true anymore. The Microsoft.Dotnet.XUnitAssert package should sub in and it should be trim safe.

@jkotas

Copy link
Copy Markdown
Member

I'm afraid of the answer to this. I didn't check.

The other runtime tests are failing as expected https://dev.azure.com/dnceng-public/public/_build/results?buildId=620112&view=ms.vss-test-web.build-test-results-tab .

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

The wrapper’s use of Xunit Assert.Equal brings in a massive amount of reflection that causes ripple effects all over the place.

This shouldn't be true anymore. The Microsoft.Dotnet.XUnitAssert package should sub in and it should be trim safe.

Trim safety is not the problem here, it's the use of reflection on random stuff in the BCL.

In the case I saw, somewhere after Assert.Equal<T> we marked methods on IEquatable<T> as reflected on and that was breaking what a test was trying to exercise because we were no longer able to remove something. (It took extra long to troubleshoot because I thought it's something I broke, only to find out the test is broken in main.)

The tests under nativeaot need to have very precise control over what's in the dependency graph to be able to test the things they are testing. The implementation of Assert.Equal that still depends on reflection doesn't feel like what we'd want in the runtime test tree (it's fine for libs testing if it's trim safe, but runtime tests should have as little code running as part of the test infrastructure as possible).

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

I'm afraid of the answer to this. I didn't check.

The other runtime tests are failing as expected https://dev.azure.com/dnceng-public/public/_build/results?buildId=620112&view=ms.vss-test-web.build-test-results-tab .

Thanks for re-running the check - I also suspect this might be related to RequiresProcessIsolation; there's not much else that is different in these tests. We'll see if that's the case soon enough...

@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

Can anyone sign off? It's not acceptable to have main in a state where we basically don't run nativeaot testing for a week.

This needs to be merged before #100331 can fix testing RequiresProcessIsolation tests.

The test failure is an unrelated GC issue.

@MichalStrehovsky
MichalStrehovsky merged commit 782c2ee into dotnet:mainMar 27, 2024
@MichalStrehovsky

Copy link
Copy Markdown
MemberAuthor

Thanks!

@MichalStrehovsky
MichalStrehovsky deleted the rollb branch March 27, 2024 11:32
MichalStrehovsky added a commit to MichalStrehovsky/runtime that referenced this pull request Apr 3, 2024
This is unfortunate because it was added for native AOT sake in dotnet#91415.
Then Tomas rewrote the test to execute corerun.exe in dotnet#91560 making it 100% unsupportable with native AOT.
What the test is doing doesn't look supportable with the merged runner infra and runs into the same issues I saw in dotnet#100269.
We never noticed this test is broken because tests requiring process isolation are completely busted with native AOT. I did a local run and started re-baselining again because this is not the only regression.
MichalStrehovsky added a commit that referenced this pull request Apr 8, 2024
This is unfortunate because it was added for native AOT sake in #91415.
Then Tomas rewrote the test to execute corerun.exe in #91560 making it 100% unsupportable with native AOT.
What the test is doing doesn't look supportable with the merged runner infra and runs into the same issues I saw in #100269.
We never noticed this test is broken because tests requiring process isolation are completely busted with native AOT. I did a local run and started re-baselining again because this is not the only regression.
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Apr 27, 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.

4 participants

@MichalStrehovsky@jkotas@agocke@vitek-karas