1012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley#!/usr/bin/env python 2012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley 3012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley# Copyright (C) 2016 The Android Open Source Project 4012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley# 5012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley# Licensed under the Apache License, Version 2.0 (the "License"); 6012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley# you may not use this file except in compliance with the License. 7012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley# You may obtain a copy of the License at 8012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley# 9012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley# http://www.apache.org/licenses/LICENSE-2.0 10012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley# 11012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley# Unless required by applicable law or agreed to in writing, software 12012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley# distributed under the License is distributed on an "AS IS" BASIS, 13012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley# See the License for the specific language governing permissions and 15012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley# limitations under the License. 16012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley 17012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wileyimport os 18012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wileyimport subprocess 19012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wileyimport sys 20012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley 21012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher WileyINSTRUMENTED_PACKAGE_RUNNER = ('com.android.frameworks.servicestests/' 22012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley 'android.support.test.runner.AndroidJUnitRunner') 23012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley 24012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher WileyPACKAGE_WHITELIST = ( 25012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley 'android.net', 26012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley 'com.android.server.connectivity', 27012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley) 28012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley 29012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher WileyCOLOR_RED = '\033[0;31m' 30012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher WileyCOLOR_NONE ='\033[0m' 31012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley 32012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wileydef run(shell_command, echo=True): 33012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley if echo: 34012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley print '%s + %s%s' % ( 35012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley COLOR_RED, 36012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley echo if isinstance(echo, str) else shell_command, 37012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley COLOR_NONE) 38012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley return subprocess.check_call(shell_command, shell=True) 39012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley 40012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley 41012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wileydef main(): 42012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley build_top = os.environ.get('ANDROID_BUILD_TOP', None) 43012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley out_dir = os.environ.get('OUT', None) 44012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley if build_top is None or out_dir is None: 45012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley print 'You need to source and lunch before you can use this script' 46012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley return 1 47012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley 48012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley print 'Building tests...' 49012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley run('make -j32 -C %s -f build/core/main.mk ' 50012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley 'MODULES-IN-frameworks-base-services-tests-servicestests' % build_top, 51012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley echo='mmma -j32 %s/frameworks/base/services/tests/servicestests' % 52012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley build_top) 53012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley 54012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley print 'Installing tests...' 55012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley run('adb root') 56012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley run('adb wait-for-device') 57012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley apk_path = ( 58012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley '%s/data/app/FrameworksServicesTests/FrameworksServicesTests.apk' % 59012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley out_dir) 60012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley run('adb install -r -g "%s"' % apk_path) 61012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley 62012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley print 'Running tests...' 63012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley if len(sys.argv) != 1: 6431dc3db9a4d36475f464c5543d9b7df4a2f36aa3Etan Cohen run('adb shell am instrument -w %s "%s"' % 6531dc3db9a4d36475f464c5543d9b7df4a2f36aa3Etan Cohen (' '.join(sys.argv[1:]), INSTRUMENTED_PACKAGE_RUNNER)) 66012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley return 0 67012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley 68012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley # It would be nice if the activity manager accepted a list of packages, but 69012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley # in lieu of that... 70012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley for package in PACKAGE_WHITELIST: 71012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley run('adb shell am instrument -w -e package %s %s' % 72012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley (package, INSTRUMENTED_PACKAGE_RUNNER)) 73012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley 74012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley return 0 75012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley 76012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley 77012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wileyif __name__ == '__main__': 78012ab106424b5ce2d9d9e442deab8b81b8bc2279Christopher Wiley sys.exit(main()) 79