| # Copyright (c) 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. |
| |
| AUTHOR = "Chrome OS Team" |
| NAME = "Power Requirements tests" |
| ATTRIBUTES = "suite:power_requirements" |
| TIME = "LONG" |
| TEST_CATEGORY = "Functional" |
| TEST_CLASS = "suite" |
| TEST_TYPE = "server" |
| DEPENDENCIES = "rpm" |
| |
| DOC = """ |
| This test suite runs automated power tests that should all pass. These tests |
| take a long time (several hours) to run and are intended to ensure that the DUT |
| complies with the power subsection of our CrOS Requirements doc. |
| |
| Current tests with runtimes are: |
| power_BatteryCharge : <= 3 hours |
| power_Standby : 12 hours |
| |
| """ |
| # TODO(tbroch) Deprecate this control file when SUITES= mechanism detailed @ |
| # https://sites.google.com/a/chromium.org/dev/chromium-os/testing/test-suites |
| # has ability to assure power states pre/post conditions. |
| from autotest_lib.server import site_host_attributes |
| from autotest_lib.client.common_lib import error |
| |
| def _run_client_test(machine): |
| client = hosts.create_host(machine) |
| client_attributes = site_host_attributes.HostAttributes(client.hostname) |
| client_at = autotest.Autotest(client) |
| if client.has_power(): |
| client.power_on() |
| else: |
| raise error.TestNAError("No power switch configured") |
| |
| # TODO(tbroch): Add power_Standby here once there's a mechanism to postpone |
| # autotest server from checking that DUT is still alive via network |
| |
| # Run the full 60/20/10/10 load test, draining a full battery |
| client_at.run_test('power_BatteryCharge', percent_target_charge=100, |
| max_run_time=60*60*6, tag='CHARGE_100') |
| try: |
| client.power_off() |
| if hasattr(client_attributes, 'wifi'): |
| ap, sec, pw = client_attributes.wifi.split(',') |
| client_at.run_test('power_LoadTest', loop_count=12, loop_time=3600, |
| force_wifi=True, wifi_ap=ap, wifi_sec=sec, |
| wifi_pw=pw, tag='WIFI_full') |
| else: |
| client_at.run_test('power_LoadTest', loop_count=12, loop_time=3600, |
| check_network=False, tag='WIRED_full') |
| finally: |
| client.power_on() |
| |
| # From client/site_tests/suite_HWQual/control.battery_charge_time |
| max_hours = 3 |
| percent_charge_delta = 94.0 |
| time_limit = max_hours * 60 * 60 * percent_charge_delta / 100.0 |
| # battery must be at least 80% of design capacity |
| percent_battery_wear_allowed = .20 |
| |
| client_at.run_test('power_BatteryCharge', tag='full', |
| max_run_time=time_limit, |
| percent_charge_to_add=100, |
| percent_initial_charge_max=5, |
| use_design_charge_capacity=False, |
| constraints=[ |
| '1.0 - ah_charge_full / ah_charge_full_design <= %f' % |
| percent_battery_wear_allowed, |
| 'percent_final_charge - percent_initial_charge >= %f' % |
| percent_charge_delta, |
| ]) |
| |
| job.parallel_on_machines(_run_client_test, machines) |