xref: /aosp_15_r20/external/autotest/server/cros/audio/audio_test.py (revision 9c5db1993ded3edbeafc8092d69fe5de2ee02df7)
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