# Copyright 2019 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import logging
import operator
import re
import sys
import xmlrpclib

from autotest_lib.client.common_lib import error
from autotest_lib.client.common_lib.cros import chip_utils
from autotest_lib.server.cros.faft.firmware_test import FirmwareTest


NO_ARGS = tuple()
ONE_INT_ARG = (1, )
ONE_STR_ARG = ("foo", )
SAMPLE_FILE = "/tmp/foo"
CHIP_FW_NAMES = (chip.fw_name for chip in chip_utils.chip_id_map.itervalues())
SAMPLE_CGPT_A = {
    "UUID": "93EF7B23-606B-014B-A10C-E9D7CF53DFD3",
    "successful": 1,
    "partition": 2,
    "priority": 1,
    "tries": 0,
    "Type": "ChromeOS kernel",
}
SAMPLE_CGPT_B = {
    "UUID": "C6604D6B-5563-EE4E-9915-0C50530B158A",
    "successful": 0,
    "partition": 4,
    "priority": 0,
    "tries": 15,
    "Type": "ChromeOS kernel",
}

# RPC_CATEGORIES contains the test cases for all RPCs.
# For readability, the real definition is at the bottom of this file.
RPC_CATEGORIES = [{}]


def get_rpc_category_by_name(name):
    """Find a category from RPC_CATEGORIES by its category_name."""
    for rpc_category in RPC_CATEGORIES:
        if rpc_category["category_name"] == name:
            return rpc_category
    raise ValueError("No RPC category defined with category_name=%s" % name)


def get_rpc_method_names_from_test_case(test_case):
    """
    Extract the method_name or method_names from a test case configuration.

    @param test_case: An element from a test_cases array,
                      like those in RPC_CATEGORIES

    @return: A list of names of RPC methods in that test case.

    """
    if (("method_name" in test_case) ^ ("method_names" in test_case)):
        if "method_name" in test_case:
            return [test_case["method_name"]]
        elif "method_names" in test_case:
            return test_case["method_names"]
        else:
            err_msg = "Something strange happened while parsing RPC methods"
            raise ValueError(err_msg)
    else:
        err_msg = "test_case must contain EITHER method_name OR method_names"
        raise ValueError(err_msg)



