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
5AUTHOR = "Chrome OS Team"
6NAME = "Power Requirements tests"
7ATTRIBUTES = "suite:power_requirements"
8SUITE = "power_requirements"
9TIME = "LONG"
10TEST_CATEGORY = "Functional"
11TEST_CLASS = "suite"
12TEST_TYPE = "server"
13DEPENDENCIES = "rpm"
14
15DOC = """
16This test suite runs automated power tests that should all pass. These tests
17take a long time (several hours) to run and are intended to ensure that the DUT
18complies with the power subsection of our CrOS Requirements doc.
19
20Current tests with runtimes are:
21  power_BatteryCharge : <= 3 hours
22  power_Standby       : 12 hours
23
24"""
25# TODO(tbroch) Deprecate this control file when SUITES= mechanism detailed @
26#    https://sites.google.com/a/chromium.org/dev/chromium-os/testing/test-suites
27#    has ability to assure power states pre/post conditions.
28from autotest_lib.server import site_host_attributes
29from autotest_lib.client.common_lib import error
30
31def _run_client_test(machine):
32    client = hosts.create_host(machine)
33    client_attributes = site_host_attributes.HostAttributes(machine)
34    client_at = autotest.Autotest(client)
35    if client.has_power():
36        client.power_on()
37    else:
38        raise error.TestNAError("No power switch configured")
39
40    # TODO(tbroch): Add power_Standby here once there's a mechanism to postpone
41    # autotest server from checking that DUT is still alive via network
42
43    # Run the full 60/20/10/10 load test, draining a full battery
44    client_at.run_test('power_BatteryCharge', percent_target_charge=100,
45                       max_run_time=60*60*6, tag='CHARGE_100')
46    client.power_off()
47    try:
48        if hasattr(client_attributes, 'wifi'):
49            ap, sec, pw = client_attributes.wifi.split(',')
50            client_at.run_test('power_LoadTest', loop_count=12, loop_time=3600,
51                               force_wifi=True, wifi_ap=ap, wifi_sec=sec,
52                               wifi_pw=pw, tag='WIFI_full')
53        else:
54            client_at.run_test('power_LoadTest', loop_count=12, loop_time=3600,
55                               check_network=False, tag='WIRED_full')
56    finally:
57        client.power_on()
58
59    # From client/site_tests/suite_HWQual/control.battery_charge_time
60    max_hours = 3
61    percent_charge_delta = 94.0
62    time_limit = max_hours * 60 * 60 * percent_charge_delta / 100.0
63    # battery must be at least 80% of design capacity
64    percent_battery_wear_allowed = .20
65
66    client_at.run_test('power_BatteryCharge', tag='full',
67                 max_run_time=time_limit,
68                 percent_charge_to_add=100,
69                 percent_initial_charge_max=5,
70                 use_design_charge_capacity=False,
71                 constraints=[
72                     '1.0 - ah_charge_full / ah_charge_full_design <= %f' %
73                         percent_battery_wear_allowed,
74                     'percent_final_charge - percent_initial_charge >= %f' %
75                         percent_charge_delta,
76                 ])
77
78job.parallel_on_machines(_run_client_test, machines)
79