FAFT: Initialize the TPM handler only on TPM related methods

Initializing the TPM handler stops tcsd/trunksd and affects other
systems which depend on them. Moving the initializing step to TPM
related methods by reusing the LazyInitHandlerProxy class.
Also restarted tcsd/trunksd when done.

FAFT running on Android system will not run the TPM related tests.
So don't care about the Android system.

CQ-DEPEND=CL:436245
BUG=chrome-os-partner:62150
TEST=Ran a FAFT test and called the TPM related methods manually.

Change-Id: Ifcf0ee858281a7d561ff39a28061832fb22d1217
Reviewed-on: https://chromium-review.googlesource.com/435888
Commit-Ready: Wai-Hong Tam <waihong@google.com>
Tested-by: Wai-Hong Tam <waihong@google.com>
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Reviewed-by: Andrey Pronin <apronin@chromium.org>
diff --git a/client/cros/faft/rpc_functions.py b/client/cros/faft/rpc_functions.py
index f07def6..47d2df6 100755
--- a/client/cros/faft/rpc_functions.py
+++ b/client/cros/faft/rpc_functions.py
@@ -41,19 +41,19 @@
     return wrapper
 
 
-class LazyFlashromHandlerProxy:
-    """Proxy of FlashromHandler for lazy initialization."""
+class LazyInitHandlerProxy:
+    """Proxy of a given handler_class for lazy initialization."""
     _loaded = False
     _obj = None
 
-    def __init__(self, *args, **kargs):
+    def __init__(self, handler_class, *args, **kargs):
+        self._handler_class = handler_class
         self._args = args
         self._kargs = kargs
 
     def _load(self):
-        self._obj = flashrom_handler.FlashromHandler()
+        self._obj = self._handler_class()
         self._obj.init(*self._args, **self._kargs)
-        self._obj.new_image()
         self._loaded = True
 
     def __getattr__(self, name):
@@ -100,21 +100,23 @@
         self._os_if.init(state_dir, log_file=self._log_file)
         os.chdir(state_dir)
 
-        self._bios_handler = LazyFlashromHandlerProxy(
-                                saft_flashrom_util,
-                                self._os_if,
-                                None,
-                                '/usr/share/vboot/devkeys',
-                                'bios')
+        self._bios_handler = LazyInitHandlerProxy(
+                flashrom_handler.FlashromHandler,
+                saft_flashrom_util,
+                self._os_if,
+                None,
+                '/usr/share/vboot/devkeys',
+                'bios')
 
         self._ec_handler = None
         if self._os_if.run_shell_command_get_status('mosys ec info') == 0:
-            self._ec_handler = LazyFlashromHandlerProxy(
-                                  saft_flashrom_util,
-                                  self._os_if,
-                                  'ec_root_key.vpubk',
-                                  '/usr/share/vboot/devkeys',
-                                  'ec')
+            self._ec_handler = LazyInitHandlerProxy(
+                    flashrom_handler.FlashromHandler,
+                    saft_flashrom_util,
+                    self._os_if,
+                    'ec_root_key.vpubk',
+                    '/usr/share/vboot/devkeys',
+                    'ec')
         else:
             self._os_if.log('No EC is reported by mosys.')
 
@@ -123,12 +125,9 @@
                                   dev_key_path='/usr/share/vboot/devkeys',
                                   internal_disk=True)
 
-        # FIXME(waihong): Add back the TPM support.
-        if not self._os_if.is_android:
-            self._tpm_handler = tpm_handler.TpmHandler()
-            self._tpm_handler.init(self._os_if)
-        else:
-            self._tpm_handler = None
+        self._tpm_handler = LazyInitHandlerProxy(
+                tpm_handler.TpmHandler,
+                self._os_if)
 
         self._cgpt_handler = cgpt_handler.CgptHandler(self._os_if)