class firmware_FAFTRPC(FirmwareTest):
    """
    This test checks that all RPC commands work as intended.

    For now, we only need to verify that the RPC framework is intact,
    so we only verify that all RPCs can be called with the
    expected arguments.

    It would be good to expand this test to verify that all RPCs
    yields the expected results.

    """
    version = 1
    _stored_values = {}


    def initialize(self, host, cmdline_args, dev_mode=False):
        """Runs before test begins."""
        super(firmware_FAFTRPC, self).initialize(host, cmdline_args)
        self.backup_firmware()
        self.faft_client.rpc_settings.enable_test_mode()


    def cleanup(self):
        """Runs after test completion."""
        self.faft_client.rpc_settings.disable_test_mode()
        try:
            if self.is_firmware_saved():
                self.restore_firmware()
            if self.reboot_after_completion:
                logging.info("Rebooting DUT, as specified in control file")
                self.switcher.mode_aware_reboot()
        except Exception as e:
            logging.error("Caught exception: %s", str(e))
        super(firmware_FAFTRPC, self).cleanup()


    def _log_success(self, rpc_name, params, success_message):
        """Report on an info level that a test passed."""
        logging.info("RPC test for %s%s successfully %s",
                     rpc_name, params, success_message)


    def _fail(self, rpc_name, params, error_msg):
        """Raise a TestFail error explaining why a test failed."""
        raise error.TestFail("RPC function %s%s had an unexpected result: %s"
                             % (rpc_name, params, error_msg))


    def _retrieve_stored_values(self, params):
        """
        Replace any operator.itemgetter params with corresponding stored values.

        @param params: A tuple of args that might be passed into an RPC method,
                       some of which might be operator.itemgetter objects.

        @return: A tuple of pargs to be passed into an RPC method,
                 with stored values swapped in for operator.itemgetters.

        """
        new_params = []
        for old_param in params:
            if isinstance(old_param, operator.itemgetter):
                retrieved_value = old_param(self._stored_values)
                new_params.append(retrieved_value)
            else:
                new_params.append(old_param)
        new_params = tuple(new_params)
        return new_params


    def _assert_passes(self, category, method, params, allow_error_msg=None,
                       expected_return_type=None, silence_result=False):
        """
        Check whether an RPC function with given input passes,
        and fail if it does not.

        If an expected_return_type is passed in, then require the RPC function
        to return a value matching that type, or else fail.

        @param category: The RPC subsystem category; ex. kernel, bios
        @param method: The name of the RPC function within the subsystem
        @param params: A tuple containing params to pass into the RPC function
        @param allow_error_msg: If a regexy string is passed in, and the RPC
                                returns an RPC error matching this regex,
                                then the test will pass instead of failing.
        @param expected_return_type: If not None, then the RPC return value
                                     must be this type, else the test fails.
        @param silence_result: If True, then the RPC return value will not be
                               logged.

        @raise error.TestFail: If the RPC raises any error (unless handled by
                               allow_error_msg).
        @raise error.TestFail: If expected_return_type is not None, and the RPC
                               return value is not expected_return_type.

        @return: Not meaningful.

        """
        rpc_function = self.get_rpc_function(category, method)
        if category:
            rpc_name = '%s.%s' % (category, method)
        else:
            rpc_name = method
        try:
            result = rpc_function(*params)
        except xmlrpclib.Fault as e:
            if allow_error_msg is not None and \
                    re.search(allow_error_msg, str(e)):
                success_msg = "raised an acceptable error during RPC handling"
                self._log_success(rpc_name, params, success_msg)
                return e
            error_msg = "Unexpected RPC error: %s" % e
            self._fail(rpc_name, params, error_msg)
        except:
            error_msg = "Unexpected misc error: %s" % sys.exc_info()[0]
            self._fail(rpc_name, params, error_msg)
        else:
            if expected_return_type is None:
                if silence_result:
                    success_msg = "passed with a silenced result"
                else:
                    success_msg = "passed with result %s" % result
                self._log_success(rpc_name, params, success_msg)
                return result
            elif isinstance(result, expected_return_type):
                if silence_result:
                    success_msg = "passed with a silenced result of " \
                            "expected type %s" % type(result)
                else:
                    success_msg = "passed with result %s of expected type %s" \
                            % (result, type(result))
                self._log_success(rpc_name, params, success_msg)
                return result
            else:
                error_msg = ("Expected a result of type %s, but got %s " +
                                "of type %s)") \
                            % (expected_return_type, result, type(result))
                self._fail(rpc_name, params, error_msg)


    def _assert_fails(self, category, method, params):
        """
        Check whether an RPC function with given input throws an RPC error,
        and fail if it does not.

        @param category: The RPC subsystem category; ex. kernel, bios
        @param method: The name of the RPC function within the subsystem
        @param params: A tuple containing params to pass into the RPC function

        @raise error.TestFail: If the RPC raises no error, or if it raises any
                               error other than xmlrpclib.Fault

        @return: Not meaningful.

        """
        rpc_function = self.get_rpc_function(category, method)
        if category:
            rpc_name = '%s.%s' % (category, method)
        else:
            rpc_name = method
        try:
            result = rpc_function(*params)
        except xmlrpclib.Fault as e:
            self._log_success(rpc_name, params, "raised RPC error")
        except:
            error_msg = "Unexpected misc error: %s" % sys.exc_info()[0]
            self._fail(rpc_name, params, error_msg)
        else:
            error_msg = "Should have raised an RPC error, but did not"
            self._fail(rpc_name, params, error_msg)


    def _assert_output(self, category, method, params, expected_output,
                       allow_error_msg=None):
        """
        Check whether an RPC function with given input
        returns a particular value, and fail if it does not.

        @param category: The RPC subsystem category; ex. kernel, bios
        @param method: The name of the RPC function within the subsystem
        @param params: A tuple containing params to pass into the RPC function
        @param expected_output: The value that the RPC function should return
        @param allow_error_msg: If a regexy string is passed in, and the RPC
                                returns an RPC error containing this string,
                                then the test will pass instead of failing.

        @raise error.TestFail: If self._assert_passes(...) fails, or if the
                               RPC return value does not match expected_output

        @return: Not meaningful.

        """
        rpc_name = ".".join([category, method])
        actual_output = self._assert_passes(category, method, params,
                                            allow_error_msg=allow_error_msg)
        if expected_output == actual_output:
            success_message = "returned the expected value <%s>" \
                              % expected_output
            self._log_success(rpc_name, params, success_message)
        else:
            error_msg = "Expected output <%s>, but actually returned <%s>" \
                        % (expected_output, actual_output)
            self._fail(rpc_name, params, error_msg)


    def get_rpc_function(self, category, method):
        """
        Find a callable RPC function given its name.

        @param category: The name of an RPC subsystem category; ex. kernel, ec
        @param method: The name of an RPC function within the subsystem

        @return: A callable method of the RPC proxy
        """
        if category:
            rpc_function_handler = getattr(self.faft_client, category)
        else:
            rpc_function_handler = self.faft_client
        rpc_function = getattr(rpc_function_handler, method)
        return rpc_function


    def run_once(self, category_under_test="*", reboot_after_completion=False):
        """
        Main test logic.

        For all RPC categories being tested,
        iterate through all test cases defined in RPC_CATEGORIES.

        @param category_under_test: The name of an RPC category to be tested,
                                    such as ec, bios, or kernel.
                                    Default is '*', which tests all categories.

        """
        if category_under_test == "*":
            logging.info("Testing all %d RPC categories", len(RPC_CATEGORIES))
            rpc_categories_to_test = RPC_CATEGORIES
        else:
            rpc_categories_to_test = [
                    get_rpc_category_by_name(category_under_test)]
            logging.info("Testing RPC category '%s'", category_under_test)
        self.reboot_after_completion = reboot_after_completion
        for rpc_category in rpc_categories_to_test:
            category_name = rpc_category["category_name"]
            if category_name == "ec" and not self.check_ec_capability():
                logging.info("No EC found on DUT. Skipping EC category.")
                continue

            # Re-enable test mode, in case another category's tests disabled it.
            self.faft_client.rpc_settings.enable_test_mode()

            test_cases = rpc_category["test_cases"]
            logging.info("Testing %d cases for RPC category %s",
                         len(test_cases), repr(category_name))
            for test_case in test_cases:
                method_names = get_rpc_method_names_from_test_case(test_case)
                passing_args = test_case.get("passing_args", [])
                failing_args = test_case.get("failing_args", [])
                allow_error_msg = test_case.get("allow_error_msg", None)
                expected_return_type = test_case.get("expected_return_type",
                                                     None)
                store_result_as = test_case.get("store_result_as", None)
                silence_result = test_case.get("silence_result", False)
                for method_name in method_names:
                    for passing_arg_tuple in passing_args:
                        passing_arg_tuple = self._retrieve_stored_values(
                                passing_arg_tuple)
                        result = self._assert_passes(category_name, method_name,
                                                     passing_arg_tuple,
                                                     allow_error_msg,
                                                     expected_return_type,
                                                     silence_result)
                        if store_result_as is not None:
                            self._stored_values[store_result_as] = result
                    for failing_arg_tuple in failing_args:
                        failing_arg_tuple = self._retrieve_stored_values(
                                failing_arg_tuple)
                        self._assert_fails(category_name, method_name,
                                           failing_arg_tuple)


