207 lines
8.3 KiB
Python
207 lines
8.3 KiB
Python
# Copyright (c) 2011 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.
|
|
|
|
import datetime, logging, subprocess, time
|
|
from autotest_lib.client.bin import test
|
|
from autotest_lib.client.common_lib import error, smogcheck_ttci, smogcheck_util
|
|
|
|
|
|
class hardware_TPMttci(test.test):
|
|
version = 1
|
|
|
|
def setup(self):
|
|
smogcheck_util.enableI2C()
|
|
self.ttci_obj = None
|
|
|
|
def _prepareTtciController(self):
|
|
"""Prepare PcaController and InaController instances for use.
|
|
|
|
Returns:
|
|
an operational PcaController instance, ready to use.
|
|
an operational InaController instance, ready to use.
|
|
|
|
Raises:
|
|
TestFail: if error creating a new TtciController instance.
|
|
"""
|
|
try:
|
|
self.ttci_obj = smogcheck_ttci.TtciController()
|
|
except smogcheck_ttci.TtciError, e:
|
|
raise error.TestFail('Error creating a TtciController: %s' % e)
|
|
|
|
def _getMainPowerStatus(self):
|
|
"""Wraps TTCI_Get_Main_Power_Status().
|
|
|
|
Raises:
|
|
TestFail: if error getting main power status.
|
|
"""
|
|
ret, status = self.ttci_obj.TTCI_Get_Main_Power_Status()
|
|
if ret:
|
|
raise error.TestFail('TTCI_Get_Main_Power_Status() error: %s' %
|
|
self.ttci_obj.err)
|
|
logging.info('Main Power status = %r', status)
|
|
|
|
|
|
def _getBackupPowerStatus(self):
|
|
"""Wraps TTCI_Get_Backup_Power_Status().
|
|
|
|
Raises:
|
|
TestFail: if error getting backup power status.
|
|
"""
|
|
ret, status = self.ttci_obj.TTCI_Get_Backup_Power_Status()
|
|
if ret:
|
|
raise error.TestFail('TTCI_Get_Backup_Power_Status() error: %s' %
|
|
self.ttci_obj.err)
|
|
logging.info('Backup Power status = %r', status)
|
|
|
|
|
|
def _getTPMPhysicalPresenceStatus(self):
|
|
"""Wraps TTCI_Get_PP_Status().
|
|
|
|
Raises:
|
|
TestFail: if error getting Physical Presence status.
|
|
"""
|
|
ret, status = self.ttci_obj.TTCI_Get_PP_Status()
|
|
if ret:
|
|
raise error.TestFail('TTCI_Get_PP_Status() error: %s' %
|
|
self.ttci_obj.err)
|
|
logging.info('PP status = %r', status)
|
|
|
|
|
|
def _getTpmI2cStatus(self):
|
|
"""Wraps TTCI_Get_TPM_I2C_Status().
|
|
|
|
Raises:
|
|
TestFail: if error getting TPM I2C status.
|
|
"""
|
|
ret, status = self.ttci_obj.TTCI_Get_TPM_I2C_Status()
|
|
if ret:
|
|
raise error.TestFail('TTCI_Get_TPM_I2C_Status() error: %s' %
|
|
self.ttci_obj.err)
|
|
logging.info('TPM I2C status = %r', status)
|
|
|
|
def run_once(self):
|
|
# Initialize modules on TTCI
|
|
self._prepareTtciController()
|
|
|
|
start_time = datetime.datetime.now()
|
|
# Turn on LEDs sequentially
|
|
if self.ttci_obj.TTCI_Set_LEDs(0x1, failure=False, warning=False):
|
|
raise error.TestFail('TTCI_Set_LEDs() error: %s' %
|
|
self.ttci_obj.err)
|
|
|
|
if self.ttci_obj.TTCI_Set_LEDs(0x3, failure=False, warning=False):
|
|
raise error.TestFail('TTCI_Set_LEDs() error: %s' %
|
|
self.ttci_obj.err)
|
|
|
|
if self.ttci_obj.TTCI_Set_LEDs(0x7, failure=False, warning=False):
|
|
raise error.TestFail('TTCI_Set_LEDs() error: %s' %
|
|
self.ttci_obj.err)
|
|
|
|
if self.ttci_obj.TTCI_Set_LEDs(0xf, failure=False, warning=False):
|
|
raise error.TestFail('TTCI_Set_LEDs() error: %s' %
|
|
self.ttci_obj.err)
|
|
|
|
if self.ttci_obj.TTCI_Set_LEDs(0xf, failure=False, warning=True):
|
|
raise error.TestFail('TTCI_Set_LEDs() error: %s' %
|
|
self.ttci_obj.err)
|
|
|
|
if self.ttci_obj.TTCI_Set_LEDs(0xf, failure=True, warning=True):
|
|
raise error.TestFail('TTCI_Set_LEDs() error: %s' %
|
|
self.ttci_obj.err)
|
|
|
|
# Turn off LEDs sequentially
|
|
if self.ttci_obj.TTCI_Set_LEDs(0xf, failure=False, warning=True):
|
|
raise error.TestFail('TTCI_Set_LEDs() error: %s' %
|
|
self.ttci_obj.err)
|
|
|
|
if self.ttci_obj.TTCI_Set_LEDs(0xf, failure=False, warning=False):
|
|
raise error.TestFail('TTCI_Set_LEDs() error: %s' %
|
|
self.ttci_obj.err)
|
|
|
|
if self.ttci_obj.TTCI_Set_LEDs(0x7, failure=False, warning=False):
|
|
raise error.TestFail('TTCI_Set_LEDs() error: %s' %
|
|
self.ttci_obj.err)
|
|
|
|
if self.ttci_obj.TTCI_Set_LEDs(0x3, failure=False, warning=False):
|
|
raise error.TestFail('TTCI_Set_LEDs() error: %s' %
|
|
self.ttci_obj.err)
|
|
|
|
if self.ttci_obj.TTCI_Set_LEDs(0x1, failure=False, warning=False):
|
|
raise error.TestFail('TTCI_Set_LEDs() error: %s' %
|
|
self.ttci_obj.err)
|
|
|
|
if self.ttci_obj.TTCI_Set_LEDs(0x0, failure=False, warning=False):
|
|
raise error.TestFail('TTCI_Set_LEDs() error: %s' %
|
|
self.ttci_obj.err)
|
|
|
|
# Get bit status
|
|
ret, status = self.ttci_obj.TTCI_Get_Switch_Status()
|
|
if ret:
|
|
raise error.TestFail('TTCI_Get_Switch_Status() error: %s' %
|
|
self.ttci_obj.err)
|
|
logging.info('Switch status = %r', status)
|
|
|
|
ret, bit_value, failure, warning = self.ttci_obj.TTCI_Get_LED_Status()
|
|
if ret:
|
|
raise error.TestFail('TTCI_Get_LED_Status() error: %s' %
|
|
self.ttci_obj.err)
|
|
logging.info('LED status: bit_value=%r, failure=%r, warning=%r',
|
|
bit_value, failure, warning)
|
|
|
|
# Test Main Power
|
|
self._getMainPowerStatus()
|
|
if self.ttci_obj.TTCI_Set_Main_Power_Control(turn_on=True):
|
|
raise error.TestFail('TTCI_Set_Main_Power_Control() error: %s' %
|
|
self.ttci_obj.err)
|
|
self._getMainPowerStatus()
|
|
if self.ttci_obj.TTCI_Set_Main_Power_Control(turn_on=False):
|
|
raise error.TestFail('TTCI_Set_Main_Power_Control() error: %s' %
|
|
self.ttci_obj.err)
|
|
self._getMainPowerStatus()
|
|
|
|
# Test Backup Power
|
|
self._getBackupPowerStatus()
|
|
if self.ttci_obj.TTCI_Set_Backup_Power_Control(turn_on=True):
|
|
raise error.TestFail('TTCI_Set_Backup_Power_Control() error: %s' %
|
|
self.ttci_obj.err)
|
|
self._getBackupPowerStatus()
|
|
if self.ttci_obj.TTCI_Set_Backup_Power_Control(turn_on=False):
|
|
raise error.TestFail('TTCI_Set_Backup_Power_Control() error: %s' %
|
|
self.ttci_obj.err)
|
|
self._getBackupPowerStatus()
|
|
|
|
# Test Physical Presence
|
|
self._getTPMPhysicalPresenceStatus()
|
|
if self.ttci_obj.TTCI_Set_PP_Control(turn_on=True):
|
|
raise error.TestFail('TTCI_Set_PP_Control() error: %s' %
|
|
self.ttci_obj.err)
|
|
self._getTPMPhysicalPresenceStatus()
|
|
if self.ttci_obj.TTCI_Set_PP_Control(turn_on=False):
|
|
raise error.TestFail('TTCI_Set_PP_Control() error: %s' %
|
|
self.ttci_obj.err)
|
|
self._getTPMPhysicalPresenceStatus()
|
|
|
|
# Test TPM I2C bit
|
|
self._getTpmI2cStatus()
|
|
if self.ttci_obj.TTCI_Set_TPM_I2C_Control(turn_on=True):
|
|
raise error.TestFail('TTCI_Set_TPM_I2C_Control() error: %s' %
|
|
self.ttci_obj.err)
|
|
self._getTpmI2cStatus()
|
|
if self.ttci_obj.TTCI_Set_TPM_I2C_Control(turn_on=False):
|
|
raise error.TestFail('TTCI_Set_TPM_I2C_Control() error: %s' %
|
|
self.ttci_obj.err)
|
|
self._getTpmI2cStatus()
|
|
|
|
# Test Reset
|
|
if self.ttci_obj.TTCI_Set_Reset_Control(turn_on=True):
|
|
raise error.TestFail('TTCI_Set_TPM_I2C_Control() error: %s' %
|
|
self.ttci_obj.err)
|
|
|
|
if self.ttci_obj.TTCI_Set_Reset_Control(turn_on=False):
|
|
raise error.TestFail('TTCI_Set_TPM_I2C_Control() error: %s' %
|
|
self.ttci_obj.err)
|
|
|
|
end_time = datetime.datetime.now()
|
|
smogcheck_util.computeTimeElapsed(end_time, start_time)
|