# Copyright 2017 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 = "chromeos-chameleon"
NAME = "audio_AudioBasicInternalMicrophone.atrus_mic"
PURPOSE = "Remotely controlled USB speaker audio test."
CRITERIA = "Test will fail if the captured audio does not match original file."
TIME = "SHORT"
TEST_CATEGORY = "Functional"
TEST_CLASS = "audio"
TEST_TYPE = "server"
ATTRIBUTES = ("suite:bluestreak-release, suite:bluestreak, "
              "suite:bluestreak-pre-cq")
DEPENDENCIES = "atrus, audio_board, audio_box, chameleon, usb_speaker"
JOB_RETRIES = 3

DOC = """
This test remotely tests atrus speaker's mic audio function.
"""

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


def run_test(machine):
    host = hosts.create_host(machine, chameleon_args=chameleon_args)
    job.run_test("audio_AudioBasicInternalMicrophone", host=host,
            cfm_speaker=True, tag="atrus_mic")

parallel_simple(run_test, machines)
