1*b7893ccfSSadaf Ebrahimi#!/bin/bash 2*b7893ccfSSadaf Ebrahimi 3*b7893ccfSSadaf Ebrahimi# Copyright 2017 The Android Open Source Project 4*b7893ccfSSadaf Ebrahimi# 5*b7893ccfSSadaf Ebrahimi# Licensed under the Apache License, Version 2.0 (the "License"); 6*b7893ccfSSadaf Ebrahimi# you may not use this file except in compliance with the License. 7*b7893ccfSSadaf Ebrahimi# You may obtain a copy of the License at 8*b7893ccfSSadaf Ebrahimi# 9*b7893ccfSSadaf Ebrahimi# http://www.apache.org/licenses/LICENSE-2.0 10*b7893ccfSSadaf Ebrahimi# 11*b7893ccfSSadaf Ebrahimi# Unless required by applicable law or agreed to in writing, software 12*b7893ccfSSadaf Ebrahimi# distributed under the License is distributed on an "AS IS" BASIS, 13*b7893ccfSSadaf Ebrahimi# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*b7893ccfSSadaf Ebrahimi# See the License for the specific language governing permissions and 15*b7893ccfSSadaf Ebrahimi# limitations under the License. 16*b7893ccfSSadaf Ebrahimi 17*b7893ccfSSadaf Ebrahimi# Quiet by default 18*b7893ccfSSadaf Ebrahimiset +x 19*b7893ccfSSadaf Ebrahimi 20*b7893ccfSSadaf Ebrahimiecho 21*b7893ccfSSadaf Ebrahimiecho === Vulkan Validation Layers Tests === 22*b7893ccfSSadaf Ebrahimiecho Running test script: build-android/test_APK.sh 23*b7893ccfSSadaf Ebrahimiecho 24*b7893ccfSSadaf Ebrahimi 25*b7893ccfSSadaf Ebrahimi# 26*b7893ccfSSadaf Ebrahimi# Parse parameters 27*b7893ccfSSadaf Ebrahimi# 28*b7893ccfSSadaf Ebrahimi 29*b7893ccfSSadaf Ebrahimifunction printUsage { 30*b7893ccfSSadaf Ebrahimi echo "Supported parameters are:" 31*b7893ccfSSadaf Ebrahimi echo " -p|--platform <platform> (optional)" 32*b7893ccfSSadaf Ebrahimi echo " -f|--filter <gtest filter list> (optional)" 33*b7893ccfSSadaf Ebrahimi echo " -s|--serial <target device serial number> (optional)" 34*b7893ccfSSadaf Ebrahimi echo " -a|--abi <target abi> (optional)" 35*b7893ccfSSadaf Ebrahimi echo 36*b7893ccfSSadaf Ebrahimi echo "i.e. ${0##*/} -p <platform> -f <test filter> -s <serial number>" 37*b7893ccfSSadaf Ebrahimi exit 1 38*b7893ccfSSadaf Ebrahimi} 39*b7893ccfSSadaf Ebrahimi 40*b7893ccfSSadaf Ebrahimiif [[ $(($# % 2)) -ne 0 ]] 41*b7893ccfSSadaf Ebrahimithen 42*b7893ccfSSadaf Ebrahimi echo Parameters must be provided in pairs. 43*b7893ccfSSadaf Ebrahimi echo parameter count = $# 44*b7893ccfSSadaf Ebrahimi echo 45*b7893ccfSSadaf Ebrahimi printUsage 46*b7893ccfSSadaf Ebrahimi exit 1 47*b7893ccfSSadaf Ebrahimifi 48*b7893ccfSSadaf Ebrahimi 49*b7893ccfSSadaf Ebrahimiwhile [[ $# -gt 0 ]] 50*b7893ccfSSadaf Ebrahimido 51*b7893ccfSSadaf Ebrahimi case $1 in 52*b7893ccfSSadaf Ebrahimi -p|--platform) 53*b7893ccfSSadaf Ebrahimi platform="$2" 54*b7893ccfSSadaf Ebrahimi shift 2 55*b7893ccfSSadaf Ebrahimi ;; 56*b7893ccfSSadaf Ebrahimi -f|--filter) 57*b7893ccfSSadaf Ebrahimi filter="$2" 58*b7893ccfSSadaf Ebrahimi shift 2 59*b7893ccfSSadaf Ebrahimi ;; 60*b7893ccfSSadaf Ebrahimi -s|--serial) 61*b7893ccfSSadaf Ebrahimi serial="$2" 62*b7893ccfSSadaf Ebrahimi shift 2 63*b7893ccfSSadaf Ebrahimi ;; 64*b7893ccfSSadaf Ebrahimi -a|--abi) 65*b7893ccfSSadaf Ebrahimi abi="$2" 66*b7893ccfSSadaf Ebrahimi shift 2 67*b7893ccfSSadaf Ebrahimi ;; 68*b7893ccfSSadaf Ebrahimi -*) 69*b7893ccfSSadaf Ebrahimi # unknown option 70*b7893ccfSSadaf Ebrahimi echo Unknown option: $1 71*b7893ccfSSadaf Ebrahimi echo 72*b7893ccfSSadaf Ebrahimi printUsage 73*b7893ccfSSadaf Ebrahimi exit 1 74*b7893ccfSSadaf Ebrahimi ;; 75*b7893ccfSSadaf Ebrahimi esac 76*b7893ccfSSadaf Ebrahimidone 77*b7893ccfSSadaf Ebrahimi 78*b7893ccfSSadaf Ebrahimiif [[ $serial ]]; then 79*b7893ccfSSadaf Ebrahimi serialFlag="-s $serial" 80*b7893ccfSSadaf Ebrahimi if [[ $(adb devices) != *"$serial"* ]] 81*b7893ccfSSadaf Ebrahimi then 82*b7893ccfSSadaf Ebrahimi echo Device not found: "${serial}" 83*b7893ccfSSadaf Ebrahimi echo 84*b7893ccfSSadaf Ebrahimi printUsage 85*b7893ccfSSadaf Ebrahimi exit 1 86*b7893ccfSSadaf Ebrahimi fi 87*b7893ccfSSadaf Ebrahimielse 88*b7893ccfSSadaf Ebrahimi echo Using device $(adb get-serialno) 89*b7893ccfSSadaf Ebrahimifi 90*b7893ccfSSadaf Ebrahimi 91*b7893ccfSSadaf Ebrahimiif [[ -z $platform ]] 92*b7893ccfSSadaf Ebrahimithen 93*b7893ccfSSadaf Ebrahimi echo No platform specified. 94*b7893ccfSSadaf Ebrahimi platform="UnspecifiedPlatform" 95*b7893ccfSSadaf Ebrahimifi 96*b7893ccfSSadaf Ebrahimi 97*b7893ccfSSadaf Ebrahimiif [[ -z $filter ]] 98*b7893ccfSSadaf Ebrahimithen 99*b7893ccfSSadaf Ebrahimi echo No filter specified, running all tests. 100*b7893ccfSSadaf Ebrahimi filter="*" 101*b7893ccfSSadaf Ebrahimifi 102*b7893ccfSSadaf Ebrahimi 103*b7893ccfSSadaf Ebrahimiif [[ $platform ]]; then echo platform = "${platform}"; fi 104*b7893ccfSSadaf Ebrahimiif [[ $filter ]]; then echo filter = "${filter}"; fi 105*b7893ccfSSadaf Ebrahimiif [[ $serial ]]; then echo serial = "${serial}"; fi 106*b7893ccfSSadaf Ebrahimiif [[ $abi ]]; then echo abi = "${abi}"; fi 107*b7893ccfSSadaf Ebrahimi 108*b7893ccfSSadaf Ebrahimiset -e 109*b7893ccfSSadaf Ebrahimi 110*b7893ccfSSadaf Ebrahimiecho 111*b7893ccfSSadaf Ebrahimiecho Setting up... 112*b7893ccfSSadaf Ebrahimi 113*b7893ccfSSadaf Ebrahimi# 114*b7893ccfSSadaf Ebrahimi# Start up 115*b7893ccfSSadaf Ebrahimi# 116*b7893ccfSSadaf Ebrahimi 117*b7893ccfSSadaf Ebrahimi# Wake up the device 118*b7893ccfSSadaf Ebrahimiadb $serialFlag shell input keyevent "KEYCODE_MENU" 119*b7893ccfSSadaf Ebrahimiadb $serialFlag shell input keyevent "KEYCODE_HOME" 120*b7893ccfSSadaf Ebrahimi 121*b7893ccfSSadaf Ebrahimi# Grab our Android test mutex 122*b7893ccfSSadaf Ebrahimi# Wait for any existing test runs on the devices 123*b7893ccfSSadaf Ebrahimi 124*b7893ccfSSadaf Ebrahimi# Blow away the lock if tests run too long, avoiding infinite loop 125*b7893ccfSSadaf Ebrahimilock_seconds=1200 # Duration in seconds. 126*b7893ccfSSadaf Ebrahimilock_end_time=$(( $(date +%s) + lock_seconds )) # Calculate end time. 127*b7893ccfSSadaf Ebrahimi 128*b7893ccfSSadaf Ebrahimiuntil mkdir /var/tmp/VkLayerValidationTests.$serial.lock 129*b7893ccfSSadaf Ebrahimido 130*b7893ccfSSadaf Ebrahimi sleep 5 131*b7893ccfSSadaf Ebrahimi echo "Waiting for existing Android test to complete on $serial" 132*b7893ccfSSadaf Ebrahimi 133*b7893ccfSSadaf Ebrahimi if [ $(date +%s) -gt $lock_end_time ] 134*b7893ccfSSadaf Ebrahimi then 135*b7893ccfSSadaf Ebrahimi echo "Lock timeout reached: $lock_seconds seconds" 136*b7893ccfSSadaf Ebrahimi echo "Deleting /var/tmp/VkLayerValidationTests.$serial.lock" 137*b7893ccfSSadaf Ebrahimi rm -r /var/tmp/VkLayerValidationTests.$serial.lock 138*b7893ccfSSadaf Ebrahimi fi 139*b7893ccfSSadaf Ebrahimidone 140*b7893ccfSSadaf Ebrahimi 141*b7893ccfSSadaf Ebrahimi# Clean up our lock on any exit condition 142*b7893ccfSSadaf Ebrahimifunction finish { 143*b7893ccfSSadaf Ebrahimi rm -r /var/tmp/VkLayerValidationTests.$serial.lock 144*b7893ccfSSadaf Ebrahimi} 145*b7893ccfSSadaf Ebrahimitrap finish EXIT 146*b7893ccfSSadaf Ebrahimi 147*b7893ccfSSadaf Ebrahimi# Clear the log 148*b7893ccfSSadaf Ebrahimiadb $serialFlag logcat -c 149*b7893ccfSSadaf Ebrahimi 150*b7893ccfSSadaf Ebrahimi# Ensure any previous activity has stopped, otherwise it won't run tests 151*b7893ccfSSadaf Ebrahimiadb $serialFlag shell am force-stop com.example.VulkanLayerValidationTests 152*b7893ccfSSadaf Ebrahimi 153*b7893ccfSSadaf Ebrahimi# Remove any existing APK that may have been installed from another host 154*b7893ccfSSadaf Ebrahimi# Disable exit on error in case the APK is not present 155*b7893ccfSSadaf Ebrahimiset +e 156*b7893ccfSSadaf Ebrahimiadb $serialFlag shell pm list packages | grep com.example.VulkanLayerValidationTests 157*b7893ccfSSadaf Ebrahimiif [ $? -eq 0 ] 158*b7893ccfSSadaf Ebrahimithen 159*b7893ccfSSadaf Ebrahimi adb $serialFlag uninstall com.example.VulkanLayerValidationTests 160*b7893ccfSSadaf Ebrahimifi 161*b7893ccfSSadaf Ebrahimi# Re-enable exit on error 162*b7893ccfSSadaf Ebrahimiset -e 163*b7893ccfSSadaf Ebrahimi 164*b7893ccfSSadaf Ebrahimiecho 165*b7893ccfSSadaf Ebrahimiecho Installing ./bin/VulkanLayerValidationTests.apk... 166*b7893ccfSSadaf Ebrahimi 167*b7893ccfSSadaf Ebrahimi# Install the current build 168*b7893ccfSSadaf Ebrahimiif [[ -z $abi ]] 169*b7893ccfSSadaf Ebrahimithen 170*b7893ccfSSadaf Ebrahimi adb $serialFlag install -r bin/VulkanLayerValidationTests.apk 171*b7893ccfSSadaf Ebrahimielse 172*b7893ccfSSadaf Ebrahimi adb $serialFlag install --abi $abi -r bin/VulkanLayerValidationTests.apk 173*b7893ccfSSadaf Ebrahimifi 174*b7893ccfSSadaf Ebrahimi 175*b7893ccfSSadaf Ebrahimiecho 176*b7893ccfSSadaf Ebrahimiecho Launching tests... 177*b7893ccfSSadaf Ebrahimi 178*b7893ccfSSadaf Ebrahimi# Kick off the tests with known expection list 179*b7893ccfSSadaf Ebrahimiadb $serialFlag shell am start -a android.intent.action.MAIN -c android-intent.category.LAUNCH -n com.example.VulkanLayerValidationTests/android.app.NativeActivity --es args --gtest_filter="${filter}" 180*b7893ccfSSadaf Ebrahimi 181*b7893ccfSSadaf Ebrahimi# 182*b7893ccfSSadaf Ebrahimi# Scrape the log until we get pass/fail/crash 183*b7893ccfSSadaf Ebrahimi# 184*b7893ccfSSadaf Ebrahimi 185*b7893ccfSSadaf Ebrahimi# The following loop will give tests 20 minutes to pass/fail/crash 186*b7893ccfSSadaf Ebrahimiseconds=1200 # Duration in seconds. 187*b7893ccfSSadaf EbrahimiendTime=$(( $(date +%s) + seconds )) # Calculate end time. 188*b7893ccfSSadaf Ebrahimi 189*b7893ccfSSadaf EbrahimiexitCode=-1; 190*b7893ccfSSadaf Ebrahimi 191*b7893ccfSSadaf Ebrahimi# Disable exit on error, we expect grep to fail multiple times in this loop 192*b7893ccfSSadaf Ebrahimiset +e 193*b7893ccfSSadaf Ebrahimi 194*b7893ccfSSadaf Ebrahimiwhile [ $(date +%s) -lt $endTime ]; do # Loop until interval has elapsed. 195*b7893ccfSSadaf Ebrahimi 196*b7893ccfSSadaf Ebrahimi # The following line is printed from android_main on success 197*b7893ccfSSadaf Ebrahimi adb $serialFlag logcat -d | grep "==== Tests PASSED ====" 198*b7893ccfSSadaf Ebrahimi if [ $? -eq 0 ] 199*b7893ccfSSadaf Ebrahimi then 200*b7893ccfSSadaf Ebrahimi echo 201*b7893ccfSSadaf Ebrahimi echo VulkanLayerValidationTests PASSED! 202*b7893ccfSSadaf Ebrahimi echo 203*b7893ccfSSadaf Ebrahimi exitCode=0 204*b7893ccfSSadaf Ebrahimi break 205*b7893ccfSSadaf Ebrahimi fi 206*b7893ccfSSadaf Ebrahimi 207*b7893ccfSSadaf Ebrahimi # The following line is printed from android_main on failure 208*b7893ccfSSadaf Ebrahimi adb $serialFlag logcat -d | grep "==== Tests FAILED ====" 209*b7893ccfSSadaf Ebrahimi if [ $? -eq 0 ] 210*b7893ccfSSadaf Ebrahimi then 211*b7893ccfSSadaf Ebrahimi echo 212*b7893ccfSSadaf Ebrahimi echo VulkanLayerValidationTests FAILED! 213*b7893ccfSSadaf Ebrahimi echo 214*b7893ccfSSadaf Ebrahimi exitCode=1 215*b7893ccfSSadaf Ebrahimi break 216*b7893ccfSSadaf Ebrahimi fi 217*b7893ccfSSadaf Ebrahimi 218*b7893ccfSSadaf Ebrahimi # developer.android.com recommends searching for the following string to detect native crash 219*b7893ccfSSadaf Ebrahimi adb $serialFlag logcat -d | grep "\*\*\* \*\*\* \*\*\* \*\*\* \*\*\* \*\*\* \*\*\* \*\*\* \*\*\* \*\*\* \*\*\* \*\*\* \*\*\* \*\*\* \*\*\* \*\*\*" 220*b7893ccfSSadaf Ebrahimi if [ $? -eq 0 ] 221*b7893ccfSSadaf Ebrahimi then 222*b7893ccfSSadaf Ebrahimi exitCode=2 223*b7893ccfSSadaf Ebrahimi echo 224*b7893ccfSSadaf Ebrahimi echo VulkanLayerValidationTests CRASHED! 225*b7893ccfSSadaf Ebrahimi echo 226*b7893ccfSSadaf Ebrahimi break 227*b7893ccfSSadaf Ebrahimi fi 228*b7893ccfSSadaf Ebrahimi 229*b7893ccfSSadaf Ebrahimi sleep 5 230*b7893ccfSSadaf Ebrahimi 231*b7893ccfSSadaf Ebrahimidone 232*b7893ccfSSadaf Ebrahimi 233*b7893ccfSSadaf Ebrahimi# Re-enable exit on error 234*b7893ccfSSadaf Ebrahimiset -e 235*b7893ccfSSadaf Ebrahimi 236*b7893ccfSSadaf Ebrahimiif [ $exitCode -eq -1 ] 237*b7893ccfSSadaf Ebrahimithen 238*b7893ccfSSadaf Ebrahimi echo "VulkanLayerValidationTests hasn't completed in $seconds seconds. Script exiting." 239*b7893ccfSSadaf Ebrahimifi 240*b7893ccfSSadaf Ebrahimi 241*b7893ccfSSadaf Ebrahimi# 242*b7893ccfSSadaf Ebrahimi# Cleanup 243*b7893ccfSSadaf Ebrahimi# 244*b7893ccfSSadaf Ebrahimi 245*b7893ccfSSadaf Ebrahimi# Return to home screen to clear any error pop-ups 246*b7893ccfSSadaf Ebrahimiadb $serialFlag shell input keyevent "KEYCODE_HOME" 247*b7893ccfSSadaf Ebrahimi 248*b7893ccfSSadaf Ebrahimi# Stop the activity 249*b7893ccfSSadaf Ebrahimiadb $serialFlag shell am force-stop com.example.VulkanLayerValidationTests 250*b7893ccfSSadaf Ebrahimi 251*b7893ccfSSadaf Ebrahimiecho 252*b7893ccfSSadaf Ebrahimiecho Fetching test output and filtered logcat text... 253*b7893ccfSSadaf Ebrahimi 254*b7893ccfSSadaf Ebrahimi# Avoid characters that are illegal in Windows filenames, so these 255*b7893ccfSSadaf Ebrahimi# files can be archived to a Windows host system for later reference 256*b7893ccfSSadaf Ebrahimitoday=$(date +%Y%m%d-%H%M%S) 257*b7893ccfSSadaf EbrahimioutFile="VulkanLayerValidationTests.$platform.$today.out.txt" 258*b7893ccfSSadaf EbrahimierrFile="VulkanLayerValidationTests.$platform.$today.err.txt" 259*b7893ccfSSadaf EbrahimilogFile="VulkanLayerValidationTests.$platform.$today.logcat.txt" 260*b7893ccfSSadaf Ebrahimiadb $serialFlag pull /sdcard/Android/data/com.example.VulkanLayerValidationTests/files/out.txt $outFile 261*b7893ccfSSadaf Ebrahimiadb $serialFlag pull /sdcard/Android/data/com.example.VulkanLayerValidationTests/files/err.txt $errFile 262*b7893ccfSSadaf Ebrahimiadb $serialFlag logcat -d | grep VulkanLayerValidationTests > $logFile 263*b7893ccfSSadaf Ebrahimi 264*b7893ccfSSadaf Ebrahimiif [ -f $outFile ]; then 265*b7893ccfSSadaf Ebrahimi echo $outFile size $(wc -c < $outFile) 266*b7893ccfSSadaf Ebrahimifi 267*b7893ccfSSadaf Ebrahimi 268*b7893ccfSSadaf Ebrahimiif [ -f $errFile ]; then 269*b7893ccfSSadaf Ebrahimi echo $errFile size $(wc -c < $errFile) 270*b7893ccfSSadaf Ebrahimifi 271*b7893ccfSSadaf Ebrahimi 272*b7893ccfSSadaf Ebrahimiif [ -f $logFile ]; then 273*b7893ccfSSadaf Ebrahimi echo $logFile size $(wc -c < $logFile) 274*b7893ccfSSadaf Ebrahimifi 275*b7893ccfSSadaf Ebrahimi 276*b7893ccfSSadaf Ebrahimiif [ $exitCode -ne 0 ] 277*b7893ccfSSadaf Ebrahimithen 278*b7893ccfSSadaf Ebrahimi echo 279*b7893ccfSSadaf Ebrahimi echo VulkanLayerValidationTests result status is unsuccessful. Dumping test output file: 280*b7893ccfSSadaf Ebrahimi echo ========================================================================================= 281*b7893ccfSSadaf Ebrahimi cat $outFile 282*b7893ccfSSadaf Ebrahimi echo ========================================================================================= 283*b7893ccfSSadaf Ebrahimi echo 284*b7893ccfSSadaf Ebrahimi echo 285*b7893ccfSSadaf Ebrahimi echo Dumping logcat text, filtered by ''"VulkanLayerValidationTests"'': 286*b7893ccfSSadaf Ebrahimi echo ========================================================================================= 287*b7893ccfSSadaf Ebrahimi cat $logFile 288*b7893ccfSSadaf Ebrahimi echo ========================================================================================= 289*b7893ccfSSadaf Ebrahimifi 290*b7893ccfSSadaf Ebrahimi 291*b7893ccfSSadaf Ebrahimiexit $exitCode 292