# 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.client.common_lib import utils
from autotest_lib.server.brillo.feedback import client_factory


AUTHOR = 'garnold, ralphnathan'
NAME = 'brillo_FileOpenSLESPlaybackAudioTest'
TIME = 'SHORT'
TEST_CATEGORY = 'Functional'
TEST_TYPE = 'Server'
ATTRIBUTES = 'suite:brillo-audio'
SUITE = 'brillo-audio'

DOC = """
Tests audio playback using OpenSL ES and a file on a Brillo device.

Test arguments:

    feedback=NAME  Name of the feedback client implementation to use. See
                   server.brillo.feedback.client_factory for supported values.
                   Default: 'loop'.
"""

TEST_ARG_NAMES = ()
args_dict = utils.args_to_dict(args)


def run(machine):
    test_args = {name: args_dict[name] for name in TEST_ARG_NAMES
                 if name in args_dict}
    fb_client_name = args_dict.get('feedback', 'loop')
    fb_client = client_factory.get_audio_client(fb_client_name)
    job.run_test('brillo_PlaybackAudioTest',
                 host=hosts.create_host(machine),
                 fb_client=fb_client,
                 playback_method='opensles',
                 use_file='true',
                 **test_args)


parallel_simple(run, machines)
