# Copyright 2015 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 = "rohitbm@chromium.org, Chrome OS Audio"
NAME = "audio_PowerConsumption.mp3"
TIME = "MEDIUM"
TEST_CATEGORY = "Performance"
TEST_CLASS = "audio"
ATTRIBUTES = "suite:bvt-perbuild"
TEST_TYPE = "server"
DEPENDENCIES = "rpm, power:battery"
BUG_TEMPLATE = {
    "labels": ["OS-Chrome", "Cr-OS-Kernel-Audio"],
}

DOC = """
The test outputs the power consumption for various audio formats.
"""

import logging

from autotest_lib.client.common_lib import error

VIDEO_NAME = "polka_crowd_128kbps_44_1khz.mp3"
CHECKSUM = "7171529bb34c6e17dd163b03aa2b7c9c"

def _run_client_test(machine):
    """Runs client test with battery actively discharging."""
    client = hosts.create_host(machine)
    if not client.has_power():
        raise error.TestError("This test requires RPM support.")

    try:
        client.power_off()
        client_at = autotest.Autotest(client)
        client_at.run_test("audio_PlaybackPower", test_file=VIDEO_NAME,
                           checksum=CHECKSUM)
    finally:
        client.power_on()


job.parallel_on_machines(_run_client_test, machines)
