blob: 61b1a1e7b59aceff394bcd5dd31ad03aedaf5258 [file] [log] [blame]
Jaewan Kim1516ee92018-03-08 17:49:13 +09001#!/bin/bash
2# Copyright 2018 The Android Open Source Project
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15
16# Usage '. runcts.sh'
17
18function _runtest_cts_mediacomponent_usage() {
19 echo 'runtest-cts-MediaComponents [option]: Build, flash device,'
20 echo ' and run subset of CtsMediaTestCases that MediaComponents covers.'
21 echo ' *Warning* This bypasses CTS setup (e.g. download media contents from server)'
22 echo ' For running CTS in official way, use atest or cts-tradefed '
23 echo ' -h|--help: This help'
24 echo ' --skip: Skip build and flash. Just rerun-tests'
25 echo ' --min: Only rebuild tests and updatable library.'
Jaewan Kimdce75592018-03-09 20:03:34 +090026 echo ' --test: Only rebuild tests'
Jaewan Kim1516ee92018-03-08 17:49:13 +090027 echo ' -s [device_id]: Specify a device name to run test against.'
28 echo ' You can define ${ADBHOST} instead.'
29 echo ' -r [count]: Repeat tests for given count. It will stop when fails.'
30 echo ' --ignore: Keep repeating tests even when it fails.'
31 echo ' -t [test]: Only run the specific test. Can be either a class or a method.'
32}
33
34function runtest-cts-MediaComponents() {
35 # Edit here if you want to support other tests.
36 # List up libs and apks in the media_api needed for tests, and place test target at the last.
37 local TEST_PACKAGE_DIR=("frameworks/av/packages/MediaComponents/test")
38 local TEST_PACKAGE=("android.media.cts")
39 local BUILD_TARGETS=("MediaComponents" "CtsMediaTestCases")
40 # Don't include MediaComponents -- if we simply install it, system server
41 # wouldn't use the installed one.
42 local INSTALL_TARGETS=("CtsMediaTestCases")
43 local TEST_RUNNER="android.support.test.runner.AndroidJUnitRunner"
44 local DEPENDENCIES=("mockito-target-minus-junit4" "android-support-test" "compatibility-device-util")
45 local DEFAULT_TEST_TARGET=""
46 DEFAULT_TEST_TARGET+="android.media.cts.MediaBrowser2Test"
47 DEFAULT_TEST_TARGET+=",android.media.cts.MediaController2Test"
48 DEFAULT_TEST_TARGET+=",android.media.cts.MediaMetadata2Test"
49 DEFAULT_TEST_TARGET+=",android.media.cts.MediaSession2Test"
50 DEFAULT_TEST_TARGET+=",android.media.cts.MediaSession2_PermissionTest"
51 DEFAULT_TEST_TARGET+=",android.media.cts.MediaSessionManager_MediaSession2Test"
52 DEFAULT_TEST_TARGET+=",android.media.cts.SessionToken2Test"
53 if [[ -z "${ANDROID_BUILD_TOP}" ]]; then
54 echo "Needs to lunch a target first"
55 return
56 fi
57
58 local old_path=${OLDPWD}
59 while true; do
60 local OPTION_SKIP="false"
61 local OPTION_MIN="false"
Jaewan Kimdce75592018-03-09 20:03:34 +090062 local OPTION_TEST="false"
Jaewan Kim1516ee92018-03-08 17:49:13 +090063 local OPTION_REPEAT_COUNT="1"
64 local OPTION_IGNORE="false"
65 local OPTION_TEST_TARGET="${DEFAULT_TEST_TARGET}"
66 local adbhost_local
67 while (( "$#" )); do
68 case "${1}" in
69 -h|--help)
70 _runtest_cts_mediacomponent_usage
71 return
72 ;;
73 --skip)
74 OPTION_SKIP="true"
75 ;;
76 --min)
77 OPTION_MIN="true"
78 ;;
Jaewan Kimdce75592018-03-09 20:03:34 +090079 --test)
80 OPTION_TEST="true"
81 ;;
Jaewan Kim1516ee92018-03-08 17:49:13 +090082 -s)
83 shift
84 adbhost_local=${1}
85 ;;
86 -r)
87 shift
88 OPTION_REPEAT_COUNT="${1}"
89 ;;
90 --ignore)
91 OPTION_IGNORE="true"
92 ;;
93 -t)
94 shift
95 OPTION_TEST_TARGET="${1}"
96 esac
97 shift
98 done
99
100 # Build adb command.
101 local adb
102 if [[ -z "${adbhost_local}" ]]; then
103 adbhost_local=${ADBHOST}
104 fi
105 if [[ -z "${adbhost_local}" ]]; then
106 local device_count=$(adb devices | sed '/^[[:space:]]*$/d' | wc -l)
107 if [[ "${device_count}" != "2" ]]; then
108 echo "Too many devices. Specify a device." && break
109 fi
110 adb="adb"
111 else
112 adb="adb -s ${adbhost_local}"
113 fi
114
115 local target_dir="${ANDROID_BUILD_TOP}/${TEST_PACKAGE_DIR}"
116 #local TEST_PACKAGE=$(sed -n 's/^.*\bpackage\b="\([a-z0-9\.]*\)".*$/\1/p' ${target_dir}/AndroidManifest.xml)
117
118 if [[ "${OPTION_SKIP}" != "true" ]]; then
119 # Build dependencies if needed.
120 local dependency
121 local build_dependency=""
122 for dependency in ${DEPENDENCIES[@]}; do
123 if [[ "${dependency}" == "out/"* ]]; then
124 if [[ ! -f ${ANDROID_BUILD_TOP}/${dependency} ]]; then
125 build_dependency="true"
126 break
127 fi
128 else
129 if [[ "$(find ${OUT} -name ${dependency}_intermediates | wc -l)" == "0" ]]; then
130 build_dependency="true"
131 break
132 fi
133 fi
134 done
135 if [[ "${build_dependency}" == "true" ]]; then
136 echo "Building dependencies. Will only print stderr."
137 m ${DEPENDENCIES[@]} -j > /dev/null
138 fi
139
140 # Build test apk and required apk.
Jaewan Kimdce75592018-03-09 20:03:34 +0900141 local build_targets
142 if [[ "${OPTION_TEST}" == "true" ]]; then
143 build_targets="${INSTALL_TARGETS[@]}"
144 elif [[ "${OPTION_MIN}" == "true" ]]; then
145 build_targets="${BUILD_TARGETS[@]}"
146 else
147 build_targets="${BUILD_TARGETS[@]} droid"
Jaewan Kim1516ee92018-03-08 17:49:13 +0900148 fi
149 m ${build_targets} -j || break
150
Jaewan Kimdce75592018-03-09 20:03:34 +0900151 if [[ "${OPTION_TEST}" != "true" ]]; then
152 # Flash only when needed
153 local device_build_type="$(${adb} shell getprop ro.build.type)"
154 if [[ "${device_build_type}" == "user" ]]; then
155 # User build. Cannot adb sync
156 ${adb} reboot bootloader
157 fastboot flashall
158 else
Jaewan Kim1516ee92018-03-08 17:49:13 +0900159 ${adb} root
Jaewan Kimdce75592018-03-09 20:03:34 +0900160 local device_verity_mode="$(${adb} shell getprop ro.boot.veritymode)"
161 if [[ "${device_verity_mode}" != "disabled" ]]; then
162 ${adb} disable-verity
163 ${adb} reboot
164 ${adb} wait-for-device || break
165 ${adb} root
166 fi
167 ${adb} remount
168 ${adb} shell stop
169 ${adb} shell setprop log.tag.MediaSessionService DEBUG
170 ${adb} sync
171 ${adb} shell start
Jaewan Kim1516ee92018-03-08 17:49:13 +0900172 fi
Jaewan Kimdce75592018-03-09 20:03:34 +0900173 ${adb} wait-for-device || break
174 # Ensure package manager is loaded.
175 # TODO(jaewan): Find better way to wait
176 sleep 15
Jaewan Kim1516ee92018-03-08 17:49:13 +0900177 fi
Jaewan Kim1516ee92018-03-08 17:49:13 +0900178
179 # Install apks
180 local install_failed="false"
181 for target in ${INSTALL_TARGETS[@]}; do
182 local apk_path=$(find ${OUT}/system ${OUT}/data -name ${target}.apk)
183 local apk_num=$(find ${OUT}/system ${OUT}/data -name ${target}.apk | wc -l)
184 if [[ "${apk_num}" != "1" ]]; then
185 echo "Cannot locate a ${target}.apk. Found ${apk_num} apks" && break
186 fi
187 echo "Installing ${target}.apk. path=${apk_path}"
188 ${adb} install -r ${apk_path}
189 if [[ "${?}" != "0" ]]; then
190 install_failed="true"
191 break
192 fi
193 done
194 if [[ "${install_failed}" == "true" ]]; then
195 echo "Failed to install. Test wouldn't run."
196 break
197 fi
198 fi
199
200 local test_target=""
201 if [[ -n "${OPTION_TEST_TARGET}" ]]; then
202 test_target="-e class ${OPTION_TEST_TARGET}"
203 fi
204
205 local i
206 local tmpfile=$(tempfile)
207 for ((i=1; i <= ${OPTION_REPEAT_COUNT}; i++)); do
208 echo "Run test ${i}/${OPTION_REPEAT_COUNT}"
209 ${adb} shell am instrument ${test_target} -w ${TEST_PACKAGE}/${TEST_RUNNER} >& ${tmpfile}
210 cat ${tmpfile}
211 if [[ "${OPTION_IGNORE}" != "true" ]]; then
212 if [[ -n "$(grep ${tmpfile} -e 'FAILURE\|crashed')" ]]; then
213 # am instrument doesn't return error code so need to grep result message instead
214 break
215 fi
216 fi
217 done
218 rm ${tmpfile}
219 break
220 done
221}
222
223echo "Following functions are added to your environment:"
224_runtest_cts_mediacomponent_usage