Skip to content

Commit e4ca346

Browse files
[nativeaot] run Mono.Android-Tests
* Add Categories Export, GCBridge * Add Mono category * Setup `TestApkFeeds.props` /Users/runner/work/1/s/tests/Mono.Android-Tests/Mono.Android-Tests/Mono.Android.NET-Tests.csproj : error NU1102: Unable to find package Microsoft.Android.Runtime.NativeAOT.35.android-arm64 with version (= 35.99.0-ci.dev-peppers-mono-android-tests-nativeaot.229) [nativeaot] fix default `SynchronizationContext` Running `Mono.Android-Tests` under NativeAOT has the test failure: 03-04 23:06:20.021 6191 6211 I NUnit : SynchronizationContext_Is_ThreadingSynchronizationContextCurrent 03-04 23:06:20.032 6191 6211 E NUnit : [FAIL] 03-04 23:06:20.032 6191 6211 E NUnit : : Expected: True 03-04 23:06:20.032 6191 6211 E NUnit : But was: False 03-04 23:06:20.032 6191 6211 E NUnit : at libMono.Android.NET-Tests!<BaseAddress>+0x1482f63 03-04 23:06:20.032 6191 6211 E NUnit : at System.Reflection.DynamicInvokeInfo.Invoke(Object, IntPtr, Object[], BinderBundle, Boolean) + 0xf3 Initially, if we called `JNIEnvInit.SetSynchronizationContext()` at startup, this can result in the static ctor for `Android.App.Application` running *too soon* before `JNIEnvInit.InitializeJniRuntime()` has completed. To fix this: * Add an empty `static ctor` to `Android.App.Application` to remove the `beforefieldinit` flag from the type. * Call `JNIEnvInit.SetSynchronizationContext()` at startup for NativeAOT. With this change in place, no crashes occur at startup and the test passes. * Fix `EmbeddedResources_ShouldBeLocalized` test
1 parent bc9f07c commit e4ca346

File tree

15 files changed

+46
-17
lines changed

15 files changed

+46
-17
lines changed

build-tools/automation/yaml-templates/stage-package-tests.yaml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,16 @@ stages:
198198
artifactSource: bin/Test$(XA.Build.Configuration)/$(DotNetTargetFramework)-android/Mono.Android.NET_Tests-Signed.aab
199199
artifactFolder: $(DotNetTargetFramework)-AotLlvm
200200

201+
- template: /build-tools/automation/yaml-templates/apk-instrumentation.yaml
202+
parameters:
203+
configuration: $(XA.Build.Configuration)
204+
testName: Mono.Android.NET_Tests-NativeAOT
205+
project: tests/Mono.Android-Tests/Mono.Android-Tests/Mono.Android.NET-Tests.csproj
206+
testResultsFiles: TestResult-Mono.Android.NET_Tests-$(XA.Build.Configuration)NativeAOT.xml
207+
extraBuildArgs: -p:TestsFlavor=NativeAOT -p:PublishAot=true
208+
artifactSource: bin/Test$(XA.Build.Configuration)/$(DotNetTargetFramework)-android/Mono.Android.NET_Tests-Signed.aab
209+
artifactFolder: $(DotNetTargetFramework)-NativeAOT
210+
201211
- template: /build-tools/automation/yaml-templates/apk-instrumentation.yaml
202212
parameters:
203213
configuration: $(XA.Build.Configuration)
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<!-- Needed for projects using CoreCLR/NativeAOT runtime packs that are not in the workload -->
2+
<Project>
3+
<PropertyGroup Condition=" '$(RunningOnCI)' == 'true' ">
4+
<_NuGetFolderOnCI>$(MSBuildThisFileDirectory)..\..\bin\Build$(Configuration)\nuget-unsigned</_NuGetFolderOnCI>
5+
<RestoreAdditionalProjectSources Condition="Exists('$(_NuGetFolderOnCI)')">$(_NuGetFolderOnCI)</RestoreAdditionalProjectSources>
6+
<_FastDeploymentDiagnosticLogging>true</_FastDeploymentDiagnosticLogging>
7+
</PropertyGroup>
8+
</Project>

