普通文本  |  134行  |  4.52 KB

#!/usr/bin/env python3
#
#   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 enum
"""This module has the global key values that are used across framework
modules.
"""


class Config(enum.Enum):
    """Enum values for test config related lookups.
    """
    # Keys used to look up values from test config files.
    # These keys define the wording of test configs and their internal
    # references.
    key_log_path = "logpath"
    key_testbeds_under_test = 'testbeds_under_test'
    key_testbed = "testbed"
    key_testbed_name = "name"
    # configpath is the directory. key_config_full_path is the file path.
    key_config_path = "configpath"
    key_config_full_path = 'config_full_path'
    key_test_paths = "testpaths"
    key_port = "Port"
    key_address = "Address"
    key_random = "random"
    key_test_case_iterations = "test_case_iterations"
    key_test_failure_tracebacks = "test_failure_tracebacks"
    # Config names for controllers packaged in ACTS.
    key_android_device = "AndroidDevice"
    key_fuchsia_device = "FuchsiaDevice"
    key_buds_device = "BudsDevice"
    key_chameleon_device = "ChameleonDevice"
    key_native_android_device = "NativeAndroidDevice"
    key_relay_device = "RelayDevice"
    key_access_point = "AccessPoint"
    key_attenuator = "Attenuator"
    key_iperf_server = "IPerfServer"
    key_iperf_client = "IPerfClient"
    key_packet_sender = "PacketSender"
    key_monsoon = "Monsoon"
    key_sniffer = "Sniffer"
    key_arduino_wifi_dongle = "ArduinoWifiDongle"
    key_packet_capture = "PacketCapture"
    # Internal keys, used internally, not exposed to user's config files.
    ikey_user_param = "user_params"
    ikey_testbed_name = "testbed_name"
    ikey_logger = "log"
    ikey_logpath = "log_path"
    ikey_summary_writer = 'summary_writer'
    ikey_cli_args = "cli_args"
    # module name of controllers packaged in ACTS.
    m_key_monsoon = "monsoon"
    m_key_android_device = "android_device"
    m_key_fuchsia_device = "fuchsia_device"
    m_key_buds_device = "buds_controller"
    m_key_chameleon_device = "chameleon_controller"
    m_key_native_android_device = "native_android_device"
    m_key_relay_device = "relay_device_controller"
    m_key_access_point = "access_point"
    m_key_attenuator = "attenuator"
    m_key_iperf_server = "iperf_server"
    m_key_iperf_client = "iperf_client"
    m_key_packet_sender = "packet_sender"
    m_key_sniffer = "sniffer"
    m_key_arduino_wifi_dongle = "arduino_wifi_dongle"
    m_key_packet_capture = "packet_capture"

    # A list of keys whose values in configs should not be passed to test
    # classes without unpacking first.
    reserved_keys = (key_testbed, key_log_path, key_test_paths)

    # Controller names packaged with ACTS.
    builtin_controller_names = [
        key_android_device,
        key_fuchsia_device,
        key_buds_device,
        key_native_android_device,
        key_relay_device,
        key_access_point,
        key_attenuator,
        key_iperf_server,
        key_iperf_client,
        key_packet_sender,
        key_monsoon,
        key_sniffer,
        key_chameleon_device,
        key_arduino_wifi_dongle,
        key_packet_capture,
    ]

    # Keys that are file or folder paths.
    file_path_keys = [key_relay_device]


def get_name_by_value(value):
    for name, member in Config.__members__.items():
        if member.value == value:
            return name
    return None


def get_module_name(name_in_config):
    """Translates the name of a controller in config file to its module name.
    """
    return value_to_value(name_in_config, "m_%s")


def value_to_value(ref_value, pattern):
    """Translates the value of a key to the value of its corresponding key. The
    corresponding key is chosen based on the variable name pattern.
    """
    ref_key_name = get_name_by_value(ref_value)
    if not ref_key_name:
        return None
    target_key_name = pattern % ref_key_name
    try:
        return getattr(Config, target_key_name).value
    except AttributeError:
        return None