xref: /aosp_15_r20/system/nfc/run_unit_tests.sh (revision 7eba2f3b06c51ae21384f6a4f14577b668a869b3)
1*7eba2f3bSAndroid Build Coastguard Worker#!/bin/sh
2*7eba2f3bSAndroid Build Coastguard Worker
3*7eba2f3bSAndroid Build Coastguard Workerknown_tests=(
4*7eba2f3bSAndroid Build Coastguard Worker  nfc_test_utils
5*7eba2f3bSAndroid Build Coastguard Worker)
6*7eba2f3bSAndroid Build Coastguard Worker
7*7eba2f3bSAndroid Build Coastguard Workerknown_remote_tests=(
8*7eba2f3bSAndroid Build Coastguard Worker)
9*7eba2f3bSAndroid Build Coastguard Worker
10*7eba2f3bSAndroid Build Coastguard Worker
11*7eba2f3bSAndroid Build Coastguard Workerusage() {
12*7eba2f3bSAndroid Build Coastguard Worker  binary="$(basename "$0")"
13*7eba2f3bSAndroid Build Coastguard Worker  echo "Usage: ${binary} --help"
14*7eba2f3bSAndroid Build Coastguard Worker  echo "       ${binary} [-i <iterations>] [-s <specific device>] [--all] [<test name>[.<filter>] ...] [--<arg> ...]"
15*7eba2f3bSAndroid Build Coastguard Worker  echo
16*7eba2f3bSAndroid Build Coastguard Worker  echo "Unknown long arguments are passed to the test."
17*7eba2f3bSAndroid Build Coastguard Worker  echo
18*7eba2f3bSAndroid Build Coastguard Worker  echo "Known test names:"
19*7eba2f3bSAndroid Build Coastguard Worker
20*7eba2f3bSAndroid Build Coastguard Worker  for name in "${known_tests[@]}"
21*7eba2f3bSAndroid Build Coastguard Worker  do
22*7eba2f3bSAndroid Build Coastguard Worker    echo "    ${name}"
23*7eba2f3bSAndroid Build Coastguard Worker  done
24*7eba2f3bSAndroid Build Coastguard Worker
25*7eba2f3bSAndroid Build Coastguard Worker  echo
26*7eba2f3bSAndroid Build Coastguard Worker  echo "Known tests that need a remote device:"
27*7eba2f3bSAndroid Build Coastguard Worker  for name in "${known_remote_tests[@]}"
28*7eba2f3bSAndroid Build Coastguard Worker  do
29*7eba2f3bSAndroid Build Coastguard Worker    echo "    ${name}"
30*7eba2f3bSAndroid Build Coastguard Worker  done
31*7eba2f3bSAndroid Build Coastguard Worker}
32*7eba2f3bSAndroid Build Coastguard Worker
33*7eba2f3bSAndroid Build Coastguard Workeriterations=1
34*7eba2f3bSAndroid Build Coastguard Workerdevice=
35*7eba2f3bSAndroid Build Coastguard Workertests=()
36*7eba2f3bSAndroid Build Coastguard Workertest_args=()
37*7eba2f3bSAndroid Build Coastguard Workerwhile [ $# -gt 0 ]
38*7eba2f3bSAndroid Build Coastguard Workerdo
39*7eba2f3bSAndroid Build Coastguard Worker  case "$1" in
40*7eba2f3bSAndroid Build Coastguard Worker    -h|--help)
41*7eba2f3bSAndroid Build Coastguard Worker      usage
42*7eba2f3bSAndroid Build Coastguard Worker      exit 0
43*7eba2f3bSAndroid Build Coastguard Worker      ;;
44*7eba2f3bSAndroid Build Coastguard Worker    -i)
45*7eba2f3bSAndroid Build Coastguard Worker      shift
46*7eba2f3bSAndroid Build Coastguard Worker      if [ $# -eq 0 ]; then
47*7eba2f3bSAndroid Build Coastguard Worker        echo "error: number of iterations expected" 1>&2
48*7eba2f3bSAndroid Build Coastguard Worker        usage
49*7eba2f3bSAndroid Build Coastguard Worker        exit 2
50*7eba2f3bSAndroid Build Coastguard Worker      fi
51*7eba2f3bSAndroid Build Coastguard Worker      iterations=$(( $1 ))
52*7eba2f3bSAndroid Build Coastguard Worker      shift
53*7eba2f3bSAndroid Build Coastguard Worker      ;;
54*7eba2f3bSAndroid Build Coastguard Worker    -s)
55*7eba2f3bSAndroid Build Coastguard Worker      shift
56*7eba2f3bSAndroid Build Coastguard Worker      if [ $# -eq 0 ]; then
57*7eba2f3bSAndroid Build Coastguard Worker        echo "error: no device specified" 1>&2
58*7eba2f3bSAndroid Build Coastguard Worker        usage
59*7eba2f3bSAndroid Build Coastguard Worker        exit 2
60*7eba2f3bSAndroid Build Coastguard Worker      fi
61*7eba2f3bSAndroid Build Coastguard Worker      device="$1"
62*7eba2f3bSAndroid Build Coastguard Worker      shift
63*7eba2f3bSAndroid Build Coastguard Worker      ;;
64*7eba2f3bSAndroid Build Coastguard Worker    --all)
65*7eba2f3bSAndroid Build Coastguard Worker      tests+=( "${known_tests[@]}" )
66*7eba2f3bSAndroid Build Coastguard Worker      shift
67*7eba2f3bSAndroid Build Coastguard Worker      ;;
68*7eba2f3bSAndroid Build Coastguard Worker    --*)
69*7eba2f3bSAndroid Build Coastguard Worker      test_args+=( "$1" )
70*7eba2f3bSAndroid Build Coastguard Worker      shift
71*7eba2f3bSAndroid Build Coastguard Worker      ;;
72*7eba2f3bSAndroid Build Coastguard Worker    *)
73*7eba2f3bSAndroid Build Coastguard Worker      tests+=( "$1" )
74*7eba2f3bSAndroid Build Coastguard Worker      shift
75*7eba2f3bSAndroid Build Coastguard Worker      ;;
76*7eba2f3bSAndroid Build Coastguard Worker  esac
77*7eba2f3bSAndroid Build Coastguard Workerdone
78*7eba2f3bSAndroid Build Coastguard Worker
79*7eba2f3bSAndroid Build Coastguard Workerif [ "${#tests[@]}" -eq 0 ]; then
80*7eba2f3bSAndroid Build Coastguard Worker  tests+=( "${known_tests[@]}" )
81*7eba2f3bSAndroid Build Coastguard Workerfi
82*7eba2f3bSAndroid Build Coastguard Worker
83*7eba2f3bSAndroid Build Coastguard Workeradb=( "adb" )
84*7eba2f3bSAndroid Build Coastguard Workerif [ -n "${device}" ]; then
85*7eba2f3bSAndroid Build Coastguard Worker  adb+=( "-s" "${device}" )
86*7eba2f3bSAndroid Build Coastguard Workerfi
87*7eba2f3bSAndroid Build Coastguard Worker
88*7eba2f3bSAndroid Build Coastguard Workerfailed_tests=()
89*7eba2f3bSAndroid Build Coastguard Workerfor spec in "${tests[@]}"
90*7eba2f3bSAndroid Build Coastguard Workerdo
91*7eba2f3bSAndroid Build Coastguard Worker  name="${spec%%.*}"
92*7eba2f3bSAndroid Build Coastguard Worker  binary="/data/nativetest/${name}/${name}"
93*7eba2f3bSAndroid Build Coastguard Worker
94*7eba2f3bSAndroid Build Coastguard Worker  push_command=( "${adb[@]}" push {"${ANDROID_PRODUCT_OUT}",}"${binary}" )
95*7eba2f3bSAndroid Build Coastguard Worker  test_command=( "${adb[@]}" shell "${binary}" )
96*7eba2f3bSAndroid Build Coastguard Worker  if [ "${name}" != "${spec}" ]; then
97*7eba2f3bSAndroid Build Coastguard Worker    filter="${spec#*.}"
98*7eba2f3bSAndroid Build Coastguard Worker    test_command+=( "--gtest_filter=${filter}" )
99*7eba2f3bSAndroid Build Coastguard Worker  fi
100*7eba2f3bSAndroid Build Coastguard Worker  test_command+=( "${test_args[@]}" )
101*7eba2f3bSAndroid Build Coastguard Worker
102*7eba2f3bSAndroid Build Coastguard Worker  echo "--- ${name} ---"
103*7eba2f3bSAndroid Build Coastguard Worker  echo "pushing..."
104*7eba2f3bSAndroid Build Coastguard Worker  "${push_command[@]}"
105*7eba2f3bSAndroid Build Coastguard Worker  echo "running..."
106*7eba2f3bSAndroid Build Coastguard Worker  failed_count=0
107*7eba2f3bSAndroid Build Coastguard Worker  for i in $(seq 1 ${iterations})
108*7eba2f3bSAndroid Build Coastguard Worker  do
109*7eba2f3bSAndroid Build Coastguard Worker    "${test_command[@]}" || failed_count=$(( $failed_count + 1 ))
110*7eba2f3bSAndroid Build Coastguard Worker  done
111*7eba2f3bSAndroid Build Coastguard Worker
112*7eba2f3bSAndroid Build Coastguard Worker  if [ $failed_count != 0 ]; then
113*7eba2f3bSAndroid Build Coastguard Worker    failed_tests+=( "${name} ${failed_count}/${iterations}" )
114*7eba2f3bSAndroid Build Coastguard Worker  fi
115*7eba2f3bSAndroid Build Coastguard Workerdone
116*7eba2f3bSAndroid Build Coastguard Worker
117*7eba2f3bSAndroid Build Coastguard Workerif [ "${#failed_tests[@]}" -ne 0 ]; then
118*7eba2f3bSAndroid Build Coastguard Worker  for failed_test in "${failed_tests[@]}"
119*7eba2f3bSAndroid Build Coastguard Worker  do
120*7eba2f3bSAndroid Build Coastguard Worker    echo "!!! FAILED TEST: ${failed_test} !!!"
121*7eba2f3bSAndroid Build Coastguard Worker  done
122*7eba2f3bSAndroid Build Coastguard Worker  exit 1
123*7eba2f3bSAndroid Build Coastguard Workerfi
124*7eba2f3bSAndroid Build Coastguard Worker
125*7eba2f3bSAndroid Build Coastguard Workerexit 0
126