普通文本  |  63行  |  1.7 KB

# 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.


# DESCRIPTION :
#
# Hardware test for temp sensor.  The test uses mosys to read temp sensor value
# and check it's in reasonable range.


import re

from autotest_lib.client.bin import test, utils
from autotest_lib.client.common_lib import error


# Reasonable temp range for different temp units.
TEMP_RANGE = {
    'degrees C': (0, 100),
}


class TempSensor(object):
    MOSYS_OUTPUT_RE = re.compile('(\w+)="(.*?)"')

    def __init__(self, name):
        self._name = name

    def get_values(self):
        values = {}
        cmd = 'mosys -k sensor print thermal %s' % self._name
        for kv in self.MOSYS_OUTPUT_RE.finditer(utils.system_output(cmd)):
            key, value = kv.groups()
            if key == 'reading':
                value = int(value)
            values[key] = value
        return values

    def get_units(self):
        return self.get_values()['units']

    def get_reading(self):
        return self.get_values()['reading']


class hardware_Thermal(test.test):
    version = 1

    def run_once(self, temp_sensor_names=['temp0']):
        if not temp_sensor_names:
            raise error.TestError('No temp sensor specified')

        for name in temp_sensor_names:
            ts = TempSensor(name)
            units = ts.get_units()
            try:
                low, high = TEMP_RANGE[units]
            except KeyError:
                raise error.TestError('Unknown temp units of %s' % name)
            if not low <= ts.get_reading() <= high:
                raise error.TestError('Temperature of %s out of range' % name)