"""
RPC_CATEGORIES contains all the test cases for our RPC tests.
Each element of RPC_CATEGORIES must be a dict containing the following keys:

@key category_name: A string naming the RPC category, such as bios or kernel.
@key test_cases: A list of test cases, each of which must be a dict containing
                 the following keys:
    @key method_name (optional): A string naming an RPC method within
                                 this category. Either this key or method_names
                                 is required (but not both).
    @key method_names (optional): An array of strings naming RPC methods within
                                  this category. Either this key or method_name
                                  is required (but not both).
    @key passing_args: A list of tuples, each of which could be unpacked and
                       then passed into the RPC method as a valid set of
                       parameters. Each tuple might contain instances of
                       operator.itemgetter. If so, those instances will be
                       replaced with values from firmware_FAFTRPC._stored_values
                       before being passed into the RPC method.
    @key failing_args: A list of tuples, each of which could be unpacked and
                       then passed into the RPC method as a set of parameters
                       which should yield an RPC error. Each tuple might contain
                       instances of operator.itemgetter. If so, those instances
                       will be replaced with values from
                       firmware_FAFTRPC._stored_values before being passed into
                       the RPC method.
    @key silence_result: Normally, the RPC return value is logged. However, if
                         this key is truthy, then the result is not logged.
    @key allow_error_msg (optional): String representing a regex pattern.
                                     If the RPC method is called with a
                                     passing_args tuple, but it yields an RPC
                                     error whose message is matched by
                                     re.search(allow_error_msg, error_msg),
                                     then the test will be considered a pass.
    @key store_result_as (optional): String. If this field is specified, then
                                     the result from the RPC call will be stored
                                     in firmware_FAFTRPC._stored_values. This
                                     allows us to later reference the result
                                     via an operator.itemgetter, as described
                                     above in the docstrings for passing_args
                                     and failing_args.

"""
RPC_CATEGORIES = [
        {
                "category_name":
                "system",
                "test_cases": [
                        {
                                "method_names": [
                                        "is_available",
                                        "get_platform_name",
                                        "get_model_name",
                                        "dev_tpm_present",
                                        "get_root_dev",
                                        "get_root_part",
                                        "get_fw_vboot2",
                                        "request_recovery_boot",
                                        "is_removable_device_boot",
                                        "get_internal_device",
                                ],
                                "passing_args": [NO_ARGS],
                                "failing_args": [ONE_INT_ARG, ONE_STR_ARG],
                        },
                        {
                                "method_name": "dump_log",
                                "passing_args": [
                                        NO_ARGS,
                                        (True, ),
                                        (False, ),
                                ],
                                "failing_args": [
                                        (True, False),
                                ],
                                "expected_return_type": str,
                                "silence_result": True,
                        },
                        {
                                "method_name":
                                "run_shell_command",
                                "passing_args": [("ls -l", ), ("ls -l", False),
                                                 ("ls -l", True)],
                                "failing_args": [
                                        NO_ARGS,
                                        ("ls", "-l", 'foo'),
                                ],
                        },
                        {
                                "method_name": "run_shell_command_get_status",
                                "passing_args": [
                                        ("ls", ),
                                ],
                                "failing_args": [
                                        NO_ARGS,
                                        ("ls", "-l", 'foo'),
                                ],
                        },
                        {
                                "method_name": "run_shell_command_get_status",
                                "passing_args": [
                                        ("ls ''", ),
                                ],
                        },
                        {
                                "method_name": "run_shell_command",
                                "failing_args": [
                                        ("ls ''", ),
                                ],
                        },
                        {
                                "method_name":
                                "run_shell_command_check_output",
                                "passing_args": [
                                        ("ls -l", "total"),
                                ],
                                "failing_args": [
                                        NO_ARGS,
                                ],
                        },
                        {
                                "method_name": "run_shell_command_get_output",
                                "passing_args": [
                                        ("ls -l", True),
                                ],
                                "failing_args": [
                                        NO_ARGS,
                                ],
                        },
                        {
                                "method_name": "get_crossystem_value",
                                "passing_args": [
                                        ("fwid", ),
                                ],
                                "failing_args": [NO_ARGS],
                        },
                        {
                                "method_name": "set_try_fw_b",
                                "passing_args": [
                                        NO_ARGS,
                                        (1, ),
                                ],
                                "failing_args": [
                                        (1, 1),
                                ],
                        },
                        {
                                "method_name": "set_fw_try_next",
                                "passing_args": [
                                        ("A", ),
                                        ("A", 1),
                                ],
                                "failing_args": [
                                        NO_ARGS,
                                        ("A", 1, "B"),
                                ],
                        },
                        {
                                "method_name": "get_dev_boot_usb",
                                "passing_args": [NO_ARGS],
                                "failing_args": [ONE_INT_ARG, ONE_STR_ARG],
                                "store_result_as": "dev_boot_usb",
                        },
                        {
                                "method_name":
                                "set_dev_boot_usb",
                                "passing_args": [
                                        (operator.itemgetter("dev_boot_usb"),
                                         ),
                                ],
                                "failing_args": [
                                        NO_ARGS,
                                        (True, False),
                                ],
                        },
                        {
                                "method_name": "create_temp_dir",
                                "passing_args": [
                                        NO_ARGS,
                                        ONE_STR_ARG,
                                ],
                                "failing_args": [
                                        ONE_INT_ARG,
                                        ("foo", "bar"),
                                ],
                                "expected_return_type": str,
                                "store_result_as": "temp_dir",
                        },
                        {
                                "method_name": "remove_file",
                                "passing_args": [
                                        (SAMPLE_FILE, ),
                                ],
                                "failing_args": [
                                        NO_ARGS,
                                        (1, 2),
                                ],
                        },
                        {
                                "method_name": "remove_dir",
                                "passing_args": [
                                        (operator.itemgetter("temp_dir"), ),
                                ],
                                "failing_args": [
                                        NO_ARGS,
                                        (1, 2),
                                ]
                        },
                        {
                                "method_name": "check_keys",
                                "passing_args": [
                                        ([], ),
                                        ([116], ),
                                        ([28, 29, 32], ),
                                ],
                                "failing_args": [
                                        NO_ARGS,
                                        ([], [116]),
                                ],
                                "expected_return_type": int,
                        },
                ]
        },
        {
                "category_name":
                "bios",
                "test_cases": [
                        {
                                "method_names": [
                                        "reload",
                                ],
                                "passing_args": [NO_ARGS],
                                "failing_args": [ONE_INT_ARG, ONE_STR_ARG]
                        },
                        {
                                "method_name": "get_gbb_flags",
                                "passing_args": [NO_ARGS],
                                "failing_args": [ONE_INT_ARG, ONE_STR_ARG],
                                "expected_return_type": int,
                                "store_result_as": "gbb_flags",
                        },
                        {
                                "method_name": "set_gbb_flags",
                                "passing_args": [
                                        (operator.itemgetter("gbb_flags"), ),
                                ],
                                "failing_args": [NO_ARGS],
                        },
                        {
                                "method_name": "get_preamble_flags",
                                "passing_args": [
                                        ("a", ),
                                ],
                                "failing_args": [NO_ARGS, ONE_INT_ARG],
                                "store_result_as": "preamble_flags",
                        },
                        {
                                "method_name":
                                "set_preamble_flags",
                                "passing_args": [
                                        (
                                                "a",
                                                operator.itemgetter(
                                                        "preamble_flags"),
                                        ),
                                ],
                                "failing_args": [
                                        NO_ARGS,
                                        ONE_INT_ARG,
                                        ONE_STR_ARG,
                                        (
                                                "c",
                                                operator.itemgetter(
                                                        "preamble_flags"),
                                        ),
                                ],
                        },
                        {
                                "method_names": [
                                        "get_body_sha",
                                        "get_sig_sha",
                                        "get_section_fwid",
                                        "get_version",
                                        "get_datakey_version",
                                        "get_kernel_subkey_version",
                                ],
                                "passing_args": [
                                        ("a", ),
                                        ("b", ),
                                ],
                                "failing_args": [
                                        NO_ARGS,
                                        ONE_INT_ARG,
                                        (("a", "b"), ),
                                        ("c", ),
                                ]
                        },
                        {
                                "method_names": [
                                        "corrupt_sig",
                                        "restore_sig",
                                        "corrupt_body",
                                        "restore_body",
                                        "move_version_backward",
                                        "move_version_forward",
                                ],
                                "passing_args": [
                                        ("a", ),
                                        ("b", ),
                                ],
                                "failing_args": [
                                        NO_ARGS,
                                        ONE_INT_ARG,
                                        ("c", ),
                                ]
                        },
                        {
                                "method_names": [
                                        "dump_whole",
                                        "write_whole",
                                ],
                                "passing_args": [
                                        (SAMPLE_FILE, ),
                                ],
                                "failing_args": [NO_ARGS],
                        },
                        {
                                "method_name": "strip_modified_fwids",
                                "passing_args": [NO_ARGS],
                                "failing_args": [ONE_INT_ARG, ONE_STR_ARG],
                                "expected_return_type": dict
                        },
                        {
                                "method_name":
                                "set_write_protect_region",
                                "passing_args": [("WP_RO", ), ("WP_RO", None),
                                                 ("WP_RO", True),
                                                 ("WP_RO", False)],
                                "failing_args":
                                [NO_ARGS, (None, ), ("WP_RO", None, "EXTRA")],
                        },
                        {
                                "method_name": "get_write_protect_status",
                                "passing_args": [NO_ARGS],
                                "failing_args": [ONE_INT_ARG, ONE_STR_ARG],
                                "expected_return_type": dict
                        },
                        {
                                "method_name":
                                "get_write_cmd",
                                "passing_args": [
                                        NO_ARGS,
                                        (""),
                                        ("bios.bin", ),
                                ],
                                "failing_args": [("bios.bin", []),
                                                 ("bios.bin", 1),
                                                 ("bios.bin", [], 'extra')],
                                "expected_return_type":
                                str
                        },
                ],
        },
        {
                "category_name":
                "ec",
                "test_cases": [
                        {
                                "method_names": [
                                        "reload",
                                        "get_version",
                                        "get_active_hash",
                                        "is_efs",
                                ],
                                "passing_args": [NO_ARGS],
                                "failing_args": [ONE_INT_ARG, ONE_STR_ARG],
                                "allow_error_msg":
                                "list index out of range",
                        },
                        {
                                "method_names":
                                ["dump_whole", "write_whole", "dump_firmware"],
                                "passing_args": [
                                        (SAMPLE_FILE, ),
                                ],
                                "failing_args": [NO_ARGS],
                        },
                        {
                                "method_name":
                                "corrupt_body",
                                "passing_args": [
                                        ("rw", ),
                                ],
                                "failing_args": [
                                        NO_ARGS,
                                        ONE_INT_ARG,
                                        ("ro", ),
                                        ("rw", "rw"),
                                ],
                        },
                        {
                                "method_name": "set_write_protect",
                                "passing_args": [
                                        (True, ),
                                        (False, ),
                                ],
                                "failing_args": [
                                        NO_ARGS,
                                        (True, False),
                                ]
                        },
                        {
                                "method_name":
                                "copy_rw",
                                "passing_args": [
                                        ("rw", "rw"),
                                ],
                                "failing_args": [
                                        NO_ARGS,
                                        ("rw", "ro"),
                                        ("ro", "rw"),
                                        ("rw", ),
                                ],
                        },
                        {
                                "method_name": "reboot_to_switch_slot",
                                "passing_args": [NO_ARGS],
                                "failing_args": [ONE_INT_ARG, ONE_STR_ARG],
                                "allow_error_msg": "CmdError",
                        },
                        {
                                "method_name":
                                "get_write_cmd",
                                "passing_args": [
                                        NO_ARGS,
                                        (""),
                                        ("ec.bin", ),
                                ],
                                "failing_args": [("ec.bin", []), ("ec.bin", 1),
                                                 ("ec.bin", [], 'extra')],
                                "expected_return_type":
                                str
                        },
                ],
        },
        {
                "category_name":
                "kernel",
                "test_cases": [{
                        "method_names": [
                                "corrupt_sig",
                                "restore_sig",
                                "move_version_backward",
                                "move_version_forward",
                        ],
                        "passing_args": [
                                ("a", ),
                                ("b", ),
                        ],
                        "failing_args": [
                                NO_ARGS,
                                ONE_INT_ARG,
                                ("c", ),
                                ("a", "b"),
                        ],
                }, {
                        "method_names": [
                                "get_version",
                                "get_datakey_version",
                                "get_sha",
                        ],
                        "passing_args": [
                                ("a", ),
                                ("b", ),
                        ],
                        "failing_args": [
                                (("a", "b"), ),
                                ("c", ),
                                NO_ARGS,
                                ONE_INT_ARG,
                        ],
                }, {
                        "method_name": "diff_a_b",
                        "passing_args": [NO_ARGS],
                        "failing_args": [
                                ONE_INT_ARG,
                                ONE_STR_ARG,
                        ],
                        "expected_return_type": bool,
                }, {
                        "method_name":
                        "resign_with_keys",
                        "passing_args": [
                                ("a", ),
                                ("b", ),
                                ("b", SAMPLE_FILE),
                        ],
                        "failing_args": [
                                (("a", "b"), ),
                                ("c", ),
                                NO_ARGS,
                                ONE_INT_ARG,
                        ],
                }, {
                        "method_names": [
                                "dump",
                                "write",
                        ],
                        "passing_args": [
                                ("a", SAMPLE_FILE),
                                ("b", SAMPLE_FILE),
                        ],
                        "failing_args": [
                                (("a", "b"), SAMPLE_FILE),
                                ("c", SAMPLE_FILE),
                                ("a", ),
                                NO_ARGS,
                        ]
                }],
        },
        {
                "category_name":
                "tpm",
                "test_cases": [
                        {
                                "method_names": [
                                        "get_firmware_version",
                                        "get_firmware_datakey_version",
                                        "get_kernel_version",
                                        "get_kernel_datakey_version",
                                        "get_tpm_version",
                                        "stop_daemon",
                                        "restart_daemon",
                                ],
                                "passing_args": [NO_ARGS],
                                "failing_args": [ONE_INT_ARG, ONE_STR_ARG],
                        },
                ]
        },
        {
                "category_name":
                "cgpt",
                "test_cases": [{
                        "method_name": "get_attributes",
                        "passing_args": [NO_ARGS],
                        "failing_args": [
                                ONE_INT_ARG,
                                ONE_STR_ARG,
                        ],
                }, {
                        "method_name":
                        "set_attributes",
                        "passing_args": [
                                NO_ARGS,
                                (SAMPLE_CGPT_A, ),
                                (None, SAMPLE_CGPT_B),
                                (SAMPLE_CGPT_A, SAMPLE_CGPT_B),
                                (None, None),
                        ],
                        "failing_args": [
                                (None, None, None),
                        ],
                }]
        },
        {
                "category_name":
                "updater",
                "test_cases": [
                        # TODO (gredelston):
                        # Uncomment the methods which write to flash memory,
                        # once we are able to set the firmware_updater to "emulate" mode.
                        {
                                "method_names": [
                                        "cleanup",
                                        "stop_daemon",
                                        "start_daemon",
                                        # "modify_ecid_and_flash_to_bios",
                                        "get_ec_hash",
                                        "reset_shellball",
                                        # "run_factory_install",
                                        # "run_recovery",
                                        "cbfs_setup_work_dir",
                                        # "cbfs_sign_and_flash",
                                        "get_temp_path",
                                        "get_keys_path",
                                        "get_work_path",
                                        "get_bios_relative_path",
                                        "get_ec_relative_path",
                                        "get_ec_hash"
                                ],
                                "passing_args": [
                                        NO_ARGS,
                                ],
                                "failing_args": [
                                        ONE_INT_ARG,
                                        ONE_STR_ARG,
                                ],
                                "allow_error_msg":
                                ("command cp -rf "
                                 "/usr/local/tmp/faft/autest/work "
                                 "/usr/local/tmp/faft/autest/cbfs failed|"
                                 "Could not detect a usable ec flash device")
                        },
                        {
                                "method_name":
                                "get_section_fwid",
                                "passing_args": [
                                        NO_ARGS,
                                        ("bios", ),
                                        ("ec", ),
                                        ("bios", "b"),
                                        ("ec", "rw"),
                                ],
                                "failing_args": [
                                        ("foo", ),
                                        ("bios", "foo"),
                                        ("ec", "foo"),
                                ],
                                "expected_return_type":
                                str,
                                "allow_error_msg":
                                r"is empty|does not contain",
                        },
                        {
                                "method_names": [
                                        "get_device_fwids",
                                        "get_image_fwids",
                                ],
                                "passing_args": [
                                        NO_ARGS,
                                        ("bios", ),
                                        ("ec", ),
                                ],
                                "failing_args": [
                                        ("foo", ),
                                ],
                                "expected_return_type":
                                dict,
                                "allow_error_msg": (r"is already modified|"
                                                    r"is empty|"
                                                    r"does not contain"),
                        },
                        {
                                "method_name":
                                "modify_image_fwids",
                                "passing_args": [
                                        NO_ARGS,
                                        ("bios", ),
                                        ("ec", ),
                                        ("bios", ("b", "rec")),
                                        ("ec", ("rw_b", )),
                                ],
                                "failing_args": [
                                        ("foo", ),
                                        ("bios", ("foo", )),
                                        ("ec", ("foo", )),
                                ],
                                "expected_return_type":
                                dict,
                                "allow_error_msg": (r"is already modified|"
                                                    r"is empty|"
                                                    r"does not contain"),
                        },
                        {
                                "method_name": "resign_firmware",
                                "passing_args": [
                                        ONE_INT_ARG,
                                        (None, ),
                                ],
                                "failing_args": [
                                        NO_ARGS,
                                        ONE_STR_ARG,
                                        (1, 1),
                                ],
                        },
                        {
                                "method_names": [
                                        "repack_shellball",
                                        "extract_shellball",
                                ],
                                "passing_args": [
                                        NO_ARGS,
                                        ("test", ),
                                        (None, ),
                                ],
                                "failing_args": [
                                        ("foo", "bar"),
                                ]
                        },
                        {
                                "method_name":
                                "run_firmwareupdate",
                                "passing_args": [
                                        ("autoupdate", ),
                                        ("recovery", ),
                                        ("bootok", ),
                                        ("factory_install", ),
                                        ("bootok", None),
                                        ("bootok", "test"),
                                        ("bootok", "test", ()),
                                        ("bootok", "test", ("--noupdate_ec",
                                                            "--wp=1")),
                                ],
                                "failing_args": [NO_ARGS],
                        },
                        {
                                "method_name":
                                "get_firmwareupdate_command",
                                "passing_args": [
                                        ("autoupdate", ),
                                        ("recovery", ),
                                        ("factory_install", ),
                                ],
                                "failing_args": [NO_ARGS],
                                "expected_return_type":
                                str
                        },
                        {
                                "method_names": [
                                        "run_autoupdate",
                                        "run_bootok",
                                ],
                                "passing_args": [
                                        ("test", ),
                                ],
                                "failing_args": [
                                        NO_ARGS,
                                        ("foo", "bar"),
                                ],
                        },
                        {
                                "method_names": [
                                        "cbfs_extract_chip",
                                        "cbfs_get_chip_hash",
                                        "cbfs_replace_chip",
                                ],
                                "passing_args":
                                [(chip_fw_name, )
                                 for chip_fw_name in CHIP_FW_NAMES],
                                "failing_args": [
                                        NO_ARGS,
                                        ONE_INT_ARG,
                                ],
                                "allow_error_msg":
                                "cbfstool /usr/local/tmp/faft/"
                        },
                        {
                                "method_name":
                                "copy_bios",
                                "passing_args": [('/tmp/fake-bios.bin', )],
                                "failing_args":
                                [NO_ARGS, ('/tmp/fake-bios.bin', "foo")],
                                "expected_return_type":
                                str
                        },
                        {
                                "method_name": "get_image_gbb_flags",
                                "passing_args":
                                [NO_ARGS, ('/tmp/fake-bios.bin', )],
                                "failing_args":
                                [('/tmp/fake-bios.bin', 'bogus')],
                                "store_result_as": "gbb_flags"
                        },
                        {
                                "method_name":
                                "set_image_gbb_flags",
                                "passing_args": [
                                        (operator.itemgetter('gbb_flags'), ),
                                        (operator.itemgetter('gbb_flags'),
                                         '/tmp/fake-bios.bin'),
                                ],
                                "failing_args":
                                [NO_ARGS, ('too', 'many', 'args')]
                        }
                ]
        },
        {
                "category_name":
                "rootfs",
                "test_cases": [
                        {
                                "method_name":
                                "verify_rootfs",
                                "passing_args": [
                                        ("A", ),
                                        ("B", ),
                                ],
                                "failing_args": [
                                        NO_ARGS,
                                        ONE_INT_ARG,
                                        ("C", ),
                                        ("A", "B"),
                                ],
                        },
                ]
        },
        {
                "category_name":
                '',
                "test_cases": [
                        # explicit connect
                        {
                                "method_name": "quit",
                                "passing_args": [NO_ARGS]
                        },
                        {
                                "method_name": "connect",
                                "passing_args": [NO_ARGS]
                        },
                        {
                                "method_name": "ready",
                                "passing_args": [NO_ARGS]
                        },
                        {
                                "method_name": "disconnect",
                                "passing_args": [NO_ARGS]
                        },
                        {
                                "method_name": "connect",
                                "passing_args": [NO_ARGS]
                        },
                        {
                                "method_name": "ready",
                                "passing_args": [NO_ARGS]
                        },

                        # implicit connect
                        {
                                "method_name": "quit",
                                "passing_args": [NO_ARGS]
                        },
                        {
                                "method_name": "ready",
                                "passing_args": [NO_ARGS]
                        },
                        {
                                "method_name": "disconnect",
                                "passing_args": [NO_ARGS]
                        },
                        {
                                "method_name": "ready",
                                "passing_args": [NO_ARGS]
                        },
                ]
        }
]
