# Copyright 2016 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.

from autotest_lib.server import utils

AUTHOR = "Chrome OS Team"
NAME = "firmware_StandbyPowerConsumption.4hr"
PURPOSE = "Collect power consumption during hibernate."
TIME = "LONG"
TEST_CATEGORY = "Performance"
TEST_CLASS = "firmware"
TEST_TYPE = "server"
ATTRIBUTES = "suite:powerplay"
DEPENDENCIES = "servo, powerplay"

DOC = """
This test collects and reports the power consumtion data during hibernate state.
"""

args_dict = utils.args_to_dict(args)
servo_args = hosts.CrosHost.get_servo_arguments(args_dict)

def run(machine):
    hibernate_length = 14400
    host = hosts.create_host(machine, servo_args=servo_args)
    job.run_test('firmware_StandbyPowerConsumption', host=host,
                 hibernate_length=hibernate_length, cmdline_args=args,
                 tag='4hr')

parallel_simple(run, machines)
