onnxruntime/csharp/test/Microsoft.ML.OnnxRuntime.EndToEndTests.Mobile/runmobiletests.sh
Scott McKay b5a652c578
Add Xamarin support (#9436)
Add Xamarin support to the ORT nuget packages.
  - Update C# code to support Xamarin builds for iOS and Android
  - refactor some things to split out common code
  - include iOS and Android ORT native shared library in native nuget package
2021-10-27 20:07:07 +10:00

200 lines
No EOL
7.2 KiB
Bash
Executable file

#!/bin/bash
parametersResolved=true
parametersValid=true
locallatestAndroidTestRunId=null
latestiOSTestRunId=null
latestAndroidTestRunState=null
latestiOSTestRunState=null
androidTestResultStatus=null
iosTestResultStatus=null
finishedTests=false
errors=0
maxErrors=10
timeoutInSeconds=60
failed=false
# Determine latest test runs (first item is latest run)
function getLatestTestRunIds() {
idRegex='"id":"([0-9a-z-]*)"'
androidTestRunsJson=$(curl -s -b -v -w "%{http_code}" -H "X-API-Token:$tokenAndroid" "https://api.appcenter.ms/v0.1/apps/$org/$appNameAndroid/test_runs")
[[ $androidTestRunsJson =~ $idRegex ]]
latestAndroidTestRunId="${BASH_REMATCH[1]}"
iosTestRunsJson=$(curl -s -b -v -w "%{http_code}" -H "X-API-Token:$tokeniOS" "https://api.appcenter.ms/v0.1/apps/$org/$appNameiOS/test_runs")
[[ $iosTestRunsJson =~ $idRegex ]]
latestiOSTestRunId="${BASH_REMATCH[1]}"
}
# Check status of latest test runs
function checkTestRunStatus() {
runStatusRegex='"runStatus":"([a-z]*)"'
testResultRegex='"resultStatus":"([a-z]*)"'
# Get Android and iOS test run id's if they have not already been resolved
[ $latestiOSTestRunId = null ] || [ $latestAndroidTestRunId = null ] && { getLatestTestRunIds; }
# Error if it's not possible to resolve both test run ID values
[ $latestiOSTestRunId = null ] || [ $latestAndroidTestRunId = null ] && { ((errors++)); return; }
androidLatestTestRunJson=$(curl -s -b -v -w "%{http_code}" -H "X-API-Token:$tokenAndroid" "https://api.appcenter.ms/v0.1/apps/$org/$appNameAndroid/test_runs/$latestAndroidTestRunId")
[[ $androidLatestTestRunJson =~ $runStatusRegex ]]
latestAndroidTestRunState="${BASH_REMATCH[1]}"
iosLatestTestRunJson=$(curl -s -b -v -w "%{http_code}" -H "X-API-Token:$tokeniOS" "https://api.appcenter.ms/v0.1/apps/$org/$appNameiOS/test_runs/$latestiOSTestRunId")
[[ $iosLatestTestRunJson =~ $runStatusRegex ]]
latestiOSTestRunState="${BASH_REMATCH[1]}"
if [ "$latestAndroidTestRunState" = null ] || [ "$latestiOSTestRunState" = null ]; then
((errors++))
return
elif [ "$latestAndroidTestRunState" = "finished" ] && [ "$latestiOSTestRunState" = "finished" ]; then
finishedTests=true
[[ $androidLatestTestRunJson =~ $testResultRegex ]]
androidTestResultStatus="${BASH_REMATCH[1]}"
[[ $iosLatestTestRunJson =~ $testResultRegex ]]
iosTestResultStatus="${BASH_REMATCH[1]}"
else
finishedTests=false
fi
}
echo ""
echo "========== Platform-Specific Testing Started =========="
echo ""
# Resolve parameters
for i in "$@"; do
case $1 in
"" ) break ;;
-b | --test-build-dir ) sourceDirectory="$2"; shift ;;
-p | --packages-dir ) packagesDirectory="$2"; shift ;;
-a | --apk ) androidApp="$2"; shift ;;
-i | --ipa ) iosApp="$2"; shift ;;
-o | --org ) org="$2"; shift ;;
-na | --app-name-android ) appNameAndroid="$2"; shift ;;
-ni | --app-name-ios ) appNameiOS="$2"; shift ;;
-ta | --token-android ) tokenAndroid="$2"; shift ;;
-ti | --token-ios ) tokeniOS="$2"; shift ;;
-* | --*) echo "Unknown option: '$1'"; exit 1 ;;
* ) echo "Unknown argument: '$1'"; exit 1 ;;
esac
shift
done
# Validate parameters have been resolved
[ -z "$sourceDirectory" ] && { echo "Missing --source-directory parameter"; parametersResolved=false; }
[ -z "$packagesDirectory" ] && { echo "Missing --packages-directory parameter"; parametersResolved=false; }
[ -z "$androidApp" ] && { echo "Missing --android-app parameter"; parametersResolved=false; }
[ -z "$iosApp" ] && { echo "Missing --ios-app parameter"; parametersResolved=false; }
[ -z "$org" ] && { echo "Missing --org parameter"; parametersResolved=false; }
[ -z "$appNameAndroid" ] && { echo "Missing --app-name-android parameter"; parametersResolved=false; }
[ -z "$appNameiOS" ] && { echo "Missing --app-name-ios parameter"; parametersResolved=false; }
[ -z "$tokenAndroid" ] && { echo "Missing --token-android parameter"; parametersResolved=false; }
[ -z "$tokeniOS" ] && { echo "Missing --token-ios parameter"; parametersResolved=false; }
[ $parametersResolved = false ] && {
echo ""
echo "========== Platform-Specific Testing Completed =========="
echo ""
exit 1
}
# Validate parameter values are valid
[ ! -d "$sourceDirectory" ] && { echo "No directory exists at path specified for --test-build-dir"; parametersValid=false; }
[ ! -d "$packagesDirectory" ] && { echo "No directory exists at path specified for --packages-dir"; parametersValid=false; }
[ ! -f "$androidApp" ] && { echo "No apk file found using filepath specified for --apk"; parametersValid=false; }
[ ! -f "$iosApp" ] && { echo "No ipa file found using filepath specified for --ipa"; parametersValid=false; }
toolsDir="$(find "$packagesDirectory" -name 'tools' ! -name 'test-cloud.exe' | head -1)"
[ ! -d "$toolsDir" ] && { echo "Unable to locate the requisite tools directory within the directory specified for --packages-dir"; parametersValid=false; }
[ $parametersValid = false ] && {
echo ""
echo "========== Platform-Specific Testing Completed =========="
echo ""
exit 1
}
# Start the tests
echo "Starting Tests"
# Start Android Tests
startAndroidTests=$(appcenter test run uitest \
--app "$org/$appNameAndroid" \
--devices 3aaf6e5b \
--app-path $androidApp \
--test-series "platformunittests" \
--locale "en_US" \
--build-dir $sourceDirectory \
--uitest-tools-dir $toolsDir \
--async)
echo ""
echo " Android: STARTED"
# Start iOS Tests
startiOSTests=$(appcenter test run uitest \
--app "$org/$appNameiOS" \
--devices f236dfc0 \
--app-path $iosApp \
--test-series "platformunittests" \
--locale "en_US" \
--build-dir $sourceDirectory \
--uitest-tools-dir $toolsDir \
--async)
echo " iOS: STARTED"
# Monitor state of latest test runs (todo: should cancel any test runs successfully started if one or more failed to start )
checkTestRunStatus
[ "$latestAndroidTestRunState" != "running" ] && [ "$latestiOSTestRunState" != "running" ] && {
echo ""
echo "There was an issue starting the tests"
echo ""
echo "========== Platform-Specific Testing Completed =========="
echo ""
exit 1
}
echo ""
echo "Monitoring Test Runs"
echo ""
echo " Android: $latestAndroidTestRunId"
echo " iOS: $latestiOSTestRunId"
while [ $finishedTests = false ] && [ $failed = false ]; do
sleep $timeoutInSeconds
checkTestRunStatus
if [ "$errors" -ge "$maxErrors" ]; then
failed=true
fi
done
# Determine test outcome
[ $failed = true ] && {
echo ""
echo "There was an issue monitoring the tests"
echo ""
echo "========== Platform-Specific Testing Completed =========="
echo ""
exit 1
}
echo ""
echo "Tests Finished"
echo ""
[ "$androidTestResultStatus" = "passed" ] && { echo " Android: PASS"; }
[ "$androidTestResultStatus" != "passed" ] && { echo " Android: FAIL"; }
[ "$iosTestResultStatus" = "passed" ] && { echo " iOS: PASS"; }
[ "$iosTestResultStatus" != "passed" ] && { echo " iOS: FAIL"; }
echo ""
echo "========== Platform-Specific Testing Completed =========="
echo ""
[ "$androidTestResultStatus" != "passed" ] && [ "$iosTestResultStatus" != "passed" ] && { exit 1; }