# 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 = "harpreet@chromium.org"
NAME = "enterprise_CFM_VolumeChange.internal_speaker"
TIME = "SHORT"
TEST_CATEGORY = "Functional"
TEST_CLASS = "enterprise"
TEST_TYPE = "server"
ATTRIBUTES = "suite:hotrod"
DEPENDENCIES = "internal_speaker"
JOB_RETRIES = 3

DOC = """
This test clears the TPM and enables the appropriate usb port on the servo
before kicking off a client side test that enrolls the device into CFM. Once
the device in enrolled, a different client test is kicked off to change the
hangouts volume using hotrod kiosk app JS hooks. These changes are then
validated against the cras_test_client output to make sure the volume matches.
"""

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

def run_test(machine):
    host = hosts.create_host(machine, servo_args=servo_args)
    repeat = int(args_dict.get('repeat', 10))
    cmd = "cras_test_client --dump_server_info | awk '/Output Nodes:/," \
          "/Input Devices:/' | grep -E 'INTERNAL_*' | awk -v N=3 '{print $N}'"

    job.run_test('enterprise_CFM_VolumeChange', host=host, repeat=repeat,
            cmd=cmd, tag="internal_speaker")


parallel_simple(run_test, machines)
