xref: /aosp_15_r20/frameworks/base/services/tests/runtests.py (revision d57664e9bc4670b3ecf6748a746a57c557b6bc9e)
1*d57664e9SAndroid Build Coastguard Worker#!/usr/bin/env python
2*d57664e9SAndroid Build Coastguard Worker
3*d57664e9SAndroid Build Coastguard Worker# Copyright (C) 2016 The Android Open Source Project
4*d57664e9SAndroid Build Coastguard Worker#
5*d57664e9SAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
6*d57664e9SAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
7*d57664e9SAndroid Build Coastguard Worker# You may obtain a copy of the License at
8*d57664e9SAndroid Build Coastguard Worker#
9*d57664e9SAndroid Build Coastguard Worker#      http://www.apache.org/licenses/LICENSE-2.0
10*d57664e9SAndroid Build Coastguard Worker#
11*d57664e9SAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
12*d57664e9SAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
13*d57664e9SAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*d57664e9SAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
15*d57664e9SAndroid Build Coastguard Worker# limitations under the License.
16*d57664e9SAndroid Build Coastguard Worker
17*d57664e9SAndroid Build Coastguard Workerimport os
18*d57664e9SAndroid Build Coastguard Workerimport subprocess
19*d57664e9SAndroid Build Coastguard Workerimport sys
20*d57664e9SAndroid Build Coastguard Worker
21*d57664e9SAndroid Build Coastguard WorkerINSTRUMENTED_PACKAGE_RUNNER = ('com.android.frameworks.servicestests/'
22*d57664e9SAndroid Build Coastguard Worker                               'androidx.test.runner.AndroidJUnitRunner')
23*d57664e9SAndroid Build Coastguard Worker
24*d57664e9SAndroid Build Coastguard WorkerPACKAGE_WHITELIST = (
25*d57664e9SAndroid Build Coastguard Worker    "com.android.server",
26*d57664e9SAndroid Build Coastguard Worker)
27*d57664e9SAndroid Build Coastguard Worker
28*d57664e9SAndroid Build Coastguard WorkerCOLOR_RED = '\033[0;31m'
29*d57664e9SAndroid Build Coastguard WorkerCOLOR_NONE ='\033[0m'
30*d57664e9SAndroid Build Coastguard Worker
31*d57664e9SAndroid Build Coastguard Workerdef run(shell_command, echo=True):
32*d57664e9SAndroid Build Coastguard Worker    if echo:
33*d57664e9SAndroid Build Coastguard Worker        print '%s + %s%s' % (
34*d57664e9SAndroid Build Coastguard Worker                COLOR_RED,
35*d57664e9SAndroid Build Coastguard Worker                echo if isinstance(echo, str) else shell_command,
36*d57664e9SAndroid Build Coastguard Worker                COLOR_NONE)
37*d57664e9SAndroid Build Coastguard Worker    return subprocess.check_call(shell_command, shell=True)
38*d57664e9SAndroid Build Coastguard Worker
39*d57664e9SAndroid Build Coastguard Worker# usage:
40*d57664e9SAndroid Build Coastguard Worker#   ${ANDROID_BUILD_TOP}/frameworks/base/services/tests/runtests.py : run tests in com.android.server
41*d57664e9SAndroid Build Coastguard Worker#   ${ANDROID_BUILD_TOP}/frameworks/base/services/tests/runtests.py -e package [package name, e.g. com.android.server]
42*d57664e9SAndroid Build Coastguard Worker#   ${ANDROID_BUILD_TOP}/frameworks/base/services/tests/runtests.py -e class [class name, e.g. com.android.server.MountServiceTests]
43*d57664e9SAndroid Build Coastguard Worker#
44*d57664e9SAndroid Build Coastguard Worker#   The available INSTRUMENTED_PACKAGE_RUNNER may differ in different environments.
45*d57664e9SAndroid Build Coastguard Worker#   In this case, use "adb shell pm list instrumentation" to query available runners
46*d57664e9SAndroid Build Coastguard Worker#   and use the environment variable INSTRUMENTED_PACKAGE_RUNNER to overwrite
47*d57664e9SAndroid Build Coastguard Worker#   the default one, e.g.,
48*d57664e9SAndroid Build Coastguard Worker#   INSTRUMENTED_PACKAGE_RUNNER=com.android.frameworks.servicestests/androidx.test.runner.AndroidJUnitRunner \
49*d57664e9SAndroid Build Coastguard Worker#       ${ANDROID_BUILD_TOP}/frameworks/base/services/tests/runtests.py
50*d57664e9SAndroid Build Coastguard Worker#
51*d57664e9SAndroid Build Coastguard Workerdef main():
52*d57664e9SAndroid Build Coastguard Worker    build_top = os.environ.get('ANDROID_BUILD_TOP', None)
53*d57664e9SAndroid Build Coastguard Worker    out_dir = os.environ.get('OUT', None)
54*d57664e9SAndroid Build Coastguard Worker    runner = os.environ.get('INSTRUMENTED_PACKAGE_RUNNER', None)
55*d57664e9SAndroid Build Coastguard Worker    if build_top is None or out_dir is None:
56*d57664e9SAndroid Build Coastguard Worker        print 'You need to source and lunch before you can use this script'
57*d57664e9SAndroid Build Coastguard Worker        return 1
58*d57664e9SAndroid Build Coastguard Worker    if runner is None:
59*d57664e9SAndroid Build Coastguard Worker        runner = INSTRUMENTED_PACKAGE_RUNNER
60*d57664e9SAndroid Build Coastguard Worker    print 'Building tests...'
61*d57664e9SAndroid Build Coastguard Worker    run('make -j32 -C %s -f build/core/main.mk '
62*d57664e9SAndroid Build Coastguard Worker        'MODULES-IN-frameworks-base-services-tests-servicestests' % build_top,
63*d57664e9SAndroid Build Coastguard Worker        echo='mmma -j32 %s/frameworks/base/services/tests/servicestests' %
64*d57664e9SAndroid Build Coastguard Worker             build_top)
65*d57664e9SAndroid Build Coastguard Worker
66*d57664e9SAndroid Build Coastguard Worker    print 'Installing tests...'
67*d57664e9SAndroid Build Coastguard Worker    run('adb root')
68*d57664e9SAndroid Build Coastguard Worker    run('adb wait-for-device')
69*d57664e9SAndroid Build Coastguard Worker    apk_path = (
70*d57664e9SAndroid Build Coastguard Worker            '%s/data/app/FrameworksServicesTests/FrameworksServicesTests.apk' %
71*d57664e9SAndroid Build Coastguard Worker            out_dir)
72*d57664e9SAndroid Build Coastguard Worker    run('adb install -t -r -g "%s"' % apk_path)
73*d57664e9SAndroid Build Coastguard Worker
74*d57664e9SAndroid Build Coastguard Worker    print 'Running tests...'
75*d57664e9SAndroid Build Coastguard Worker    if len(sys.argv) != 1:
76*d57664e9SAndroid Build Coastguard Worker        run('adb shell am instrument -w %s "%s"' %
77*d57664e9SAndroid Build Coastguard Worker            (' '.join(sys.argv[1:]), runner))
78*d57664e9SAndroid Build Coastguard Worker        return 0
79*d57664e9SAndroid Build Coastguard Worker
80*d57664e9SAndroid Build Coastguard Worker    # It would be nice if the activity manager accepted a list of packages, but
81*d57664e9SAndroid Build Coastguard Worker    # in lieu of that...
82*d57664e9SAndroid Build Coastguard Worker    for package in PACKAGE_WHITELIST:
83*d57664e9SAndroid Build Coastguard Worker        run('adb shell am instrument -w -e package %s %s' %
84*d57664e9SAndroid Build Coastguard Worker            (package, runner))
85*d57664e9SAndroid Build Coastguard Worker
86*d57664e9SAndroid Build Coastguard Worker    return 0
87*d57664e9SAndroid Build Coastguard Worker
88*d57664e9SAndroid Build Coastguard Worker
89*d57664e9SAndroid Build Coastguard Workerif __name__ == '__main__':
90*d57664e9SAndroid Build Coastguard Worker    sys.exit(main())
91