build-tools/scripts/TestApks.targets

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@
1717
<UsingTask AssemblyFile="$(PrepTasksAssembly)" TaskName="Xamarin.Android.BuildTools.PrepTasks.ProcessApkSizes" />
1818

1919
<PropertyGroup>
20-
<!-- APK tests might run on 32-bit emulators -->
21-
<RuntimeIdentifiers Condition=" '$(RuntimeIdentifier)' == '' ">android-arm64;android-x86;android-x64;</RuntimeIdentifiers>
20+
<!-- Mono APK tests might run on 32-bit emulators -->
21+
<RuntimeIdentifiers Condition=" '$(RuntimeIdentifier)' == '' and '$(PublishAot)' != 'true' and '$(UseMonoRuntime)' != 'false' ">android-arm64;android-x86;android-x64;</RuntimeIdentifiers>
2222
<TestAvdApiLevel Condition=" '$(TestAvdApiLevel)' == '' ">29</TestAvdApiLevel>
2323
<TestAvdAbi Condition=" '$(TestAvdAbi)' == '' and '$(HostOS)' == 'Darwin' and '$(HostOSArchitecture)' == 'Arm64' ">arm64-v8a</TestAvdAbi>
2424
<TestAvdAbi Condition=" '$(TestAvdAbi)' == '' ">x86_64</TestAvdAbi>

samples/NativeAOT/NativeAOT.csproj

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,6 @@
1313
<PublishAot>true</PublishAot>
1414
</PropertyGroup>
1515

16-
<!-- Settings for CI -->
17-
<PropertyGroup Condition=" '$(RunningOnCI)' == 'true' ">
18-
<_NuGetFolderOnCI>..\..\bin\Build$(Configuration)\nuget-unsigned</_NuGetFolderOnCI>
19-
<RestoreAdditionalProjectSources Condition="Exists('$(_NuGetFolderOnCI)')">$(_NuGetFolderOnCI)</RestoreAdditionalProjectSources>
20-
<_FastDeploymentDiagnosticLogging>true</_FastDeploymentDiagnosticLogging>
21-
</PropertyGroup>
16+
<Import Project="..\..\build-tools\scripts\TestApkFeeds.props" />
2217

2318
</Project>

tests/Mono.Android-Tests/Java.Interop-Tests/Java.InteropTests/AndroidValueManagerContractTests.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
using System;
44
using System.Collections.Generic;
5+
using System.Diagnostics.CodeAnalysis;
56
using System.Linq;
67
using System.Reflection;
78
using System.Threading;
@@ -11,9 +12,10 @@
1112
using NUnit.Framework;
1213

1314
namespace Java.InteropTests {
14-
[TestFixture]
15+
[TestFixture, Category ("Mono")]
1516
public class AndroidValueManagerContractTests : JniRuntimeJniValueManagerContract {
1617

18+
[DynamicallyAccessedMembers (DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)]
1719
protected override Type ValueManagerType => typeof (Android.Runtime.AndroidValueManager);
1820
}
1921
}

tests/Mono.Android-Tests/Mono.Android-Tests/Android.Runtime/JnienvArrayMarshaling.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ public void CopyArray_JavaLangStringArrayArrayToSystemStringArrayArray ()
9191
}
9292
}
9393

94-
[Test]
94+
[Test, Ignore ("TODO hangs test suite")]
9595
public void CopyArray_JavaLangObjectArrayToJavaLangStringArray ()
9696
{
9797
using (var stringArray = new Java.Lang.Object (JNIEnv.NewArray (new[]{"a", "b"}), JniHandleOwnership.TransferLocalRef)) {

tests/Mono.Android-Tests/Mono.Android-Tests/Java.Interop/JnienvTest.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ public void SetField_PermitNullValues ()
238238
}
239239
}
240240

