#!/usr/bin/env python
|
#
|
# Copyright 2017 - The Android Open Source Project
|
#
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
# you may not use this file except in compliance with the License.
|
# You may obtain a copy of the License at
|
#
|
# http://www.apache.org/licenses/LICENSE-2.0
|
#
|
# Unless required by applicable law or agreed to in writing, software
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
# See the License for the specific language governing permissions and
|
# limitations under the License.
|
#
|
|
import argparse
|
import os
|
import re
|
import sys
|
|
from build.build_rule_gen import BuildRuleGen
|
from build.vts_spec_parser import VtsSpecParser
|
from configure.test_case_creator import TestCaseCreator
|
from utils.const import Constant
|
|
TEST_TIME_OUT_PATTERN = '(([0-9]+)(m|s|h))+'
|
|
"""Generate Android.mk, Android.bp, and AndroidTest.xml files for given hal
|
|
Usage:
|
python launch_hal_test.py [--options] hal_package name
|
|
where options are:
|
--test_type: Test type, currently support two types: target and host.
|
--time_out: Timeout for the test, default is 1m.
|
--package_root: Prefix of the HAL package. default is android.hardware
|
--path_root: Root path that stores the HAL definition. default is hardware/interfaces
|
--test_binary_file: Test binary file for target-side HAL test.
|
--test_script_file: Test script file for host-side HAL test.
|
--test_config_dir: Directory path to store the test configure files.
|
--replay: Whether this is a replay test.
|
--disable_stop_runtime: Whether to stop framework before the test.
|
Example:
|
python launch_hal_test.py android.hardware.nfc@1.0
|
python launch_hal_test.py --test_type=host --time_out=5m android.hardware.nfc@1.0
|
python launch_hal_test.py --package_root com.qualcomm.qti
|
--path_root vendor/qcom/proprietary/interfaces/com/qualcomm/qti/
|
--test_configure_dir temp/ com.qualcomm.qti.qcril.qcrilhook@1.0
|
"""
|
|
|
def main():
|
parser = argparse.ArgumentParser(description='Initiate a test case.')
|
parser.add_argument(
|
'--test_type',
|
dest='test_type',
|
required=False,
|
default='target',
|
help='Test type, currently support two types: target and host.')
|
parser.add_argument(
|
'--time_out',
|
dest='time_out',
|
required=False,
|
default='1m',
|
help='Timeout for the test, default is 1m.')
|
parser.add_argument(
|
'--replay',
|
dest='is_replay',
|
action='store_true',
|
required=False,
|
help='Whether this is a replay test.')
|
parser.add_argument(
|
'--disable_stop_runtime',
|
dest='disable_stop_runtime',
|
action='store_true',
|
required=False,
|
help='Whether to stop framework before the test.')
|
parser.add_argument(
|
'--package_root',
|
dest='package_root',
|
required=False,
|
default=Constant.HAL_PACKAGE_PREFIX,
|
help='Prefix of the HAL package. e.g. android.hardware')
|
parser.add_argument(
|
'--path_root',
|
dest='path_root',
|
required=False,
|
default=Constant.HAL_INTERFACE_PATH,
|
help=
|
'Root path that stores the HAL definition. e.g. hardware/interfaces')
|
parser.add_argument(
|
'--test_binary_file',
|
dest='test_binary_file',
|
required=False,
|
help='Test binary file for target-side HAL test.')
|
parser.add_argument(
|
'--test_script_file',
|
dest='test_script_file',
|
required=False,
|
help='Test script file for host-side HAL test.')
|
parser.add_argument(
|
'--test_config_dir',
|
dest='test_config_dir',
|
required=False,
|
help='Directory path to store the test configure files.')
|
parser.add_argument(
|
'hal_package_name',
|
help='hal package name (e.g. android.hardware.nfc@1.0).')
|
args = parser.parse_args()
|
|
regex = re.compile(Constant.HAL_PACKAGE_NAME_PATTERN)
|
result = re.match(regex, args.hal_package_name)
|
if not result:
|
print 'Invalid hal package name. Exiting..'
|
sys.exit(1)
|
|
if not args.hal_package_name.startswith(args.package_root + '.'):
|
print 'hal_package_name does not start with package_root. Exiting...'
|
sys.exit(1)
|
|
if args.test_type != 'target' and args.test_type != 'host':
|
print 'Unsupported test type. Exiting...'
|
sys.exit(1)
|
elif args.test_type == 'host' and args.is_replay:
|
print 'Host side replay test is not supported yet. Exiting...'
|
sys.exit(1)
|
|
regex = re.compile(TEST_TIME_OUT_PATTERN)
|
result = re.match(regex, args.time_out)
|
if not result:
|
print 'Invalid test time out format. Exiting...'
|
sys.exit(1)
|
|
if not args.test_config_dir:
|
if args.package_root == Constant.HAL_PACKAGE_PREFIX:
|
args.test_config_dir = Constant.VTS_HAL_TEST_CASE_PATH
|
else:
|
args.test_config_dir = args.path_root
|
|
stop_runtime = False
|
if args.test_type == 'target' and not args.disable_stop_runtime:
|
stop_runtime = True
|
|
vts_spec_parser = VtsSpecParser(
|
package_root=args.package_root, path_root=args.path_root)
|
test_case_creater = TestCaseCreator(vts_spec_parser, args.hal_package_name)
|
if not test_case_creater.LaunchTestCase(
|
args.test_type,
|
args.time_out,
|
is_replay=args.is_replay,
|
stop_runtime=stop_runtime,
|
test_binary_file=args.test_binary_file,
|
test_script_file=args.test_script_file,
|
test_config_dir=args.test_config_dir,
|
package_root=args.package_root,
|
path_root=args.path_root):
|
print('Error: Failed to launch test for %s. Exiting...' %
|
args.hal_package_name)
|
sys.exit(1)
|
|
if __name__ == '__main__':
|
main()
|