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