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.
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.
Device API `cros.factory.device.thermal`.
This is usually implemented in `/sys` with properties like `thermal_zone`
or command `ectool temps` / `ectool tempsinfo`.
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).',
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).
name: An integer for index of sensor or string for sensor name to read.
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()
if sensors is None:
sensors = [self.thermal.GetMainSensorName()]
values = dict((name, self.GetTemperature(name)) for name in sensors)'Got temperatures: %r', values)
min_temp, max_temp = self.args.temp_range
for name, temperature in values.iteritems():
min_temp <= temperature <= max_temp,
'Abnormal temperature reading on sensor %s: %s' % (name, temperature))