| # 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. |
| |
| import logging |
| import os |
| |
| from autotest_lib.client.bin import utils |
| from autotest_lib.client.common_lib import error |
| from autotest_lib.client.cros import constants |
| from autotest_lib.server import site_utils |
| from autotest_lib.server import test |
| from autotest_lib.server.cros.multimedia import remote_facade_factory |
| from autotest_lib.site_utils import lxc |
| |
| |
| class AudioTest(test.test): |
| """Base class for audio tests. |
| |
| AudioTest provides a common warmup() function for the collection |
| of audio tests. |
| It is not mandatory to use this base class for audio tests, it is for |
| convenience only. |
| |
| """ |
| |
| def warmup(self): |
| """Warmup for the test before executing main logic of the test.""" |
| # test.test is an old-style class. |
| test.test.warmup(self) |
| audio_test_requirement() |
| |
| |
| def create_remote_facade_factory(self, host, no_chrome=False): |
| """Creates a remote facade factory to access multimedia server. |
| |
| @param host: A CrosHost object to access Cros device. |
| @param no_chrome: Don't start Chrome by default. |
| |
| @returns: A RemoteFacadeFactory object to create different facade for |
| different functionalities provided by multimedia server. |
| |
| """ |
| return create_remote_facade_factory(host, self.resultsdir, no_chrome) |
| |
| |
| def create_remote_facade_factory(host, result_dir, no_chrome=False): |
| """Creates a remote facade factory to access multimedia server. |
| |
| @param host: A CrosHost object to access Cros device. |
| @param result_dir: A directory to store multimedia server init log. |
| @param no_chrome: Don't start Chrome by default. |
| |
| @returns: A RemoteFacadeFactory object to create different facade for |
| different functionalities provided by multimedia server. |
| |
| """ |
| try: |
| factory = remote_facade_factory.RemoteFacadeFactory(host, no_chrome) |
| finally: |
| host.get_file( |
| constants.MULTIMEDIA_XMLRPC_SERVER_LOG_FILE, |
| os.path.join( |
| result_dir, |
| 'multimedia_xmlrpc_server.log.init')) |
| return factory |
| |
| |
| def audio_test_requirement(): |
| """Installs sox and checks it is installed correctly.""" |
| install_sox() |
| check_sox_installed() |
| |
| |
| def install_sox(): |
| """Install sox command on autotest drone.""" |
| try: |
| lxc.install_package('sox') |
| except error.ContainerError: |
| logging.info('Can not install sox outside of container.') |
| |
| |
| def check_sox_installed(): |
| """Checks if sox is installed. |
| |
| @raises: error.TestError if sox is not installed. |
| |
| """ |
| try: |
| utils.run('sox --help') |
| logging.info('Found sox executable.') |
| except error.CmdError: |
| error_message = 'sox command is not installed.' |
| if site_utils.is_inside_chroot(): |
| error_message += ' sudo emerge sox to install sox in chroot' |
| raise error.TestError(error_message) |