You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
2.5 KiB
76 lines
2.5 KiB
# 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.
|
|
|
|
"""A Python utility library for TPM module testing."""
|
|
|
|
import logging, subprocess, time
|
|
from autotest_lib.client.common_lib import error
|
|
|
|
|
|
def runInSubprocess(args, rc_list=None):
|
|
"""Run a command in subprocess and return stdout.
|
|
|
|
Args:
|
|
args: a list of string, command to run.
|
|
rc_list: a list of int, acceptable return code values.
|
|
|
|
Returns:
|
|
out: a string, stdout of the command executed.
|
|
err: a string, stderr of the command executed, or None.
|
|
|
|
Raises:
|
|
RuntimeError: if subprocess return code is non-zero and not in rc_list.
|
|
"""
|
|
if rc_list is None:
|
|
rc_list = []
|
|
|
|
# Sleep for 1 second so we don't overwhelm I2C bus with too many commands
|
|
time.sleep(1)
|
|
logging.debug('runInSubprocess args = %r; rc_list = %r', args, rc_list)
|
|
proc = subprocess.Popen(args,
|
|
stdout=subprocess.PIPE,
|
|
stderr=subprocess.PIPE)
|
|
out, err = proc.communicate()
|
|
logging.error('runInSubprocess %s: out=%r, err=%r', args[0], out, err)
|
|
if proc.returncode and proc.returncode not in rc_list:
|
|
raise RuntimeError('runInSubprocess %s failed with returncode %d: %s' %
|
|
(args[0], proc.returncode, out))
|
|
return str(out), str(err)
|
|
|
|
|
|
def enableI2C():
|
|
"""Enable i2c-dev so i2c-tools can be used.
|
|
|
|
Dependency: 'i2cdetect' is a command from 'i2c-tools' package, which comes
|
|
with Chrom* OS image and is available from inside chroot.
|
|
|
|
Raises:
|
|
TestFail: if i2c-dev can't be enabled.
|
|
"""
|
|
args = ['i2cdetect', '-l']
|
|
out, _ = runInSubprocess(args)
|
|
if not out:
|
|
logging.info('i2c-dev disabled. Enabling it with modprobe')
|
|
out, _ = runInSubprocess(['modprobe', 'i2c-dev'])
|
|
if out:
|
|
raise error.TestFail('Error enable i2c-dev: %s' % out)
|
|
out, _ = runInSubprocess(args)
|
|
logging.info('i2c-dev ready to go:\n%s', out)
|
|
|
|
|
|
def computeTimeElapsed(end, start):
|
|
"""Computes time difference in microseconds.
|
|
|
|
Args:
|
|
end: a datetime.datetime() object, end timestamp.
|
|
start: a datetime.datetime() object, start timestamp.
|
|
|
|
Returns:
|
|
usec: an int, difference between end and start in microseconds.
|
|
"""
|
|
t = end - start
|
|
usec = 1000000 * t.seconds + t.microseconds
|
|
logging.info('Elapsed time = %d usec', usec)
|
|
return usec
|