74 lines
3.1 KiB
Python
74 lines
3.1 KiB
Python
# Copyright 2020 The Chromium 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 time
|
|
|
|
from autotest_lib.client.bin import test
|
|
from autotest_lib.client.bin import utils
|
|
from autotest_lib.client.common_lib import error
|
|
from autotest_lib.client.common_lib.cros import chrome
|
|
from autotest_lib.client.cros import constants as cros_constants
|
|
from autotest_lib.client.cros.audio import cras_utils
|
|
from autotest_lib.client.cros.multimedia import audio_facade_native
|
|
|
|
class audio_CrasGetNodes(test.test):
|
|
"""Verifies dbus GetNodes API of CRAS."""
|
|
version = 1
|
|
|
|
ALOOP_CRAS_NODE_TYPE = 'ALSA_LOOPBACK'
|
|
ALOOP_MODULE_NAME = 'snd-aloop'
|
|
|
|
def run_once(self):
|
|
"""Entry point of this test."""
|
|
# Check CRAS server is alive. If not, restart it and wait a second to
|
|
# get server ready.
|
|
if utils.get_service_pid('cras') == 0:
|
|
logging.debug('CRAS server is down. Restart it.')
|
|
utils.start_service('cras', ignore_status=True)
|
|
time.sleep(1)
|
|
|
|
utils.load_module(self.ALOOP_MODULE_NAME)
|
|
|
|
try:
|
|
with chrome.Chrome(
|
|
extension_paths=[cros_constants.AUDIO_TEST_EXTENSION],
|
|
autotest_ext=True) as cr:
|
|
audio_facade = audio_facade_native.AudioFacadeNative(cr)
|
|
audio_facade.set_chrome_active_node_type(
|
|
self.ALOOP_CRAS_NODE_TYPE, self.ALOOP_CRAS_NODE_TYPE)
|
|
|
|
# Checks active output and input node types are correct.
|
|
active_output_types, active_input_types = (
|
|
cras_utils.get_selected_node_types())
|
|
if len(active_output_types) != 1:
|
|
raise error.TestFail(
|
|
'Length of active output types is not 1, got: %d',
|
|
len(active_output_types))
|
|
if active_output_types[0] != self.ALOOP_CRAS_NODE_TYPE:
|
|
raise error.TestFail(
|
|
'Active output device is not %s, got: %d',
|
|
self.ALOOP_CRAS_NODE_TYPE, active_output_types[0])
|
|
if len(active_input_types) != 1:
|
|
raise error.TestFail(
|
|
'Length of active input types is not 1, got: %d',
|
|
len(active_input_types))
|
|
if active_input_types[0] != self.ALOOP_CRAS_NODE_TYPE:
|
|
raise error.TestFail(
|
|
'Active input device is not %s, got: %d',
|
|
self.ALOOP_CRAS_NODE_TYPE, active_input_types[0])
|
|
|
|
# Checks active node volume is correct.
|
|
for target_volume in [25, 75]:
|
|
cras_utils.set_selected_output_node_volume(target_volume)
|
|
volume = cras_utils.get_active_node_volume()
|
|
if volume != target_volume:
|
|
raise error.TestFail('Volume is as expected: %d, got: %d',
|
|
target_volume, volume)
|
|
|
|
finally:
|
|
utils.stop_service('cras', ignore_status=True)
|
|
utils.unload_module(self.ALOOP_MODULE_NAME)
|
|
utils.start_service('cras', ignore_status=True)
|