Skip to content

Commit c6460f6

Browse files
committed
[build] Add APK test job
1 parent fd2e5b9 commit c6460f6

File tree

7 files changed

+168
-12
lines changed

7 files changed

+168
-12
lines changed

build-tools/Xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks/RunInstrumentationTests.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public class RunInstrumentationTests : Adb
1414
const string TestResultsPathResult = "INSTRUMENTATION_RESULT: nunit2-results-path=";
1515
internal const string AdbRestartText = "daemon not running; starting now at tcp:";
1616
internal const string AdbCrashErrorText = "The adb might have crashed and was restarted. ";
17-
const string ExitCodeName = "INSTRUMENTATION_CODE: ";
17+
const string InstrumentationExitCodeName = "INSTRUMENTATION_CODE: ";
1818
const int StateRunInstrumentation = 0;
1919
const int StateGetLogcat = 1;
2020
const int StateClearLogcat = 2;
@@ -42,7 +42,7 @@ public class RunInstrumentationTests : Adb
4242
public string LogLevel { get; set; }
4343

4444
int currentState = -1;
45-
int exitCode = 99;
45+
int instrumentationExitCode = 99;
4646
string targetTestResultsPath;
4747

4848
bool adbRestarted;
@@ -70,7 +70,7 @@ public override bool Execute ()
7070
return false;
7171
}
7272

73-
if (exitCode != -1) {
73+
if (instrumentationExitCode != -1) {
7474
FailedToRun = Component;
7575
Log.LogError (
7676
$"Instrumentation for component `{Component}` did not exit successfully. " +
@@ -145,14 +145,14 @@ protected override void ProcessStdout (string line)
145145
return;
146146

147147
int testResultIndex = line.IndexOf (TestResultsPathResult, StringComparison.OrdinalIgnoreCase);
148-
int exitCodeIndex = line.IndexOf (ExitCodeName, StringComparison.OrdinalIgnoreCase);
148+
int exitCodeIndex = line.IndexOf (InstrumentationExitCodeName, StringComparison.OrdinalIgnoreCase);
149149

150150
if (testResultIndex < 0 && exitCodeIndex < 0)
151151
return;
152152
else if (testResultIndex >= 0)
153153
targetTestResultsPath = line.Substring (testResultIndex + TestResultsPathResult.Length).Trim ();
154154
else if (exitCodeIndex >= 0)
155-
exitCode = int.Parse (line.Substring (exitCodeIndex + ExitCodeName.Length).Trim ());
155+
instrumentationExitCode = int.Parse (line.Substring (exitCodeIndex + InstrumentationExitCodeName.Length).Trim ());
156156
}
157157
}
158158
}

build-tools/Xamarin.Android.Tools.BootstrapTasks/result-packaging.targets

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<_BuildStatusFiles Include="$(XamarinAndroidSourcePath)Configuration.OperatingSystem.props" Condition="Exists('$(XamarinAndroidSourcePath)Configuration.OperatingSystem.props')" />
77
<_BuildStatusFiles Include="$(XamarinAndroidSourcePath)Configuration.Override.props" Condition="Exists('$(XamarinAndroidSourcePath)Configuration.Override.props')" />
88
<_BuildStatusFiles Include="$(XamarinAndroidSourcePath)bin\Build$(Configuration)\XABuildConfig.cs" Condition="Exists('$(XamarinAndroidSourcePath)bin\Build$(Configuration)\XABuildConfig.cs')" />
9-
<_BuildStatusFiles Include="$(XamarinAndroidSourcePath)bin\Build$(Configuration)\msbuild*.binlog" />
9+
<_BuildStatusFiles Include="$(XamarinAndroidSourcePath)bin\Build$(Configuration)\*.binlog" />
1010
<_BuildStatusFiles Include="$(XamarinAndroidSourcePath)**\config.log" />
1111
<_BuildStatusFiles Include="$(XamarinAndroidSourcePath)**\config.status" />
1212
<_BuildStatusFiles Include="$(XamarinAndroidSourcePath)**\config.h" />
@@ -20,7 +20,7 @@
2020
<_TestResultFiles Include="$(XamarinAndroidSourcePath)bin\Test$(Configuration)\*.log" />
2121
<_TestResultFiles Include="$(XamarinAndroidSourcePath)bin\Test$(Configuration)\compatibility\*" />
2222
<_TestResultFiles Include="$(XamarinAndroidSourcePath)bin\Test$(Configuration)\logcat*" />
23-
<_TestResultFiles Include="$(XamarinAndroidSourcePath)bin\Test$(Configuration)\msbuild*.binlog*" />
23+
<_TestResultFiles Include="$(XamarinAndroidSourcePath)bin\Test$(Configuration)\*.binlog" />
2424
<_TestResultFiles Include="$(XamarinAndroidSourcePath)bin\Test$(Configuration)\temp\**\*.binlog" />
2525
<_TestResultFiles Include="$(XamarinAndroidSourcePath)bin\Test$(Configuration)\temp\**\*.log" />
2626
<_TestResultFiles Include="$(XamarinAndroidSourcePath)bin\Test$(Configuration)\TestOutput-*.txt" />

