faft: Implement a test to verify EC EFS

Implementat a new test to verify EC EFS by creating a slightly
different RW slot (different EC ID) in AP firmware.

It checks the next boot if the new RW gets software-synced to
the non-active slot and then reboot into it. It checks the EC
hash should change.

Also add steps to check if it gets recovered from corruption.
And do another update by restoring to its original firmware.

BUG=b:69921268
TEST=Ran the new-added firwmare_ECUpdateId test on Fizz (both
RW-A-boot and RW-B-boot).

Change-Id: Ief047279b49e79e1222daa018dd565c56309aa29
Reviewed-on: https://chromium-review.googlesource.com/818085
Commit-Ready: Wai-Hong Tam <[email protected]>
Tested-by: Wai-Hong Tam <[email protected]>
Reviewed-by: Daisuke Nojiri <[email protected]>
diff --git a/server/site_tests/firmware_ECUpdateId/control b/server/site_tests/firmware_ECUpdateId/control
new file mode 100644
index 0000000..568c26d
--- /dev/null
+++ b/server/site_tests/firmware_ECUpdateId/control
@@ -0,0 +1,33 @@
+# 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=False, tag="normal")
+
+parallel_simple(run_ecupdateid, machines)