Uh oh!
There was an error while loading. Please reload this page.
Roll back conversion of native aot tests to merged model - #100269
Conversation
Tagging subscribers to this area: @agocke, @MichalStrehovsky, @jkotas |
jkotas
commented
Mar 26, 2024
Does this affect all merged tests or just the nativeaot ones that you are reverting? |
MichalStrehovsky
commented
Mar 26, 2024
I'm afraid of the answer to this. I didn't check. Smoke tests are absolutely critical. |
jkotas
commented
Mar 27, 2024
Checking: #100319 |
This shouldn't be true anymore. The Microsoft.Dotnet.XUnitAssert package should sub in and it should be trim safe. |
jkotas
commented
Mar 27, 2024
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
commented
Mar 27, 2024
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 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
commented
Mar 27, 2024
Thanks for re-running the check - I also suspect this might be related to |
MichalStrehovsky
commented
Mar 27, 2024
Can anyone sign off? It's not acceptable to have This needs to be merged before #100331 can fix testing RequiresProcessIsolation tests. The test failure is an unrelated GC issue. |
MichalStrehovsky
commented
Mar 27, 2024
Thanks! |
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.
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.
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:
runtime/src/tests/nativeaot/SmokeTests/Exceptions/Exceptions.cs
Lines 67 to 71 in 78a895f
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:
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:
runtime/src/tests/nativeaot/SmokeTests/Exceptions/Exceptions.cs
Line 43 in 78a895f
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