blob: bb6f7d7062be6cc28de7e21bf53d07c540b11895 [file] [log] [blame]
#!/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 $@