# Copyright 2017 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.

from autotest_lib.server import utils

AUTHOR = "Chrome OS Team"
NAME = "firmware_ECUpdateId"
PURPOSE = "Servo based EC test for updating EC ID for verifying EC EFS"
CRITERIA = "This test will fail if EC EFS misbehaves"
ATTRIBUTES = "suite:faft, suite:faft_ec, suite:faft_ec_au_1, suite:faft_ec_au_2, suite:faft_ec_au_3, suite:faft_ec_tot"
TIME = "SHORT"
TEST_CATEGORY = "Functional"
TEST_CLASS = "firmware"
TEST_TYPE = "server"
DEPENDENCIES = "ec:cros"
JOB_RETRIES = 4

DOC = """
This test modifies the EC ID in AP firmware, reboots EC, and checks the next
boot that software sync and EFS works as intended or not. It also corrupts
one RW slot and checks if it is recovered.
"""

args_dict = utils.args_to_dict(args)
servo_args = hosts.CrosHost.get_servo_arguments(args_dict)

def run_ecupdateid(machine):
    host = hosts.create_host(machine, servo_args=servo_args)
    job.run_test("firmware_ECUpdateId", host=host, cmdline_args=args,
                 disable_sysinfo=True, dev_mode=True, tag="dev")

parallel_simple(run_ecupdateid, machines)
