#!/bin/bash # See hal_hidl_gtest.py THREADS= CHECKER=vts_testability_checker CHECKER_DEVICE_PATH="/data/local/tmp/${CHECKER}" PRINT_COMMANDS= function run() { if [ "${PRINT_COMMANDS}" = true ] ; then >&2 echo "*** $@" fi $@ } function make_modules() { if [ "${THREADS}" != "0" ] ; then run make -j${THREADS} -C ${ANDROID_BUILD_TOP} -f build/core/main.mk $@ fi } function push_checker() { run adb push ${OUT}/system/bin/${CHECKER} ${CHECKER_DEVICE_PATH} } function push_test() { local module=$1 for test_dir in nativetest nativetest64 ; do local test_file=/data/${test_dir}/${module}/${module} run adb push ${OUT}${test_file} ${test_file} done } function read_checker_output() { python -c 'import json,sys;obj=json.load(sys.stdin);sys.stdout.write("%s\n"%obj["Testable"]);map(lambda i:sys.stdout.write("%s\n"%i),obj["instances"])' } function run_test() { local module=$1 local status=0 for test_dir in nativetest nativetest64 ; do local test_file=/data/${test_dir}/${module}/${module} local interfaces=$(run adb shell ${test_file} --list_registered_services \ | sed -n 's/^hal_service: \(.*\)$/\1/p') if [ -z "$interfaces" ]; then run adb shell ${test_file} || status=$? else for interface in ${interfaces} ; do local output=$(run adb shell ${CHECKER_DEVICE_PATH} -c ${interface} | read_checker_output) local testable=$(echo "${output}" | head -n1) local instances=$(echo "${output}" | tail -n+2) if [ "${testable}" == "True" ] ; then for instance in ${instances} ; do run adb shell ${test_file} --hal_service_instance="${interface}/${instance}" || status=$? done fi done fi done return ${status} } function usage() { echo "usage: $0 -m <module_name> [-m <module_name>[...]] [-j <jobs>] [-p]" echo " -m <module_name>: name of test (e.g. VtsHalHealthV2_0TargetTest)" echo " -p: print commands" echo " -j <jobs>: # jobs in make. " echo " -j0 skips making any modules." echo " If not present, use infinite number of jobs." exit 1 } function main() { local modules= while getopts "m:j:p" option ; do case "${option}" in m) [ ! -z ${OPTARG} ] || usage modules="${modules} ${OPTARG}" ;; j) THREADS=${OPTARG} ;; p) PRINT_COMMANDS=true ;; *) usage ;; esac done set -e make_modules ${CHECKER} ${modules} run adb root push_checker for module in ${modules} ; do push_test ${module} done set +e local status=0 for module in ${modules} ; do run_test ${module} || status=$? done return ${status} } main $@