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

from autotest_lib.client.cros.audio import audio_test_data
from autotest_lib.client.cros.chameleon import chameleon_audio_ids
from autotest_lib.server import utils

AUTHOR = "Chrome OS Team"
NAME = "audio_AudioNodeSwitch.HDMI_JACK_USB"
PURPOSE = "Check if correct audio channel selected."
CRITERIA = "This test will fail if expected audio channel is not selected."
TIME = "SHORT"
TEST_CATEGORY = "Functional"
TEST_CLASS = "audio"
TEST_TYPE = "server"
ATTRIBUTES = "suite:chameleon_audio_unstable"
DEPENDENCIES = "audio_box, test_audio_jack_usb_hdmi"

DOC = """
This test remotely tests audio nodes selection.
"""

args_dict = utils.args_to_dict(args)
chameleon_args = hosts.CrosHost.get_chameleon_arguments(args_dict)

def run(machine):
    host = hosts.create_host(machine, chameleon_args=chameleon_args)
    job.run_test("audio_AudioNodeSwitch", host=host, hdmi_node=True,
                 jack_node=True, usb_node=True, tag='HDMI_JACK_USB')
parallel_simple(run, machines)
