1# Copyright (c) 2012 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
5import logging
6
7from autotest_lib.client.common_lib import error
8from autotest_lib.server.cros.faft.firmware_test import FirmwareTest
9
10
11class firmware_ECPeci(FirmwareTest):
12    """
13    Servo based EC PECI test.
14    """
15    version = 1
16
17    # Repeat read count
18    READ_COUNT = 200
19
20    def initialize(self, host, cmdline_args):
21        super(firmware_ECPeci, self).initialize(host, cmdline_args)
22        self.ec.send_command("chan 0")
23
24    def cleanup(self):
25        self.ec.send_command("chan 0xffffffff")
26        super(firmware_ECPeci, self).cleanup()
27
28    def _check_read(self):
29        """Read CPU temperature through PECI.
30
31        Raises:
32          error.TestFail: Raised when read fails.
33        """
34        t = int(self.ec.send_command_get_output("pecitemp",
35                ["CPU temp = (\d+) K"])[0][1])
36        if t < 273 or t > 400:
37            raise error.TestFail("Abnormal CPU temperature %d K" % t)
38
39    def run_once(self):
40        if not self.check_ec_capability(['peci']):
41            raise error.TestNAError("Nothing needs to be tested on this device")
42        logging.info("Reading PECI CPU temperature for %d times.",
43                     self.READ_COUNT)
44        for _ in xrange(self.READ_COUNT):
45            self._check_read()
46