# Copyright (c) 2009 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_IdleServer"
TIME = "SHORT"
TEST_CATEGORY = "Benchmark"
TEST_CLASS = "power"
TEST_TYPE = "server"
DEPENDENCIES = "rpm"

DOC = """
This test first cuts off power to a machine and then measures the battery power
draw at idle.
"""

from autotest_lib.server import utils

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

def run_system_power_idle(machine):
    host = hosts.create_host(machine, servo_args=servo_args)
    if host.has_power():
        host.power_off()

    host_at = autotest.Autotest(host)
    host_test = 'power_Idle'

    host_at.run_test(host_test)

    if host.has_power():
        host.power_on()


(tuple, failures) = utils.form_ntuples_from_machines(machines, 1)

job.parallel_simple(run_system_power_idle, tuple[0], log=False)