build-tools/automation/azure-pipelines.yaml

Lines changed: 106 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ trigger:
77
# Global variables
88
variables:
99
BundleArtifactName: bundle
10+
InstallerArtifactName: unsigned-installers
1011
AutoProvisionArgs: /p:AutoProvision=True /p:AutoProvisionUsesSudo=True /p:IgnoreMaxMonoVersion=False
1112

1213
# Stage and Job "display names" are shortened because they are combined to form the name of the corresponding GitHub check.
@@ -121,7 +122,7 @@ stages:
121122
- task: PublishPipelineArtifact@0
122123
displayName: upload unsigned installers
123124
inputs:
124-
artifactName: unsigned
125+
artifactName: $(InstallerArtifactName)
125126
targetPath: bin/Build$(XA.Build.Configuration)/unsigned-installers
126127

127128
- task: MSBuild@1
@@ -228,3 +229,107 @@ stages:
228229
artifactName: win-build-test-results
229230
targetPath: $(Build.ArtifactStagingDirectory)
230231
condition: always()
232+
233+
- stage: test
234+
displayName: Test
235+
dependsOn: mac_build
236+
jobs:
237+
- job: mac_apk_tests
238+
displayName: APK Instrumentation
239+
pool: $(XA.Build.Mac.Pool)
240+
timeoutInMinutes: 240
241+
cancelTimeoutInMinutes: 5
242+
variables:
243+
ApkTestConfiguration: Release
244+
steps:
245+
- task: DownloadPipelineArtifact@1
246+
inputs:
247+
artifactName: $(InstallerArtifactName)
248+
itemPattern: "*.pkg"
249+
downloadPath: $(System.DefaultWorkingDirectory)
250+
251+
- template: yaml-templates/run-installer.yaml
252+
253+
# HACK - Provision Emulator
254+
- script: |
255+
make prepare CONFIGURATION=$(ApkTestConfiguration) V=1 MSBUILD=msbuild MSBUILD_ARGS="$(AutoProvisionArgs)"
256+
git clean -xfd
257+
displayName: (hack) make prepare - provision emulator
258+
259+
- task: NuGetCommand@2
260+
displayName: nuget restore Xamarin.Android.Tools.sln
261+
inputs:
262+
restoreSolution: external/xamarin-android-tools/Xamarin.Android.Tools.sln
263+
264+
- task: MSBuild@1
265+
displayName: build Xamarin.Android.Tools.BootstrapTasks.csproj
266+
inputs:
267+
solution: build-tools/xamarin.Android.Tools.BootstrapTasks/Xamarin.Android.Tools.BootstrapTasks.csproj
268+
configuration: $(ApkTestConfiguration)
269+
msbuildArguments: /bl:$(System.DefaultWorkingDirectory)/bin/Test$(ApkTestConfiguration)/BootstrapTasks.binlog
270+
271+
- task: NuGetCommand@2
272+
displayName: nuget restore Xamarin.Android-Tests.sln
273+
inputs:
274+
restoreSolution: Xamarin.Android-Tests.sln
275+
276+
- template: yaml-templates/apk-instrumentation.yaml
277+
parameters:
278+
configuration: $(ApkTestConfiguration)
279+
testName: Mono.Android_Tests
280+
project: src/Mono.Android/Test/Mono.Android-Tests.csproj
281+
testResultsFiles: bin/Test$(ApkTestConfiguration)/TestResult-Mono.Android_Tests.xml
282+
283+
- template: yaml-templates/apk-instrumentation.yaml
284+
parameters:
285+
configuration: $(ApkTestConfiguration)
286+
testName: Mono.Android_TestsAppBundle
287+
project: tests/Runtime-AppBundle/Mono.Android-TestsAppBundle.csproj
288+
testResultsFiles: bin/Test$(ApkTestConfiguration)/TestResult-Mono.Android_TestsAppBundle.xml
289+
packageType: Aab
290+
291+
- template: yaml-templates/apk-instrumentation.yaml
292+
parameters:
293+
configuration: $(ApkTestConfiguration)
294+
testName: Mono.Android_TestsMultiDex
295+
project: tests/Runtime-MultiDex/Mono.Android-TestsMultiDex.csproj
296+
testResultsFiles: bin/Test$(ApkTestConfiguration)/TestResult-Mono.Android_TestsMultiDex.xml
297+
298+
- template: yaml-templates/apk-instrumentation.yaml
299+
parameters:
300+
configuration: $(ApkTestConfiguration)
301+
testName: Xamarin.Android.JcwGen_Tests
302+
project: tests/CodeGen-Binding/Xamarin.Android.JcwGen-Tests/Xamarin.Android.JcwGen-Tests.csproj
303+
testResultsFiles: bin/Test$(ApkTestConfiguration)/TestResult-Xamarin.Android.JcwGen_Tests.xml
304+
305+
- template: yaml-templates/apk-instrumentation.yaml
306+
parameters:
307+
configuration: $(ApkTestConfiguration)
308+
testName: Xamarin.Android.Locale_Tests
309+
project: tests/locales/Xamarin.Android.Locale-Tests/Xamarin.Android.Locale-Tests.csproj
310+
testResultsFiles: bin/Test$(ApkTestConfiguration)/TestResult-Xamarin.Android.Locale_Tests.xml
311+
312+
- template: yaml-templates/apk-instrumentation.yaml
313+
parameters:
314+
configuration: $(ApkTestConfiguration)
315+
testName: Xamarin.Android.EmbeddedDSO_Test
316+
project: tests/EmbeddedDSOs/EmbeddedDSO/EmbeddedDSO.csproj
317+
testResultsFiles: bin/Test$(ApkTestConfiguration)/TestResult-Xamarin.Android.EmbeddedDSO_Test.nunit.xml
318+
319+
- task: MSBuild@1
320+
displayName: shut down emulator
321+
inputs:
322+
solution: src/Mono.Android/Test/Mono.Android-Tests.csproj
323+
configuration: $(ApkTestConfiguration)
324+
msbuildArguments: >
325+
/t:AcquireAndroidTarget,ReleaseAndroidTarget
326+
/bl:$(System.DefaultWorkingDirectory)/bin/Test$(ApkTestConfiguration)/shutdown-emulator.binlog
327+
condition: succeededOrFailed()
328+
329+
- task: MSBuild@1
330+
displayName: package results
331+
inputs:
332+
solution: build-tools\Xamarin.Android.Tools.BootstrapTasks\Xamarin.Android.Tools.BootstrapTasks.csproj
333+
configuration: $(ApkTestConfiguration)
334+
msbuildArguments: /t:ZipTestResults /p:TestResultZipOutputPath=$(Build.ArtifactStagingDirectory)
335+
condition: always()
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
parameters:
2+
configuration: []
3+
testName: []
4+
project: []
5+
testResultsFiles: []
6+
testResultsFormat: NUnit
7+
packageType: Apk
8+
9+
steps:
10+
- task: MSBuild@1
11+
displayName: run ${{ parameters.testName }}
12+
inputs:
13+
solution: ${{ parameters.project }}
14+
configuration: ${{ parameters.configuration }}
15+
msbuildArguments: >
16+
/t:AcquireAndroidTarget,SignAndroidPackage,DeployTest${{ parameters.packageType }}s,RunTestApks,ReportComponentFailures
17+
/bl:$(System.DefaultWorkingDirectory)/bin/Test${{ parameters.configuration }}run${{ parameters.testName }}.binlog
18+
condition: succeededOrFailed()
19+
20+
- task: PublishTestResults@2
21+
displayName: publish ${{ parameters.testName }} results
22+
inputs:
23+
testResultsFormat: ${{ parameters.testResultsFormat }}
24+
testResultsFiles: ${{ parameters.testResultsFiles }}
25+
failTaskOnFailedTests: true
26+
testRunTitle: ${{ parameters.testName }}
27+
condition: succeededOrFailed()
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
parameters:
2+
artifactDirectory: $(System.DefaultWorkingDirectory)
3+
4+
steps:
5+
- powershell: |
6+
if ([Environment]::OSVersion.Platform -eq "Unix") {
7+
$installer = Get-ChildItem -Path "${{ parameters.artifactDirectory }}/*" -Include *.pkg -File
8+
} else {
9+
$installer = Get-ChildItem -Path "${{ parameters.artifactDirectory }}\*" -Include *.vsix -File
10+
}
11+
if (![System.IO.File]::Exists($installer)) {
12+
throw [System.IO.FileNotFoundException] "Installer not found in $artifactDirectory."
13+
}
14+
Write-Host "##vso[task.setvariable variable=XA.Provisionator.Args]$installer"
15+
displayName: find installer and set provisionator variable
16+
17+
- task: provisionator@2
18+
inputs:
19+
provisionator_uri: $(provisionator-uri)
20+
github_token: $(GitHub.Token)
21+
provisioning_script: $(XA.Provisionator.Args)
22+
provisioning_extra_args: -vv

