# Copyright 2018 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_Standby.6min"
TIME = "SHORT"
TEST_CATEGORY = "Benchmark"
TEST_CLASS = "power"
TEST_TYPE = "client"

DOC = """
This test measures the power draw during suspend.

Test uses RTC wake to transition from suspend to S0 every sample_hours for a
total standby time of test_hours.  The suspend to S0 transitions are added to
  1. Validate battery use
  2. Guarantee that suspend was maintained (no external/false wake)
  3. Create transitions which more closely model user's interaction.

The 5 minutes version is intended to use with power measurement telemetry device
as the battery gas gauge would not be accurate enough to measure power this low.
"""

args_dict = utils.args_to_dict(args)
pdash_note = args_dict.get('pdash_note', '')
job.run_test('power_Standby', sample_hours=0.1, test_hours=0.1,
             tag=NAME.split('.')[1], pdash_note=pdash_note)
