# 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 audio_test_utils
from autotest_lib.client.cros.chameleon import chameleon_audio_ids
from autotest_lib.server import utils

NAME = "audio_AudioAfterReboot.external_mic"
METADATA = {
    "contacts": ["chromeos-audio-bugs@google.com"],
    "bug_component": "b:875558",
    "criteria": "This test will fail if the captured audio does not match original file.",
    "doc" : "Tests external_mic audio function against DUT after reboot",
    'variant_category': '{"name": "Audio_SoC_Codec_Amp"}',
}
TEST_TYPE = "server"
ATTRIBUTES = "suite:audio_essential"
DEPENDENCIES = 'audio_cable, chameleon_state:WORKING'
JOB_RETRIES = 1

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)

    # TODO(b/279861793): use the correct binder after migration is completed.
    use_pi_testbed = host.chameleon.get_platform() == "RASPI"
    bind_from_arg = (chameleon_audio_ids.ChameleonIds.USBOUT if use_pi_testbed
                   else chameleon_audio_ids.ChameleonIds.LINEOUT)

    job.run_test("audio_AudioAfterReboot", host=host,
                 golden_data=(audio_test_data.SIMPLE_FREQUENCY_TEST_FILE, 2000),
                 bind_from=bind_from_arg,
                 bind_to=chameleon_audio_ids.CrosIds.EXTERNAL_MIC,
                 audio_nodes=([audio_test_utils.get_headphone_node(host)],
                              ['MIC']),
                 tag = "external_mic",
                 blocked_boards=['lars',    # Pending fix for b/147647051
                                 'lars-kernelnext',
                                 'caroline',
                                 'chell']
                 )

parallel_simple(run, machines)
