1*9c5db199SXin Li# Copyright 2015 The Chromium OS Authors. All rights reserved. 2*9c5db199SXin Li# Use of this source code is governed by a BSD-style license that can be 3*9c5db199SXin Li# found in the LICENSE file. 4*9c5db199SXin Li 5*9c5db199SXin Liimport logging 6*9c5db199SXin Li 7*9c5db199SXin Lifrom autotest_lib.client.bin import utils 8*9c5db199SXin Lifrom autotest_lib.client.common_lib import error 9*9c5db199SXin Lifrom autotest_lib.client.cros.chameleon import chameleon_audio_helper 10*9c5db199SXin Lifrom autotest_lib.server import site_utils 11*9c5db199SXin Lifrom autotest_lib.server import test 12*9c5db199SXin Lifrom autotest_lib.server.cros.multimedia import remote_facade_factory 13*9c5db199SXin Lifrom autotest_lib.site_utils import lxc 14*9c5db199SXin Li 15*9c5db199SXin Li 16*9c5db199SXin Liclass AudioTest(test.test): 17*9c5db199SXin Li """Base class for audio tests. 18*9c5db199SXin Li 19*9c5db199SXin Li AudioTest provides basic initialization, setup and warmup check for the 20*9c5db199SXin Li collection of server side audio tests. It is assumed to be run with a 21*9c5db199SXin Li Chameleon audio boards. It is recommended to use this base class for server 22*9c5db199SXin Li side Chameleon audio tests to take advantage of the initialize, setup and 23*9c5db199SXin Li confidence check. 24*9c5db199SXin Li """ 25*9c5db199SXin Li 26*9c5db199SXin Li def initialize(self, host): 27*9c5db199SXin Li """Initialize audio test needed components and do some checks""" 28*9c5db199SXin Li if host.chameleon is None: 29*9c5db199SXin Li raise error.TestError("host.chameleon is None." 30*9c5db199SXin Li "Please check the chameleon of this DUT.") 31*9c5db199SXin Li 32*9c5db199SXin Li self.host = host 33*9c5db199SXin Li self.factory = remote_facade_factory.RemoteFacadeFactory( 34*9c5db199SXin Li host, results_dir=self.resultsdir) 35*9c5db199SXin Li self.widget_factory = chameleon_audio_helper.AudioWidgetFactory( 36*9c5db199SXin Li self.factory, self.host) 37*9c5db199SXin Li self.facade = self.factory.create_audio_facade() 38*9c5db199SXin Li host.chameleon.setup_and_reset(self.resultsdir) 39*9c5db199SXin Li 40*9c5db199SXin Li def setup(self): 41*9c5db199SXin Li """Setup needed audio test requirement before executing main logic.""" 42*9c5db199SXin Li super(AudioTest, self).setup() 43*9c5db199SXin Li audio_test_requirement() 44*9c5db199SXin Li 45*9c5db199SXin Li def warmup(self): 46*9c5db199SXin Li """Warmup for the test before executing main logic of the test.""" 47*9c5db199SXin Li # test.test is an old-style class. 48*9c5db199SXin Li test.test.warmup(self) 49*9c5db199SXin Li 50*9c5db199SXin Li 51*9c5db199SXin Lidef audio_test_requirement(): 52*9c5db199SXin Li """Installs sox and checks it is installed correctly.""" 53*9c5db199SXin Li install_sox() 54*9c5db199SXin Li check_sox_installed() 55*9c5db199SXin Li 56*9c5db199SXin Li 57*9c5db199SXin Lidef install_sox(): 58*9c5db199SXin Li """Install sox command on autotest drone.""" 59*9c5db199SXin Li try: 60*9c5db199SXin Li lxc.install_packages(packages=['sox']) 61*9c5db199SXin Li except error.ContainerError: 62*9c5db199SXin Li logging.info('Can not install sox outside of container.') 63*9c5db199SXin Li 64*9c5db199SXin Li 65*9c5db199SXin Lidef check_sox_installed(): 66*9c5db199SXin Li """Checks if sox is installed. 67*9c5db199SXin Li 68*9c5db199SXin Li @raises: error.TestError if sox is not installed. 69*9c5db199SXin Li 70*9c5db199SXin Li """ 71*9c5db199SXin Li try: 72*9c5db199SXin Li utils.run('sox --help') 73*9c5db199SXin Li logging.info('Found sox executable.') 74*9c5db199SXin Li except error.CmdError: 75*9c5db199SXin Li error_message = 'sox command is not installed.' 76*9c5db199SXin Li if site_utils.is_inside_chroot(): 77*9c5db199SXin Li error_message += ' sudo emerge sox to install sox in chroot' 78*9c5db199SXin Li raise error.TestError(error_message) 79