# Copyright 2015 The ChromiumOS Authors
# 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

NAME = "audio_AudioNodeSwitch.USB"
METADATA = {
    "contacts": ["chromeos-audio-bugs@google.com"],
    "bug_component": "b:875558",
    "criteria": "This test will fail if the audio node is not as expected.",
    "doc" : "Tests selection of USB audio node"
}
#ATTRIBUTES = "suite:audio_advanced"
TEST_TYPE = "server"
DEPENDENCIES = "audio_box, test_usbaudio, chameleon_state:WORKING"

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, usb_node=True, tag='USB')
parallel_simple(run, machines)
