13dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao# Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
23dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao# Use of this source code is governed by a BSD-style license that can be
33dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao# found in the LICENSE file.
43dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao
5039dee0560d0bf5526fdde42dd4595db7ddd0e87Tan Gaoimport datetime
63dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gaofrom autotest_lib.client.bin import test
7039dee0560d0bf5526fdde42dd4595db7ddd0e87Tan Gaofrom autotest_lib.client.common_lib import error, smogcheck_tpm, smogcheck_util
83dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao
93dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao
103dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gaoclass hardware_TPMtspi(test.test):
113dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao    version = 1
123dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao
133dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao    def setup(self):
14039dee0560d0bf5526fdde42dd4595db7ddd0e87Tan Gao        smogcheck_util.enableI2C()
153dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao
163dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao    def _prepareTpmController(self):
173dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao        """Prepare a TpmController instance for use.
183dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao
193dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao        Returns:
203dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao          an operational TpmControler instance, ready to use.
213dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao        """
223dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao        try:
233dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao            return smogcheck_tpm.TpmController()
243dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao        except smogcheck_tpm.SmogcheckError, e:
253dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao            raise error.TestFail('Error creating a TpmController: %s', e)
263dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao
273dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao    def run_once(self):
283dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao        self.tpm_obj = self._prepareTpmController()
293dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao
303dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao        start_time = datetime.datetime.now()
313dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao        try:
323dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao            self.tpm_obj.setupContext()
333dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao            self.tpm_obj.getTpmVersion()
343dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao            self.tpm_obj.runTpmSelfTest()
353dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao
363dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao            # TODO(tgao): uncomment to enable.
373dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao            #self.tpm_obj.takeTpmOwnership()
383dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao
393dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao            # TODO(tgao): uncomment to enable.
403dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao            #self.tpm_obj.clearTpm()
413dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao
423dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao            # TODO(tgao): uncomment to enable.
433dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao            #self.tpm_obj.setTpmActive('status')
443dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao
453dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao            # TODO(tgao): uncomment to enable.
463dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao            #self.tpm_obj.setTpmActive('deactivate')
473dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao
483dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao            # TODO(tgao): uncomment to enable.
493dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao            #self.tpm_obj.setTpmActive('activate')
503dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao
513dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao            # TODO(tgao): uncomment to enable.
523dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao            #self.tpm_obj.setTpmActive('temp')
533dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao
543dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao            # TODO(tgao): uncomment to enable.
553dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao            #self.tpm_obj.setTpmClearable('status')
563dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao
573dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao            # TODO(tgao): uncomment to enable.
583dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao            #self.tpm_obj.setTpmClearable('owner')
593dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao
603dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao            # TODO(tgao): uncomment to enable.
613dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao            #self.tpm_obj.setTpmClearable('force')
623dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao
633dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao        except smogcheck_tpm.SmogcheckError, e:
643dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao            raise error.TestFail('Error: %r' % e)
653dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao        finally:
663dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao            # Close TPM context
673dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao            if self.tpm_obj.closeContext():
683dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao                raise error.TestFail('Error closing tspi context')
693dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao
703dc542c25031637adcdfe164d04502c6c5cea0d2Tan Gao        end_time = datetime.datetime.now()
71039dee0560d0bf5526fdde42dd4595db7ddd0e87Tan Gao        smogcheck_util.computeTimeElapsed(end_time, start_time)
72