241-
[Test]
241+
[Test, Category ("Export")]
242242
public void CreateTypeWithExportedMethods ()
243243
{
244244
using (var e = new ContainsExportedMethods ()) {
@@ -250,7 +250,7 @@ public void CreateTypeWithExportedMethods ()
250250
}
251251
}
252252

253-
[Test]
253+
[Test, Category ("Export")]
254254
public void ActivatedDirectObjectSubclassesShouldBeRegistered ()
255255
{
256256
if (Build.VERSION.SdkInt <= BuildVersionCodes.GingerbreadMr1)
@@ -405,7 +405,7 @@ public void MoarThreadingTests ()
405405
Assert.IsNull (ignore_t2, string.Format ("No exception should be thrown [t2]! Got: {0}", ignore_t2));
406406
}
407407

408-
[Test]
408+
[Test, Category ("Mono")]
409409
public void JavaToManagedTypeMapping ()
410410
{
411411
Type m = Java.Interop.TypeManager.GetJavaToManagedType ("android/content/res/Resources");
@@ -414,7 +414,7 @@ public void JavaToManagedTypeMapping ()
414414
Assert.AreEqual (null, m);
415415
}
416416

417-
[Test]
417+
[Test, Category ("Mono")]
418418
public void ManagedToJavaTypeMapping ()
419419
{
420420
Type type = typeof(Activity);
@@ -426,7 +426,7 @@ public void ManagedToJavaTypeMapping ()
426426
Assert.AreEqual (null, m, "`JnienvTest` does *not* subclass Java.Lang.Object, it should *not* be in the typemap!");
427427
}
428428

429-
[Test]
429+
[Test, Category ("GCBridge")]
430430
public void DoNotLeakWeakReferences ()
431431
{
432432
GC.Collect ();

tests/Mono.Android-Tests/Mono.Android-Tests/Mono.Android.NET-Tests.csproj

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk" >
22

33
<Import Project="..\..\..\Configuration.props" />
4+
<Import Project="..\..\..\build-tools\scripts\TestApkFeeds.props" />
45

56
<PropertyGroup>
67
<TargetFramework>$(DotNetAndroidTargetFramework)</TargetFramework>
@@ -22,13 +23,17 @@
2223
<WarningsAsErrors>IL2037</WarningsAsErrors>
2324
<AndroidUseNegotiateAuthentication>true</AndroidUseNegotiateAuthentication>
2425
<AndroidNdkDirectory></AndroidNdkDirectory>
26+
<DefineConstants Condition=" '$(UseMonoRuntime)' == 'false' ">$(DefineConstants);CORECLR</DefineConstants>
27+
<DefineConstants Condition=" '$(PublishAot)' == 'true' ">$(DefineConstants);NATIVEAOT</DefineConstants>
2528
<!--
2629
TODO: Fix excluded tests
2730
For $(EnableLLVM)
2831
InetAccess excluded: https://github.com/dotnet/runtime/issues/73304
2932
NetworkInterfaces excluded: https://github.com/dotnet/runtime/issues/75155
3033
-->
3134
<ExcludeCategories>DotNetIgnore</ExcludeCategories>
35+
<!-- Features that do not work on NativeAOT -->
36+
<ExcludeCategories Condition=" '$(PublishAot)' == 'true' ">$(ExcludeCategories):Mono:Export:GCBridge</ExcludeCategories>
3237
<!-- FIXME: LLVMIgnore https://github.com/dotnet/runtime/issues/89190 -->
3338
<ExcludeCategories Condition=" '$(EnableLLVM)' == 'true' ">$(ExcludeCategories):LLVMIgnore</ExcludeCategories>
3439
<ExcludeCategories Condition=" '$(EnableLLVM)' == 'true' ">$(ExcludeCategories):InetAccess:NetworkInterfaces</ExcludeCategories>

tests/Mono.Android-Tests/Mono.Android-Tests/System.Net/SslTest.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ bool ShouldIgnoreException (WebException wex)
2727

2828
// https://xamarin.desk.com/agent/case/35534
2929
[Test]
30+
[Ignore ("TODO crashes on NativeAOT")]
3031
public void SslWithinTasksShouldWork ()
3132
{
3233
var cb = ServicePointManager.ServerCertificateValidationCallback;

tests/Mono.Android-Tests/Mono.Android-Tests/System/AppContextTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public void GetData (string name, string expected)
4747
},
4848
};
4949

