131c75014Sopenharmony_ci#!/usr/bin/env python3 231c75014Sopenharmony_ci# -*- coding: utf-8 -*- 331c75014Sopenharmony_ci""" 431c75014Sopenharmony_ciCopyright (c) 2021 Huawei Device Co., Ltd. 531c75014Sopenharmony_ciLicensed under the Apache License, Version 2.0 (the "License"); 631c75014Sopenharmony_ciyou may not use this file except in compliance with the License. 731c75014Sopenharmony_ciYou may obtain a copy of the License at 831c75014Sopenharmony_ci 931c75014Sopenharmony_ci http://www.apache.org/licenses/LICENSE-2.0 1031c75014Sopenharmony_ci 1131c75014Sopenharmony_ciUnless required by applicable law or agreed to in writing, software 1231c75014Sopenharmony_cidistributed under the License is distributed on an "AS IS" BASIS, 1331c75014Sopenharmony_ciWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1431c75014Sopenharmony_ciSee the License for the specific language governing permissions and 1531c75014Sopenharmony_cilimitations under the License. 1631c75014Sopenharmony_ci""" 1731c75014Sopenharmony_ci 1831c75014Sopenharmony_ciimport os 1931c75014Sopenharmony_ciimport fnmatch 2031c75014Sopenharmony_ciimport sys 2131c75014Sopenharmony_ciimport argparse 2231c75014Sopenharmony_ciimport json 2331c75014Sopenharmony_ciimport platform 2431c75014Sopenharmony_ciimport subprocess 2531c75014Sopenharmony_ci 2631c75014Sopenharmony_ciimport distutils.dir_util as dir_util 2731c75014Sopenharmony_ciimport distutils.file_util as file_util 2831c75014Sopenharmony_cifrom distutils.errors import DistutilsError 2931c75014Sopenharmony_cifrom string import Template 3031c75014Sopenharmony_ci 3131c75014Sopenharmony_ci# all sub system list, must be lowercase. 3231c75014Sopenharmony_ci_SUB_SYSTEM_LIST = [ 3331c75014Sopenharmony_ci "kernel", 3431c75014Sopenharmony_ci "hiviewdfx", 3531c75014Sopenharmony_ci "communication", 3631c75014Sopenharmony_ci "security", 3731c75014Sopenharmony_ci "update", 3831c75014Sopenharmony_ci "sstsutils", 3931c75014Sopenharmony_ci "commonlibrary", 4031c75014Sopenharmony_ci "multimedia", 4131c75014Sopenharmony_ci "hdf", 4231c75014Sopenharmony_ci "ability", 4331c75014Sopenharmony_ci "appexecfwk", 4431c75014Sopenharmony_ci "distributed_schedule", 4531c75014Sopenharmony_ci "startup", 4631c75014Sopenharmony_ci "sensors", 4731c75014Sopenharmony_ci "sample", 4831c75014Sopenharmony_ci "iothardware", 4931c75014Sopenharmony_ci "open_posix_testsuite", 5031c75014Sopenharmony_ci "graphic", 5131c75014Sopenharmony_ci "ace", 5231c75014Sopenharmony_ci "applications", 5331c75014Sopenharmony_ci "ai", 5431c75014Sopenharmony_ci "global", 5531c75014Sopenharmony_ci "telephony", 5631c75014Sopenharmony_ci "dcts", 5731c75014Sopenharmony_ci "distributeddatamgr", 5831c75014Sopenharmony_ci "xts" 5931c75014Sopenharmony_ci] 6031c75014Sopenharmony_ci 6131c75014Sopenharmony_ci_NO_FILTE_SUB_SYSTEM_LIST = [ 6231c75014Sopenharmony_ci "appexecfwk", 6331c75014Sopenharmony_ci "applications", 6431c75014Sopenharmony_ci "kernel", 6531c75014Sopenharmony_ci "open_posix_testsuite", 6631c75014Sopenharmony_ci "sample", 6731c75014Sopenharmony_ci "telephony", 6831c75014Sopenharmony_ci "dcts", 6931c75014Sopenharmony_ci "hiviewdfx", 7031c75014Sopenharmony_ci "security", 7131c75014Sopenharmony_ci "update", 7231c75014Sopenharmony_ci "sstsutils", 7331c75014Sopenharmony_ci "hdf", 7431c75014Sopenharmony_ci "distributed_schedule", 7531c75014Sopenharmony_ci "xts", 7631c75014Sopenharmony_ci "commonlibrary", 7731c75014Sopenharmony_ci "communication", 7831c75014Sopenharmony_ci "distributeddatamgr", 7931c75014Sopenharmony_ci "startup" 8031c75014Sopenharmony_ci] 8131c75014Sopenharmony_ci 8231c75014Sopenharmony_ci 8331c75014Sopenharmony_cidef main(): 8431c75014Sopenharmony_ci parser = argparse.ArgumentParser() 8531c75014Sopenharmony_ci parser.add_argument('--method_name', help='', required=True) 8631c75014Sopenharmony_ci parser.add_argument('--arguments', help='', 8731c75014Sopenharmony_ci required=True) # format key=value#key=value 8831c75014Sopenharmony_ci args = parser.parse_args() 8931c75014Sopenharmony_ci this_module = sys.modules[__name__] 9031c75014Sopenharmony_ci method = getattr(this_module, args.method_name) 9131c75014Sopenharmony_ci arguments = {} 9231c75014Sopenharmony_ci for argument in args.arguments.split("#"): 9331c75014Sopenharmony_ci key_value = argument.strip().split("=") 9431c75014Sopenharmony_ci if len(key_value) != 2: 9531c75014Sopenharmony_ci raise ValueError( 9631c75014Sopenharmony_ci "The arguments' format is 'key=value#key=value'. Wrong format:" 9731c75014Sopenharmony_ci " {}".format(argument)) 9831c75014Sopenharmony_ci arguments.setdefault(key_value[0].strip(), key_value[1].strip()) 9931c75014Sopenharmony_ci method(**arguments) 10031c75014Sopenharmony_ci return 0 10131c75014Sopenharmony_ci 10231c75014Sopenharmony_ci 10331c75014Sopenharmony_cidef read_file(input_file): 10431c75014Sopenharmony_ci if not os.path.exists(input_file): 10531c75014Sopenharmony_ci return "" 10631c75014Sopenharmony_ci 10731c75014Sopenharmony_ci with open(input_file, 'r') as input_f: 10831c75014Sopenharmony_ci content = input_f.read().strip() 10931c75014Sopenharmony_ci return content 11031c75014Sopenharmony_ci 11131c75014Sopenharmony_ci 11231c75014Sopenharmony_cidef write_file(output_file, content, append): 11331c75014Sopenharmony_ci file_dir = os.path.dirname(os.path.abspath(output_file)) 11431c75014Sopenharmony_ci if not os.path.exists(file_dir): 11531c75014Sopenharmony_ci os.makedirs(file_dir) 11631c75014Sopenharmony_ci mode = 'a+' if append else 'w' 11731c75014Sopenharmony_ci with open(output_file, mode) as output_f: 11831c75014Sopenharmony_ci output_f.write("%s\n" % content) 11931c75014Sopenharmony_ci 12031c75014Sopenharmony_ci 12131c75014Sopenharmony_cidef copy_file(output, sources="", source_dirs="", to_dir=True): 12231c75014Sopenharmony_ci """ 12331c75014Sopenharmony_ci copy source files or source dir to output. 12431c75014Sopenharmony_ci if sources is not empty, the output can be file(will be created 12531c75014Sopenharmony_ci automatically) 12631c75014Sopenharmony_ci or directory(must be exist). 12731c75014Sopenharmony_ci :param output: If source_dirs is not empty, output must be directory. 12831c75014Sopenharmony_ci :param sources: source files is separated by dot 12931c75014Sopenharmony_ci :param source_dirs: source directory is separated by dot 13031c75014Sopenharmony_ci :param to_dir: output is directory or not 13131c75014Sopenharmony_ci :return: 13231c75014Sopenharmony_ci """ 13331c75014Sopenharmony_ci if not sources and not source_dirs: 13431c75014Sopenharmony_ci raise Exception( 13531c75014Sopenharmony_ci "sources or source_dirs parameter must be specified one") 13631c75014Sopenharmony_ci _output = output.strip() 13731c75014Sopenharmony_ci _sources = sources.strip() 13831c75014Sopenharmony_ci _source_dirs = source_dirs.strip() 13931c75014Sopenharmony_ci _parent_output = os.path.dirname(_output) 14031c75014Sopenharmony_ci try: 14131c75014Sopenharmony_ci if to_dir and not os.path.exists(_output): 14231c75014Sopenharmony_ci os.makedirs(_output) 14331c75014Sopenharmony_ci if not to_dir and not os.path.exists(_parent_output): 14431c75014Sopenharmony_ci os.makedirs(_parent_output) 14531c75014Sopenharmony_ci except OSError: 14631c75014Sopenharmony_ci if not os.path.isdir(_output): 14731c75014Sopenharmony_ci raise 14831c75014Sopenharmony_ci try: 14931c75014Sopenharmony_ci if _sources: 15031c75014Sopenharmony_ci _copy_files(_sources.split(","), _output) 15131c75014Sopenharmony_ci 15231c75014Sopenharmony_ci if _source_dirs: 15331c75014Sopenharmony_ci _copy_dir(_source_dirs.split(","), _output) 15431c75014Sopenharmony_ci except DistutilsError: 15531c75014Sopenharmony_ci print("ignore file exist error") 15631c75014Sopenharmony_ci return 0 15731c75014Sopenharmony_ci 15831c75014Sopenharmony_ci 15931c75014Sopenharmony_cidef _copy_files(sources, output): 16031c75014Sopenharmony_ci copy_set = set() 16131c75014Sopenharmony_ci for source_file in sources: 16231c75014Sopenharmony_ci source_file = source_file.strip() 16331c75014Sopenharmony_ci if os.path.isfile(source_file) and os.path.exists(source_file): 16431c75014Sopenharmony_ci # if same file name exist, add dir path 16531c75014Sopenharmony_ci if os.path.basename(source_file) in copy_set: 16631c75014Sopenharmony_ci new_output = os.path.join(output, os.path.dirname(source_file). 16731c75014Sopenharmony_ci split(os.sep)[-1]) 16831c75014Sopenharmony_ci if not os.path.exists(new_output): 16931c75014Sopenharmony_ci os.makedirs(new_output) 17031c75014Sopenharmony_ci file_util.copy_file(source_file, new_output) 17131c75014Sopenharmony_ci else: 17231c75014Sopenharmony_ci file_util.copy_file(source_file, output) 17331c75014Sopenharmony_ci copy_set.add(os.path.basename(source_file)) 17431c75014Sopenharmony_ci 17531c75014Sopenharmony_ci 17631c75014Sopenharmony_cidef _copy_dir(sources, output): 17731c75014Sopenharmony_ci for source_file in sources: 17831c75014Sopenharmony_ci source_file = source_file.strip() 17931c75014Sopenharmony_ci if os.path.isdir(source_file): 18031c75014Sopenharmony_ci dir_util.copy_tree(source_file, output) 18131c75014Sopenharmony_ci 18231c75014Sopenharmony_ci 18331c75014Sopenharmony_cidef gen_suite_out(suite_output_prefix, suite_names, out_suffix): 18431c75014Sopenharmony_ci outputs = [] 18531c75014Sopenharmony_ci _suite_output_prefix = suite_output_prefix.strip() 18631c75014Sopenharmony_ci _dirname_suffix = out_suffix.strip().rstrip(os.sep) 18731c75014Sopenharmony_ci for suite in suite_names.split(","): 18831c75014Sopenharmony_ci path = "%s%s/%s" % ( 18931c75014Sopenharmony_ci _suite_output_prefix, suite.strip(), _dirname_suffix) 19031c75014Sopenharmony_ci outputs.append(path) 19131c75014Sopenharmony_ci print(path) 19231c75014Sopenharmony_ci return outputs 19331c75014Sopenharmony_ci 19431c75014Sopenharmony_ci 19531c75014Sopenharmony_cidef get_subsystem_name(path): 19631c75014Sopenharmony_ci subsystem_name = "" 19731c75014Sopenharmony_ci for subsystem in _SUB_SYSTEM_LIST: 19831c75014Sopenharmony_ci subsystem_path = "/{}/".format(subsystem) 19931c75014Sopenharmony_ci _path = path.lower() 20031c75014Sopenharmony_ci if subsystem_path in _path: 20131c75014Sopenharmony_ci subsystem_name = subsystem 20231c75014Sopenharmony_ci break 20331c75014Sopenharmony_ci subsystem_path = "/{}_lite/".format(subsystem) 20431c75014Sopenharmony_ci if subsystem_path in _path: 20531c75014Sopenharmony_ci subsystem_name = subsystem 20631c75014Sopenharmony_ci break 20731c75014Sopenharmony_ci sys.stdout.write(subsystem_name) 20831c75014Sopenharmony_ci return subsystem_name 20931c75014Sopenharmony_ci 21031c75014Sopenharmony_ci 21131c75014Sopenharmony_cidef get_modulename_by_buildtarget(module_list_file, build_target): 21231c75014Sopenharmony_ci if not os.path.exists(module_list_file): 21331c75014Sopenharmony_ci return "" 21431c75014Sopenharmony_ci with open(module_list_file, "r") as module_file: 21531c75014Sopenharmony_ci module_info_data = json.load(module_file) 21631c75014Sopenharmony_ci for module in module_info_data: 21731c75014Sopenharmony_ci if module_info_data[module]["build_target_name"] == build_target: 21831c75014Sopenharmony_ci sys.stdout.write(module) 21931c75014Sopenharmony_ci return module 22031c75014Sopenharmony_ci return "" 22131c75014Sopenharmony_ci 22231c75014Sopenharmony_ci 22331c75014Sopenharmony_cidef glob(path, filename_pattern): 22431c75014Sopenharmony_ci files = [] 22531c75014Sopenharmony_ci for dir_path, _, files in os.walk(path): 22631c75014Sopenharmony_ci for filename in fnmatch.filter(files, filename_pattern): 22731c75014Sopenharmony_ci files.append(os.path.join(dir_path, filename)) 22831c75014Sopenharmony_ci return files 22931c75014Sopenharmony_ci 23031c75014Sopenharmony_ci 23131c75014Sopenharmony_cidef filter_by_subsystem(testsuites, product_json): 23231c75014Sopenharmony_ci product_info = {} 23331c75014Sopenharmony_ci filtered_features = [] 23431c75014Sopenharmony_ci subs_comps = {} 23531c75014Sopenharmony_ci # parses product json to obtain all the subsystem name 23631c75014Sopenharmony_ci if os.path.exists(product_json): 23731c75014Sopenharmony_ci try: 23831c75014Sopenharmony_ci with open(product_json, 'r') as product_info: 23931c75014Sopenharmony_ci product_info = json.load(product_info) 24031c75014Sopenharmony_ci except ValueError: 24131c75014Sopenharmony_ci print("NO json object could be decoded.") 24231c75014Sopenharmony_ci subsystem_info = product_info.get("subsystems") 24331c75014Sopenharmony_ci for subsystem in subsystem_info: 24431c75014Sopenharmony_ci subs_comps[subsystem.get("subsystem")] = \ 24531c75014Sopenharmony_ci subsystem.get("components", []) 24631c75014Sopenharmony_ci 24731c75014Sopenharmony_ci feature_list = testsuites.split(",") 24831c75014Sopenharmony_ci for feature in feature_list: 24931c75014Sopenharmony_ci # if subsytem name match 25031c75014Sopenharmony_ci subsystem = get_subsystem_name_no_output(feature) 25131c75014Sopenharmony_ci if subsystem in _NO_FILTE_SUB_SYSTEM_LIST: 25231c75014Sopenharmony_ci filtered_features.append(feature) 25331c75014Sopenharmony_ci print(feature) 25431c75014Sopenharmony_ci elif subsystem in subs_comps: 25531c75014Sopenharmony_ci components = subs_comps.get(subsystem, []) 25631c75014Sopenharmony_ci if check_component(feature, components): 25731c75014Sopenharmony_ci filtered_features.append(feature) 25831c75014Sopenharmony_ci print(feature) 25931c75014Sopenharmony_ci return filtered_features 26031c75014Sopenharmony_ci 26131c75014Sopenharmony_ci 26231c75014Sopenharmony_cidef get_subsystem_name_no_output(path): 26331c75014Sopenharmony_ci subsystem_name = "" 26431c75014Sopenharmony_ci for subsystem in _SUB_SYSTEM_LIST: 26531c75014Sopenharmony_ci subsystem_path = "/{}".format(subsystem) 26631c75014Sopenharmony_ci _path = path.lower() 26731c75014Sopenharmony_ci if subsystem_path in _path: 26831c75014Sopenharmony_ci subsystem_name = subsystem 26931c75014Sopenharmony_ci break 27031c75014Sopenharmony_ci subsystem_path = "/{}_lite".format(subsystem) 27131c75014Sopenharmony_ci if subsystem_path in _path: 27231c75014Sopenharmony_ci subsystem_name = subsystem 27331c75014Sopenharmony_ci break 27431c75014Sopenharmony_ci return subsystem_name 27531c75014Sopenharmony_ci 27631c75014Sopenharmony_ci 27731c75014Sopenharmony_cidef check_component(path, components): 27831c75014Sopenharmony_ci for component in components: 27931c75014Sopenharmony_ci component_name = component.get("component", "") 28031c75014Sopenharmony_ci if component_name != "kv_store_lite": 28131c75014Sopenharmony_ci component_name = component_name.split('_lite')[0] 28231c75014Sopenharmony_ci if component_name in path or "{}_hal".format(component_name) in path \ 28331c75014Sopenharmony_ci or "{}_posix".format(component_name) in path: 28431c75014Sopenharmony_ci return True 28531c75014Sopenharmony_ci return False 28631c75014Sopenharmony_ci 28731c75014Sopenharmony_ci 28831c75014Sopenharmony_cidef get_python_cmd(): 28931c75014Sopenharmony_ci major, _, _ = platform.python_version_tuple() 29031c75014Sopenharmony_ci if major == "3": 29131c75014Sopenharmony_ci return "python" 29231c75014Sopenharmony_ci else: 29331c75014Sopenharmony_ci return "python3" 29431c75014Sopenharmony_ci 29531c75014Sopenharmony_ci 29631c75014Sopenharmony_cidef record_testmodule_info(build_target_name, module_name, 29731c75014Sopenharmony_ci subsystem_name, suite_out_dir, same_file=False): 29831c75014Sopenharmony_ci if not build_target_name or not subsystem_name: 29931c75014Sopenharmony_ci print( 30031c75014Sopenharmony_ci 'build_target_name or subsystem_name of testmodule "%s" ' 30131c75014Sopenharmony_ci 'is invalid!' % module_name) 30231c75014Sopenharmony_ci return 30331c75014Sopenharmony_ci if same_file: 30431c75014Sopenharmony_ci module_info_list_file = os.path.join(suite_out_dir, 'module_info.json') 30531c75014Sopenharmony_ci else: 30631c75014Sopenharmony_ci module_info_list_file = os.path.join(suite_out_dir, 30731c75014Sopenharmony_ci '{}_module_info.json'.format 30831c75014Sopenharmony_ci (build_target_name)) 30931c75014Sopenharmony_ci module_info_data = {} 31031c75014Sopenharmony_ci if os.path.exists(module_info_list_file): 31131c75014Sopenharmony_ci try: 31231c75014Sopenharmony_ci with open(module_info_list_file, 'r') as module_file: 31331c75014Sopenharmony_ci module_info_data = json.load(module_file) 31431c75014Sopenharmony_ci except ValueError: 31531c75014Sopenharmony_ci print("NO json object could be decoded but continue") 31631c75014Sopenharmony_ci module_info = {'subsystem': subsystem_name, 31731c75014Sopenharmony_ci 'build_target_name': build_target_name} 31831c75014Sopenharmony_ci module_info_data[module_name] = module_info 31931c75014Sopenharmony_ci with open(module_info_list_file, 'w') as out_file: 32031c75014Sopenharmony_ci json.dump(module_info_data, out_file) 32131c75014Sopenharmony_ci 32231c75014Sopenharmony_ci 32331c75014Sopenharmony_cidef record_test_component_info(out_dir, version): 32431c75014Sopenharmony_ci if not os.path.exists(out_dir): 32531c75014Sopenharmony_ci os.makedirs(out_dir) 32631c75014Sopenharmony_ci all_module_file = os.path.join(out_dir, 'module_info.json') 32731c75014Sopenharmony_ci all_module_data = {} 32831c75014Sopenharmony_ci for root, dirs, files in os.walk(out_dir): 32931c75014Sopenharmony_ci for file in files: 33031c75014Sopenharmony_ci if file.endswith("module_info.json"): 33131c75014Sopenharmony_ci with open(os.path.join(root, file), 'r') as json_data: 33231c75014Sopenharmony_ci module_data = json.load(json_data) 33331c75014Sopenharmony_ci all_module_data.update(module_data) 33431c75014Sopenharmony_ci os.remove(os.path.join(root, file)) 33531c75014Sopenharmony_ci with open(all_module_file, 'w') as out_file: 33631c75014Sopenharmony_ci json.dump(all_module_data, out_file) 33731c75014Sopenharmony_ci 33831c75014Sopenharmony_ci test_component_file = os.path.join(out_dir, 'test_component.json') 33931c75014Sopenharmony_ci test_component_data = {'version': version, } 34031c75014Sopenharmony_ci with open(test_component_file, 'w') as out_file: 34131c75014Sopenharmony_ci json.dump(test_component_data, out_file) 34231c75014Sopenharmony_ci 34331c75014Sopenharmony_ci 34431c75014Sopenharmony_cidef get_target_modules(all_features): 34531c75014Sopenharmony_ci feature_list = [] 34631c75014Sopenharmony_ci if all_features: 34731c75014Sopenharmony_ci for feature in all_features.split(","): 34831c75014Sopenharmony_ci if feature: 34931c75014Sopenharmony_ci feature_list.append(feature) 35031c75014Sopenharmony_ci print(feature) 35131c75014Sopenharmony_ci return feature_list 35231c75014Sopenharmony_ci 35331c75014Sopenharmony_ci 35431c75014Sopenharmony_cidef cmd_popen(cmd): 35531c75014Sopenharmony_ci proc = subprocess.Popen(cmd) 35631c75014Sopenharmony_ci proc.wait() 35731c75014Sopenharmony_ci ret_code = proc.returncode 35831c75014Sopenharmony_ci if ret_code != 0: 35931c75014Sopenharmony_ci raise Exception("{} failed, return code is {}".format(cmd, ret_code)) 36031c75014Sopenharmony_ci 36131c75014Sopenharmony_ci 36231c75014Sopenharmony_cidef build_js_hap(project_path, out_put_dir, hap_name): 36331c75014Sopenharmony_ci if not check_env(): 36431c75014Sopenharmony_ci return 36531c75014Sopenharmony_ci gradle_dir = os.path.join(project_path, "gradle") 36631c75014Sopenharmony_ci os.chdir(gradle_dir) 36731c75014Sopenharmony_ci build_clean = ["gradle", "clean"] 36831c75014Sopenharmony_ci cmd_popen(build_clean) 36931c75014Sopenharmony_ci build_cmd = ["gradle", "entry:packageDebugHap"] 37031c75014Sopenharmony_ci cmd_popen(build_cmd) 37131c75014Sopenharmony_ci gralde_output_dir = os.path.join(gradle_dir, "entry", "build", "outputs") 37231c75014Sopenharmony_ci if os.path.exists(gralde_output_dir): 37331c75014Sopenharmony_ci for root, _, files in os.walk(gralde_output_dir): 37431c75014Sopenharmony_ci for file in files: 37531c75014Sopenharmony_ci if file.endswith(".hap"): 37631c75014Sopenharmony_ci file_util.copy_file(os.path.join(root, file), 37731c75014Sopenharmony_ci os.path.join(out_put_dir.rstrip(','), 37831c75014Sopenharmony_ci hap_name)) 37931c75014Sopenharmony_ci return 38031c75014Sopenharmony_ci 38131c75014Sopenharmony_ci 38231c75014Sopenharmony_ci 38331c75014Sopenharmony_cidef check_env(): 38431c75014Sopenharmony_ci """ 38531c75014Sopenharmony_ci check all the env for js hap build 38631c75014Sopenharmony_ci return: return true if all env ready, otherwise return false 38731c75014Sopenharmony_ci """ 38831c75014Sopenharmony_ci env_list = ['OHOS_SDK_HOME', 'NODE_HOME', 'GRADLE_HOME'] 38931c75014Sopenharmony_ci for env in env_list: 39031c75014Sopenharmony_ci if not os.environ.get(env): 39131c75014Sopenharmony_ci print("the env {} not set, skip build!".format(env)) 39231c75014Sopenharmony_ci return False 39331c75014Sopenharmony_ci else: 39431c75014Sopenharmony_ci return True 39531c75014Sopenharmony_ci 39631c75014Sopenharmony_ci 39731c75014Sopenharmony_cidef generate_allinone_testjson_by_template(tmpl_file, module_name, product_name, config_file): 39831c75014Sopenharmony_ci if not os.path.exists(tmpl_file): 39931c75014Sopenharmony_ci raise Exception( 40031c75014Sopenharmony_ci "Can't find the Test.json or Test.tmpl in the " 40131c75014Sopenharmony_ci "path %s " % os.path.dirname( 40231c75014Sopenharmony_ci test_xml)) 40331c75014Sopenharmony_ci tmpl_content = read_file(tmpl_file) 40431c75014Sopenharmony_ci values = {"module": module_name, "product": product_name} 40531c75014Sopenharmony_ci xml_content = Template(tmpl_content).substitute(values) 40631c75014Sopenharmony_ci write_file(config_file, xml_content, False) 40731c75014Sopenharmony_ci 40831c75014Sopenharmony_ci 40931c75014Sopenharmony_ciif __name__ == '__main__': 41031c75014Sopenharmony_ci sys.exit(main()) 411