autotest: faft_client: lazy load of flashrom handler

Initializing flashrom handler for both BIOS and EC takes nearly 10
seconds for each FAFT step. This is not necessary for tests that do not
use flashrom. Let's only load it when we really need it.

BUG=chrome-os-partner:10620
TEST=Tried tests with and without flashrom use. Both tests passed.

Change-Id: I62a7e2823fa1498f5ec5aa92e070a7653f3c0623
Reviewed-on: https://gerrit.chromium.org/gerrit/25515
Reviewed-by: Tom Wai-Hong Tam <waihong@chromium.org>
Tested-by: Vic Yang <victoryang@chromium.org>
Commit-Ready: Vic Yang <victoryang@chromium.org>
diff --git a/client/cros/faft_client.py b/client/cros/faft_client.py
index 3fe37c8..343b3ac 100644
--- a/client/cros/faft_client.py
+++ b/client/cros/faft_client.py
@@ -30,6 +30,26 @@
     return wrapper
 
 
+class LazyFlashromHandlerProxy:
+    _loaded = False
+    _obj = None
+
+    def __init__(self, *args, **kargs):
+        self._args = args
+        self._kargs = kargs
+
+    def _load(self):
+        self._obj = flashrom_handler.FlashromHandler()
+        self._obj.init(*self._args, **self._kargs)
+        self._obj.new_image()
+        self._loaded = True
+
+    def __getattr__(self, name):
+        if not self._loaded:
+            self._load()
+        return getattr(self._obj, name)
+
+
 class FAFTClient(object):
     """A class of FAFT client which aggregates some useful functions of SAFT.
 
@@ -55,23 +75,21 @@
         self._chromeos_interface.init(state_dir, log_file='/tmp/faft_log.txt')
         os.chdir(state_dir)
 
-        self._bios_handler = flashrom_handler.FlashromHandler()
-        self._bios_handler.init(saft_flashrom_util,
+        self._bios_handler = LazyFlashromHandlerProxy(
+                                saft_flashrom_util,
                                 self._chromeos_interface,
                                 None,
                                 '/usr/share/vboot/devkeys',
                                 'bios')
-        self._bios_handler.new_image()
 
         self._ec_handler = None
         if not os.system("mosys ec info"):
-            self._ec_handler = flashrom_handler.FlashromHandler()
-            self._ec_handler.init(saft_flashrom_util,
+            self._ec_handler = LazyFlashromHandlerProxy(
+                                  saft_flashrom_util,
                                   self._chromeos_interface,
-                                  'ec_root_key.vbpubk',
+                                  'ec_root_key.vpubk',
                                   '/usr/share/vboot/devkeys',
                                   'ec')
-            self._ec_handler.new_image()
 
 
         self._kernel_handler = kernel_handler.KernelHandler()