build-tools/scripts/TestApks.targets

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -175,14 +175,16 @@
175175
<_KeyAlias>mykey</_KeyAlias>
176176
<_KeyPass>android</_KeyPass>
177177
<_StorePass>android</_StorePass>
178+
<!-- Support for running against a system installation of XA. -->
179+
<BundleToolJarPath Condition=" !Exists('$(BundleToolJarPath)') ">$(AndroidBundleToolJarPath)</BundleToolJarPath>
178180
<JavaPath Condition=" '$(JavaPath)' == '' And !$([MSBuild]::IsOsPlatform(Windows)) ">$(JavaSdkDirectory)\bin\java</JavaPath>
179181
<JavaPath Condition=" '$(JavaPath)' == '' And $([MSBuild]::IsOsPlatform(Windows)) ">$(JavaSdkDirectory)\bin\java.exe</JavaPath>
180182
</PropertyGroup>
181183
<Xamarin.Android.Tools.BootstrapTasks.BundleTool
182184
Arguments="build-apks --connected-device --overwrite --mode default --bundle &quot;%(TestAab.Identity)&quot; --output &quot;%(TestAab.Identity).apks&quot;"
183185
ContinueOnError="ErrorAndContinue"
184186
JavaPath="$(JavaPath)"
185-
JarPath="$(AndroidBundleToolJarPath)"
187+
JarPath="$(BundleToolJarPath)"
186188
AdbToolExe="$(AdbToolExe)"
187189
AdbToolPath="$(AdbToolPath)"
188190
KeyStore="$([System.IO.Path]::GetFullPath ('$(_KeyStore)'))"
@@ -195,7 +197,7 @@
195197
Arguments="install-apks --modules _ALL_ --apks &quot;%(TestAab.Identity).apks&quot;"
196198
ContinueOnError="ErrorAndContinue"
197199
JavaPath="$(JavaPath)"
198-
JarPath="$(AndroidBundleToolJarPath)"
200+
JarPath="$(BundleToolJarPath)"
199201
AdbToolExe="$(AdbToolExe)"
200202
AdbToolPath="$(AdbToolPath)"
201203
/>

src/Mono.Android/Test/Mono.Android-Tests.targets

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@
1717
<Error Text="Could not locate Android NDK." Condition="!Exists ('$(NdkBuildPath)')" />
1818
<Exec Command="&quot;$(NdkBuildPath)&quot;" />
1919
</Target>
20-
<!-- Not required for testing against a system installation -->
20+
<!-- Not required when testing against a system installation of XA. -->
2121
<Target Name="EnsureJavaInteropDllConfigs"
22-
Condition="Exists ('$(XAInstallPrefix)xbuild\Xamarin\Android\Java.Interop.dll.config')"
22+
Condition="Exists ('$(XAInstallPrefix)xbuild\Xamarin\Android\Java.Interop.dll')"
2323
BeforeTargets="_GenerateJniMarshalMethods"
2424
DependsOnTargets="_CreateJavaInteropDllConfigs">
2525
</Target>

0 commit comments

Comments
 (0)