Home | History | Annotate | Download | only in hardware_Thermal
      1 # Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 
      5 
      6 # DESCRIPTION :
      7 #
      8 # Hardware test for temp sensor.  The test uses mosys to read temp sensor value
      9 # and check it's in reasonable range.
     10 
     11 
     12 import re
     13 
     14 from autotest_lib.client.bin import test, utils
     15 from autotest_lib.client.common_lib import error
     16 
     17 
     18 # Reasonable temp range for different temp units.
     19 TEMP_RANGE = {
     20     'degrees C': (0, 100),
     21 }
     22 
     23 
     24 class TempSensor(object):
     25     MOSYS_OUTPUT_RE = re.compile('(\w+)="(.*?)"')
     26 
     27     def __init__(self, name):
     28         self._name = name
     29 
     30     def get_values(self):
     31         values = {}
     32         cmd = 'mosys -k sensor print thermal %s' % self._name
     33         for kv in self.MOSYS_OUTPUT_RE.finditer(utils.system_output(cmd)):
     34             key, value = kv.groups()
     35             if key == 'reading':
     36                 value = int(value)
     37             values[key] = value
     38         return values
     39 
     40     def get_units(self):
     41         return self.get_values()['units']
     42 
     43     def get_reading(self):
     44         return self.get_values()['reading']
     45 
     46 
     47 class hardware_Thermal(test.test):
     48     version = 1
     49 
     50     def run_once(self, temp_sensor_names=['temp0']):
     51         if not temp_sensor_names:
     52             raise error.TestError('No temp sensor specified')
     53 
     54         for name in temp_sensor_names:
     55             ts = TempSensor(name)
     56             units = ts.get_units()
     57             try:
     58                 low, high = TEMP_RANGE[units]
     59             except KeyError:
     60                 raise error.TestError('Unknown temp units of %s' % name)
     61             if not low <= ts.get_reading() <= high:
     62                 raise error.TestError('Temperature of %s out of range' % name)
     63