blob: 38c302f43910b57dcd14caeada2e93903645cf72 [file] [log] [blame]
# Copyright 2012 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.
"""Test for temperature sensors control.
Description
-----------
The test uses device API to check if temperature sensors is connected and the
temperature lies in the given range `temp_range`.
Test Procedure
--------------
This is an automated test without user interaction.
Dependency
----------
Device API `cros.factory.device.thermal`.
This is usually implemented in `/sys` with properties like `thermal_zone`
or command `ectool temps` / `ectool tempsinfo`.
Examples
--------
To check if the temperature sensors is connected and temperature is in default
range ([0, 100]), add this in test list::
{
"pytest_name": "thermal_sensors"
}
To check if the temperature is in range [30, 80], add this in test list::
{
"pytest_name": "thermal_sensors",
"args": {
"temp_range": [30, 80]
}
}
"""
import logging
import unittest
import factory_common # pylint: disable=unused-import
from cros.factory.device import device_utils
from cros.factory.utils.arg_utils import Arg
class BoardTempSensorsTest(unittest.TestCase):
"""Tests communication with temperature sensors."""
ARGS = [
Arg('temp_sensor_to_test', (str, list),
'List of temperature sensor(s) to test, "*" for all sensors. '
'Default to test only the main sensor (usually CPU).',
default=None),
Arg('temp_range', list,
'[min_temp, max_temp] in Celsius.', default=[0, 100]),
]
def GetTemperature(self, name):
"""Gets temperature from a reference (name or index).
Args:
name: An integer for index of sensor or string for sensor name to read.
Returns:
Temperature of given sensor.
"""
return self.thermal.GetTemperature(name)
def setUp(self):
self.thermal = device_utils.CreateDUTInterface().thermal
def runTest(self):
sensors = self.args.temp_sensor_to_test
if sensors == '*':
values = self.thermal.GetAllTemperatures()
else:
if sensors is None:
sensors = [self.thermal.GetMainSensorName()]
values = dict((name, self.GetTemperature(name)) for name in sensors)
logging.info('Got temperatures: %r', values)
min_temp, max_temp = self.args.temp_range
for name, temperature in values.iteritems():
self.assertTrue(
min_temp <= temperature <= max_temp,
'Abnormal temperature reading on sensor %s: %s' % (name, temperature))