50-
[Test]
50+
[Test, Category ("Mono")]
5151
[TestCaseSource (nameof (TestPrivateSwitchesSource))]
5252
public void TestPrivateSwitches (
5353
[DynamicallyAccessedMembers (DynamicallyAccessedMemberTypes.All)]

tests/Mono.Android-Tests/Mono.Android-Tests/Xamarin.Android.Net/AndroidClientHandlerTests.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ bool IgnoreIfConnectionFailed (WebException wex, out bool connectionFailed)
146146
}
147147
}
148148

149+
[Ignore ("TODO crashes on NativeAOT")]
149150
public abstract class AndroidHandlerTestBase : HttpClientHandlerTestBase
150151
{
151152
static IEnumerable<Exception> Exceptions (Exception e)
@@ -314,7 +315,7 @@ public bool ShouldIgnoreSuccessStatusCode (HttpStatusCode code)
314315
}
315316
}
316317

317-
[TestFixture]
318+
[TestFixture, Category ("Mono")]
318319
public class AndroidClientHandlerTests : AndroidHandlerTestBase
319320
{
320321
protected override HttpMessageHandler CreateHandler ()

tests/Mono.Android-Tests/Mono.Android-Tests/Xamarin.Android.Net/AndroidMessageHandlerNegotiateAuthenticationTests.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ namespace Xamarin.Android.NetTests {
1414
// in the Mono.Android.NET-Tests.csproj file.
1515
[TestFixture]
1616
[Category ("InetAccess")]
17+
[Ignore ("TODO crashes on NativeAOT")]
1718
public sealed class AndroidMessageHandlerNegotiateAuthenticationTests
1819
{
1920
// Negotiate authentication is available for Android since .NET 7

tests/Mono.Android-Tests/Mono.Android-Tests/Xamarin.Android.Net/AndroidMessageHandlerTests.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
namespace Xamarin.Android.NetTests
1515
{
1616
[TestFixture]
17+
[Ignore ("TODO crashes on NativeAOT")]
1718
public class AndroidMessageHandlerTests : AndroidHandlerTestBase
1819
{
1920
protected override HttpMessageHandler CreateHandler ()

tests/Mono.Android-Tests/Mono.Android-Tests/Xamarin.Android.Net/HttpClientIntegrationTests.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1062,6 +1062,7 @@ public static implicit operator HttpMessageHandler (AndroidHandlerSettingsAdapte
10621062
}
10631063

10641064
[TestFixture]
1065+
[Category ("Mono")]
10651066
public class AndroidClientHandlerIntegrationTests : HttpClientIntegrationTestBase
10661067
{
10671068
protected override AndroidHandlerSettingsAdapter CreateHandler ()

tests/Mono.Android-Tests/Mono.Android-Tests/Xamarin.Android.RuntimeTests/NUnitInstrumentation.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,17 @@ protected NUnitInstrumentation(IntPtr handle, JniHandleOwnership transfer)
3030
protected override IList<TestAssemblyInfo> GetTestAssemblies()
3131
{
3232
Assembly asm = Assembly.GetExecutingAssembly();
33+
#if !NATIVEAOT && !CORECLR // TODO: Java.Interop-Tests not passing yet
3334
Assembly ji = typeof (Java.InteropTests.JavaInterop_Tests_Reference).Assembly;
35+
#endif
3436

3537

3638
return new List<TestAssemblyInfo>()
3739
{
3840
new TestAssemblyInfo (asm, asm.Location ?? String.Empty),
41+
#if !NATIVEAOT && !CORECLR
3942
new TestAssemblyInfo (ji, ji.Location ?? String.Empty),
43+
#endif
4044
};
4145
}
4246
}

0 commit comments

Comments
 (0)