summaryrefslogtreecommitdiff
path: root/cras/src/tests/alsa_ucm_unittest.cc
diff options
context:
space:
mode:
authorAndrew Walbran <qwandor@google.com>2021-08-03 14:20:19 +0000
committerAndrew Walbran <qwandor@google.com>2021-08-03 14:20:19 +0000
commit8dce65084f73d40bb081312769a24b4bd533f667 (patch)
treee2118ad5dbee0370c6ab114bb3974cd9f09a2251 /cras/src/tests/alsa_ucm_unittest.cc
parentbcf1f249f11b6865cff3f0d3f0ae5801e67e0e7e (diff)
downloadadhd-android-s-qpr3-beta-1.tar.gz
This repository will be removed from the manifest change, but Treehugger seems unable to test the manifest change, so this change first removes all files so we can test that instead. Bug: 190503456 Test: m crosvm Change-Id: I133ef3bd8b39035a68113c4da8fe4c637a40daac
Diffstat (limited to 'cras/src/tests/alsa_ucm_unittest.cc')
-rw-r--r--cras/src/tests/alsa_ucm_unittest.cc1564
1 files changed, 0 insertions, 1564 deletions
diff --git a/cras/src/tests/alsa_ucm_unittest.cc b/cras/src/tests/alsa_ucm_unittest.cc
deleted file mode 100644
index 1b351ddf..00000000
--- a/cras/src/tests/alsa_ucm_unittest.cc
+++ /dev/null
@@ -1,1564 +0,0 @@
-// Copyright (c) 2012 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.
-
-#include <gtest/gtest.h>
-#include <stdio.h>
-#include <syslog.h>
-
-#include <map>
-
-extern "C" {
-#include "cras_alsa_ucm.h"
-#include "cras_types.h"
-#include "cras_util.h"
-#include "utlist.h"
-
-// Include C file to test static functions.
-#include "cras_alsa_ucm.c"
-}
-
-namespace {
-
-static int snd_use_case_mgr_open_return;
-static snd_use_case_mgr_t* snd_use_case_mgr_open_mgr_ptr;
-static unsigned snd_use_case_mgr_open_called;
-static unsigned snd_use_case_mgr_close_called;
-static unsigned snd_use_case_get_called;
-static std::vector<std::string> snd_use_case_get_id;
-static int snd_use_case_set_return;
-static std::map<std::string, std::string> snd_use_case_get_value;
-static std::map<std::string, unsigned> snd_use_case_geti_value;
-static unsigned snd_use_case_set_called;
-static std::vector<std::pair<std::string, std::string> > snd_use_case_set_param;
-static std::map<std::string, const char**> fake_list;
-static std::map<std::string, unsigned> fake_list_size;
-static unsigned snd_use_case_free_list_called;
-static unsigned snd_use_case_geti_called;
-static std::vector<std::string> list_devices_callback_names;
-static std::vector<void*> list_devices_callback_args;
-static struct cras_use_case_mgr cras_ucm_mgr;
-static const char* avail_verbs[] = {"HiFi", "Comment for Verb1"};
-
-static void ResetStubData() {
- snd_use_case_mgr_open_called = 0;
- snd_use_case_mgr_open_return = 0;
- snd_use_case_mgr_close_called = 0;
- snd_use_case_set_return = 0;
- snd_use_case_get_called = 0;
- snd_use_case_set_called = 0;
- snd_use_case_geti_called = 0;
- snd_use_case_set_param.clear();
- snd_use_case_free_list_called = 0;
- snd_use_case_get_id.clear();
- snd_use_case_get_value.clear();
- snd_use_case_geti_value.clear();
- fake_list.clear();
- fake_list_size.clear();
- fake_list["_verbs"] = avail_verbs;
- fake_list_size["_verbs"] = 2;
- list_devices_callback_names.clear();
- list_devices_callback_args.clear();
- snd_use_case_mgr_open_mgr_ptr = reinterpret_cast<snd_use_case_mgr_t*>(0x55);
- cras_ucm_mgr.use_case = CRAS_STREAM_TYPE_DEFAULT;
- cras_ucm_mgr.hotword_modifier = NULL;
-}
-
-static void list_devices_callback(const char* section_name, void* arg) {
- list_devices_callback_names.push_back(std::string(section_name));
- list_devices_callback_args.push_back(arg);
-}
-
-static void SetSectionDeviceData() {
- static const char* sections[] = {
- "Speaker", "Comment for Dev1", "IntMic", "Comment for Dev2",
- "Headphone", "Comment for Dev3", "ExtMic", "Comment for Dev4",
- "HDMI", "Comment for Dev5"};
- fake_list["_devices/HiFi"] = sections;
- fake_list_size["_devices/HiFi"] = 10;
- std::string id_1 = "=PlaybackPCM/Speaker/HiFi";
- std::string id_2 = "=CapturePCM/IntMic/HiFi";
- std::string id_3 = "=PlaybackPCM/Headphone/HiFi";
- std::string id_4 = "=CapturePCM/ExtMic/HiFi";
- std::string id_5 = "=PlaybackPCM/HDMI/HiFi";
- std::string value_1 = "test_card:0";
- std::string value_2 = "test_card:0";
- std::string value_3 = "test_card:0";
- std::string value_4 = "test_card:0";
- std::string value_5 = "test_card:1";
-
- snd_use_case_get_value[id_1] = value_1;
- snd_use_case_get_value[id_2] = value_2;
- snd_use_case_get_value[id_3] = value_3;
- snd_use_case_get_value[id_4] = value_4;
- snd_use_case_get_value[id_5] = value_5;
-}
-
-TEST(AlsaUcm, CreateFailInvalidCard) {
- ResetStubData();
- EXPECT_EQ(NULL, ucm_create(NULL));
- EXPECT_EQ(0, snd_use_case_mgr_open_called);
-}
-
-TEST(AlsaUcm, CreateFailCardNotFound) {
- ResetStubData();
- snd_use_case_mgr_open_return = -1;
- EXPECT_EQ(NULL, ucm_create("foo"));
- EXPECT_EQ(1, snd_use_case_mgr_open_called);
-}
-
-TEST(AlsaUcm, CreateFailNoHiFi) {
- ResetStubData();
- snd_use_case_set_return = -1;
- EXPECT_EQ(NULL, ucm_create("foo"));
- EXPECT_EQ(1, snd_use_case_mgr_open_called);
- EXPECT_EQ(1, snd_use_case_set_called);
- EXPECT_EQ(1, snd_use_case_mgr_close_called);
-}
-
-TEST(AlsaUcm, CreateSuccess) {
- struct cras_use_case_mgr* mgr;
-
- ResetStubData();
-
- mgr = ucm_create("foo");
- EXPECT_NE(static_cast<snd_use_case_mgr_t*>(NULL), mgr->mgr);
- EXPECT_EQ(1, snd_use_case_mgr_open_called);
- EXPECT_EQ(1, snd_use_case_set_called);
- EXPECT_EQ(0, snd_use_case_mgr_close_called);
-
- ucm_destroy(mgr);
- EXPECT_EQ(1, snd_use_case_mgr_close_called);
-}
-
-TEST(AlsaUcm, CheckEnabledEmptyList) {
- struct cras_use_case_mgr* mgr = &cras_ucm_mgr;
-
- ResetStubData();
- fake_list["_enadevs"] = NULL;
- fake_list_size["_enadevs"] = 0;
-
- EXPECT_EQ(0, ucm_set_enabled(mgr, "Dev1", 0));
- EXPECT_EQ(0, snd_use_case_set_called);
-
- EXPECT_EQ(0, ucm_set_enabled(mgr, "Dev1", 1));
- EXPECT_EQ(1, snd_use_case_set_called);
-
- EXPECT_EQ(0, snd_use_case_free_list_called);
-}
-
-TEST(AlsaUcm, CheckEnabledAlready) {
- struct cras_use_case_mgr* mgr = &cras_ucm_mgr;
- const char* enabled[] = {"Dev2", "Dev1"};
-
- ResetStubData();
-
- fake_list["_enadevs"] = enabled;
- fake_list_size["_enadevs"] = 2;
-
- EXPECT_EQ(0, ucm_set_enabled(mgr, "Dev1", 1));
- EXPECT_EQ(0, snd_use_case_set_called);
-
- EXPECT_EQ(0, ucm_set_enabled(mgr, "Dev1", 0));
- EXPECT_EQ(1, snd_use_case_set_called);
-
- EXPECT_EQ(2, snd_use_case_free_list_called);
-}
-
-TEST(AlsaUcm, GetEdidForDev) {
- struct cras_use_case_mgr* mgr = &cras_ucm_mgr;
- std::string id = "=EDIDFile/Dev1/HiFi";
- std::string value = "EdidFileName";
- const char* file_name;
-
- ResetStubData();
-
- snd_use_case_get_value[id] = value;
-
- file_name = ucm_get_edid_file_for_dev(mgr, "Dev1");
- ASSERT_TRUE(file_name);
- EXPECT_EQ(0, strcmp(file_name, value.c_str()));
- free((void*)file_name);
-
- ASSERT_EQ(1, snd_use_case_get_called);
- EXPECT_EQ(snd_use_case_get_id[0], id);
-}
-
-TEST(AlsaUcm, GetCapControlForDev) {
- struct cras_use_case_mgr* mgr = &cras_ucm_mgr;
- char* cap_control;
- std::string id = "=CaptureControl/Dev1/HiFi";
- std::string value = "MIC";
-
- ResetStubData();
-
- snd_use_case_get_value[id] = value;
-
- cap_control = ucm_get_cap_control(mgr, "Dev1");
- ASSERT_TRUE(cap_control);
- EXPECT_EQ(0, strcmp(cap_control, value.c_str()));
- free(cap_control);
-
- ASSERT_EQ(1, snd_use_case_get_called);
- EXPECT_EQ(snd_use_case_get_id[0], id);
-}
-
-TEST(AlsaUcm, GetOverrideType) {
- struct cras_use_case_mgr* mgr = &cras_ucm_mgr;
- const char* override_type_name;
- std::string id = "=OverrideNodeType/Dev1/HiFi";
- std::string value = "HDMI";
-
- ResetStubData();
-
- snd_use_case_get_value[id] = value;
-
- override_type_name = ucm_get_override_type_name(mgr, "Dev1");
- ASSERT_TRUE(override_type_name);
- EXPECT_EQ(0, strcmp(override_type_name, value.c_str()));
- free((void*)override_type_name);
-
- ASSERT_EQ(1, snd_use_case_get_called);
- EXPECT_EQ(snd_use_case_get_id[0], id);
-}
-
-TEST(AlsaUcm, GetSectionsForVar) {
- struct cras_use_case_mgr* mgr = &cras_ucm_mgr;
- struct section_name *section_names, *c;
-
- ResetStubData();
-
- const char* sections[] = {"Sec1", "Comment for Sec1",
- "Sec2", "Comment for Sec2",
- "Sec3", "Comment for Sec3"};
- fake_list["Identifier"] = sections;
- fake_list_size["Identifier"] = 6;
- std::string id_1 = "=Var/Sec1/HiFi";
- std::string id_2 = "=Var/Sec2/HiFi";
- std::string id_3 = "=Var/Sec3/HiFi";
- std::string value_1 = "Value1";
- std::string value_2 = "Value2";
- std::string value_3 = "Value2";
-
- snd_use_case_get_value[id_1] = value_1;
- snd_use_case_get_value[id_2] = value_2;
- snd_use_case_get_value[id_3] = value_3;
-
- section_names = ucm_get_sections_for_var(mgr, "Var", "Value2", "Identifier",
- CRAS_STREAM_OUTPUT);
-
- ASSERT_TRUE(section_names);
- EXPECT_EQ(0, strcmp(section_names->name, "Sec2"));
- EXPECT_EQ(0, strcmp(section_names->next->name, "Sec3"));
-
- ASSERT_EQ(3, snd_use_case_get_called);
- EXPECT_EQ(snd_use_case_get_id[0], id_1);
- EXPECT_EQ(snd_use_case_get_id[1], id_2);
- EXPECT_EQ(snd_use_case_get_id[2], id_3);
-
- DL_FOREACH (section_names, c) {
- DL_DELETE(section_names, c);
- free((void*)c->name);
- free(c);
- }
-}
-
-TEST(AlsaUcm, GetDevForJack) {
- struct cras_use_case_mgr* mgr = &cras_ucm_mgr;
- const char* dev_name;
- const char* devices[] = {"Dev1", "Comment for Dev1", "Dev2",
- "Comment for Dev2"};
-
- ResetStubData();
-
- fake_list["_devices/HiFi"] = devices;
- fake_list_size["_devices/HiFi"] = 4;
- std::string id_1 = "=JackDev/Dev1/HiFi";
- std::string id_2 = "=JackDev/Dev2/HiFi";
- std::string value_1 = "Value1";
- std::string value_2 = "Value2";
-
- snd_use_case_get_value[id_1] = value_1;
- snd_use_case_get_value[id_2] = value_2;
- dev_name = ucm_get_dev_for_jack(mgr, value_2.c_str(), CRAS_STREAM_OUTPUT);
- ASSERT_TRUE(dev_name);
- EXPECT_EQ(0, strcmp(dev_name, "Dev2"));
- free((void*)dev_name);
-
- ASSERT_EQ(2, snd_use_case_get_called);
- EXPECT_EQ(snd_use_case_get_id[0], id_1);
- EXPECT_EQ(snd_use_case_get_id[1], id_2);
-}
-
-TEST(AlsaUcm, GetDevForHeadphoneJack) {
- struct cras_use_case_mgr* mgr = &cras_ucm_mgr;
- const char* dev_name;
- const char* devices[] = {"Mic", "Comment for Dev1", "Headphone",
- "Comment for Dev2"};
-
- ResetStubData();
-
- fake_list["_devices/HiFi"] = devices;
- fake_list_size["_devices/HiFi"] = 4;
- std::string id_1 = "=JackDev/Mic/HiFi";
- std::string id_2 = "=JackDev/Headphone/HiFi";
- std::string value = "JackValue";
-
- snd_use_case_get_value[id_1] = value;
- snd_use_case_get_value[id_2] = value;
-
- /* Looking for jack with matched value with output direction, Headphone will
- * be found even though Mic section has the matched value too. */
- dev_name = ucm_get_dev_for_jack(mgr, value.c_str(), CRAS_STREAM_OUTPUT);
-
- ASSERT_TRUE(dev_name);
- EXPECT_EQ(0, strcmp(dev_name, "Headphone"));
- free((void*)dev_name);
-}
-
-TEST(AlsaUcm, GetDevForMicJack) {
- struct cras_use_case_mgr* mgr = &cras_ucm_mgr;
- const char* dev_name;
- const char* devices[] = {"Headphone", "Comment for Dev1", "Mic",
- "Comment for Dev2"};
-
- ResetStubData();
-
- fake_list["_devices/HiFi"] = devices;
- fake_list_size["_devices/HiFi"] = 4;
- std::string id_1 = "=JackDev/Headphone/HiFi";
- std::string id_2 = "=JackDev/Mic/HiFi";
- std::string value = "JackValue";
-
- snd_use_case_get_value[id_1] = value;
- snd_use_case_get_value[id_2] = value;
-
- /* Looking for jack with matched value with input direction, Mic will be found
- * even though Headphone section has the matched value too. */
- dev_name = ucm_get_dev_for_jack(mgr, value.c_str(), CRAS_STREAM_INPUT);
-
- ASSERT_TRUE(dev_name);
- EXPECT_EQ(0, strcmp(dev_name, "Mic"));
- free((void*)dev_name);
-}
-
-TEST(AlsaUcm, GetDevForMixer) {
- struct cras_use_case_mgr* mgr = &cras_ucm_mgr;
- const char *dev_name_out, *dev_name_in;
- const char* devices[] = {"Dev1", "Comment for Dev1", "Dev2",
- "Comment for Dev2"};
-
- ResetStubData();
-
- fake_list["_devices/HiFi"] = devices;
- fake_list_size["_devices/HiFi"] = 4;
- std::string id_1 = "=PlaybackMixerElem/Dev1/HiFi";
- std::string id_2 = "=CaptureMixerElem/Dev2/HiFi";
- std::string value_1 = "Value1";
- std::string value_2 = "Value2";
-
- snd_use_case_get_value[id_1] = value_1;
- snd_use_case_get_value[id_2] = value_2;
- dev_name_out =
- ucm_get_dev_for_mixer(mgr, value_1.c_str(), CRAS_STREAM_OUTPUT);
- dev_name_in = ucm_get_dev_for_mixer(mgr, value_2.c_str(), CRAS_STREAM_INPUT);
-
- ASSERT_TRUE(dev_name_out);
- EXPECT_EQ(0, strcmp(dev_name_out, "Dev1"));
- free((void*)dev_name_out);
-
- ASSERT_TRUE(dev_name_in);
- EXPECT_EQ(0, strcmp(dev_name_in, "Dev2"));
- free((void*)dev_name_in);
-}
-
-TEST(AlsaUcm, GetAlsaDeviceIndexForDevice) {
- struct cras_use_case_mgr* mgr = &cras_ucm_mgr;
- const char* devices[] = {"Dev1", "Comment for Dev1", "Dev2",
- "Comment for Dev2"};
-
- ResetStubData();
-
- fake_list["_devices/HiFi"] = devices;
- fake_list_size["_devices/HiFi"] = 4;
- std::string id_1 = "=CapturePCM/Dev1/HiFi";
- std::string id_2 = "=PlaybackPCM/Dev2/HiFi";
- std::string value_1 = "PCMName,1";
- std::string value_2 = "PCMName,2";
-
- snd_use_case_get_value[id_1] = value_1;
- snd_use_case_get_value[id_2] = value_2;
- EXPECT_EQ(1, ucm_get_alsa_dev_idx_for_dev(mgr, "Dev1", CRAS_STREAM_INPUT));
- EXPECT_EQ(2, ucm_get_alsa_dev_idx_for_dev(mgr, "Dev2", CRAS_STREAM_OUTPUT));
-
- ASSERT_EQ(2, snd_use_case_get_called);
- EXPECT_EQ(snd_use_case_get_id[0], id_1);
- EXPECT_EQ(snd_use_case_get_id[1], id_2);
-}
-
-TEST(AlsaUcm, GetDeviceRateForDevice) {
- struct cras_use_case_mgr* mgr = &cras_ucm_mgr;
- int input_dev_rate, output_dev_rate;
- const char* devices[] = {"Dev1", "Comment for Dev1", "Dev2",
- "Comment for Dev2"};
-
- ResetStubData();
-
- fake_list["_devices/HiFi"] = devices;
- fake_list_size["_devices/HiFi"] = 4;
- std::string id_1 = "=CaptureRate/Dev1/HiFi";
- std::string id_2 = "=PlaybackRate/Dev2/HiFi";
- std::string value_1 = "44100";
- std::string value_2 = "48000";
-
- snd_use_case_get_value[id_1] = value_1;
- snd_use_case_get_value[id_2] = value_2;
- input_dev_rate = ucm_get_sample_rate_for_dev(mgr, "Dev1", CRAS_STREAM_INPUT);
- output_dev_rate =
- ucm_get_sample_rate_for_dev(mgr, "Dev2", CRAS_STREAM_OUTPUT);
- EXPECT_EQ(44100, input_dev_rate);
- EXPECT_EQ(48000, output_dev_rate);
-
- ASSERT_EQ(2, snd_use_case_get_called);
- EXPECT_EQ(snd_use_case_get_id[0], id_1);
- EXPECT_EQ(snd_use_case_get_id[1], id_2);
-}
-
-TEST(AlsaUcm, GetDeviceChannelsForDevice) {
- struct cras_use_case_mgr* mgr = &cras_ucm_mgr;
- int rc;
- size_t input_dev_channels, output_dev_channels;
- const char* devices[] = {"Dev1", "Comment for Dev1", "Dev2",
- "Comment for Dev2"};
-
- ResetStubData();
-
- fake_list["_devices/HiFi"] = devices;
- fake_list_size["_devices/HiFi"] = 4;
- std::string id_1 = "=CaptureChannels/Dev1/HiFi";
- std::string id_2 = "=PlaybackChannels/Dev2/HiFi";
- std::string value_1 = "4";
- std::string value_2 = "8";
-
- snd_use_case_get_value[id_1] = value_1;
- snd_use_case_get_value[id_2] = value_2;
- rc = ucm_get_channels_for_dev(mgr, "Dev1", CRAS_STREAM_INPUT,
- &input_dev_channels);
- EXPECT_EQ(0, rc);
- EXPECT_EQ(4, input_dev_channels);
- rc = ucm_get_channels_for_dev(mgr, "Dev2", CRAS_STREAM_OUTPUT,
- &output_dev_channels);
- EXPECT_EQ(0, rc);
- EXPECT_EQ(8, output_dev_channels);
-
- ASSERT_EQ(2, snd_use_case_get_called);
- EXPECT_EQ(snd_use_case_get_id[0], id_1);
- EXPECT_EQ(snd_use_case_get_id[1], id_2);
-}
-
-TEST(AlsaUcm, GetCaptureChannelMapForDevice) {
- struct cras_use_case_mgr* mgr = &cras_ucm_mgr;
- int8_t channel_layout[CRAS_CH_MAX];
- int rc;
-
- ResetStubData();
-
- std::string id_1 = "=CaptureChannelMap/Dev1/HiFi";
- std::string value_1 = "-1 -1 0 1 -1 -1 -1 -1 -1 -1 -1";
-
- snd_use_case_get_value[id_1] = value_1;
- rc = ucm_get_capture_chmap_for_dev(mgr, "Dev1", channel_layout);
-
- EXPECT_EQ(0, rc);
-
- ASSERT_EQ(1, snd_use_case_get_called);
- EXPECT_EQ(snd_use_case_get_id[0], id_1);
- EXPECT_EQ(channel_layout[0], -1);
- EXPECT_EQ(channel_layout[1], -1);
- EXPECT_EQ(channel_layout[2], 0);
- EXPECT_EQ(channel_layout[3], 1);
- EXPECT_EQ(channel_layout[4], -1);
- EXPECT_EQ(channel_layout[5], -1);
- EXPECT_EQ(channel_layout[6], -1);
- EXPECT_EQ(channel_layout[7], -1);
- EXPECT_EQ(channel_layout[8], -1);
- EXPECT_EQ(channel_layout[9], -1);
- EXPECT_EQ(channel_layout[10], -1);
-}
-
-TEST(AlsaUcm, GetEchoReferenceDev) {
- struct cras_use_case_mgr* mgr = &cras_ucm_mgr;
- const char* echo_ref_dev;
-
- ResetStubData();
-
- std::string id_1 = "=EchoReferenceDev/Dev1/HiFi";
- std::string value_1 = "Echo Ref";
-
- snd_use_case_get_value[id_1] = value_1;
- echo_ref_dev = ucm_get_echo_reference_dev_name_for_dev(mgr, "Dev1");
-
- ASSERT_EQ(1, snd_use_case_get_called);
- EXPECT_EQ(snd_use_case_get_id[0], id_1);
- EXPECT_EQ(0, strcmp(echo_ref_dev, value_1.c_str()));
- free((void*)echo_ref_dev);
-}
-
-TEST(AlsaUcm, GetHotwordModels) {
- struct cras_use_case_mgr* mgr = &cras_ucm_mgr;
- const char* models;
- const char* modifiers[] = {"Mod1", "Comment1", "Hotword Model en",
- "Comment2", "Hotword Model jp", "Comment3",
- "Mod2", "Comment4", "Hotword Model de",
- "Comment5"};
- ResetStubData();
-
- fake_list["_modifiers/HiFi"] = modifiers;
- fake_list_size["_modifiers/HiFi"] = 10;
-
- models = ucm_get_hotword_models(mgr);
- ASSERT_TRUE(models);
- EXPECT_EQ(0, strcmp(models, "en,jp,de"));
- free((void*)models);
-}
-
-TEST(AlsaUcm, SetHotwordModel) {
- struct cras_use_case_mgr* mgr = &cras_ucm_mgr;
- const char* modifiers[] = {"Hotword Model en", "Comment1",
- "Hotword Model jp", "Comment2",
- "Hotword Model de", "Comment3"};
- const char* enabled_mods[] = {"Hotword Model jp"};
- int ret;
- std::string id = "_modstatus/Hotword Model jp";
- ResetStubData();
-
- snd_use_case_geti_value[id] = 1;
- fake_list["_modifiers/HiFi"] = modifiers;
- fake_list_size["_modifiers/HiFi"] = 6;
-
- EXPECT_EQ(-EINVAL, ucm_set_hotword_model(mgr, "zh"));
- EXPECT_EQ(0, snd_use_case_set_called);
-
- ret = ucm_set_hotword_model(mgr, "jp");
-
- EXPECT_EQ(0, ret);
- EXPECT_EQ(0, snd_use_case_set_called);
- EXPECT_EQ(0, strcmp(mgr->hotword_modifier, "Hotword Model jp"));
-
- fake_list["_enamods"] = enabled_mods;
- fake_list_size["_enamods"] = 1;
- ret = ucm_set_hotword_model(mgr, "de");
- EXPECT_EQ(0, ret);
- EXPECT_EQ(2, snd_use_case_set_called);
- EXPECT_EQ(1, snd_use_case_geti_called);
- EXPECT_EQ(
- snd_use_case_set_param[0],
- std::make_pair(std::string("_dismod"), std::string("Hotword Model jp")));
- EXPECT_EQ(
- snd_use_case_set_param[1],
- std::make_pair(std::string("_enamod"), std::string("Hotword Model de")));
- free(mgr->hotword_modifier);
-}
-
-TEST(AlsaUcm, DisableAllHotwordModels) {
- struct cras_use_case_mgr* mgr = &cras_ucm_mgr;
- const char* modifiers[] = {"Hotword Model en", "Comment1",
- "Hotword Model jp", "Comment2",
- "Hotword Model de", "Comment3"};
- const char* enabled_mods[] = {"Hotword Model en"};
- ResetStubData();
-
- fake_list["_modifiers/HiFi"] = modifiers;
- fake_list_size["_modifiers/HiFi"] = 6;
- fake_list["_enamods"] = enabled_mods;
- fake_list_size["_enamods"] = 1;
-
- ucm_disable_all_hotword_models(mgr);
-
- EXPECT_EQ(1, snd_use_case_set_called);
- EXPECT_EQ(
- snd_use_case_set_param[0],
- std::make_pair(std::string("_dismod"), std::string("Hotword Model en")));
-}
-
-TEST(AlsaUcm, EnableHotwordModel) {
- struct cras_use_case_mgr* mgr = &cras_ucm_mgr;
- const char* modifiers[] = {"Hotword Model en", "Comment1",
- "Hotword Model jp", "Comment2",
- "Hotword Model de", "Comment3"};
- const char* enabled_mods[] = {""};
- int ret;
- ResetStubData();
-
- fake_list["_modifiers/HiFi"] = modifiers;
- fake_list_size["_modifiers/HiFi"] = 6;
- fake_list["_enamods"] = enabled_mods;
- fake_list_size["_enamods"] = 0;
-
- EXPECT_EQ(-EINVAL, ucm_enable_hotword_model(mgr));
-
- mgr->hotword_modifier = strdup("Hotword Model de");
- ret = ucm_enable_hotword_model(mgr);
-
- EXPECT_EQ(0, ret);
- EXPECT_EQ(1, snd_use_case_set_called);
- EXPECT_EQ(
- snd_use_case_set_param[0],
- std::make_pair(std::string("_enamod"), std::string("Hotword Model de")));
- free(mgr->hotword_modifier);
-}
-
-TEST(AlsaUcm, SwapModeExists) {
- struct cras_use_case_mgr* mgr = &cras_ucm_mgr;
- int rc;
- const char* modifiers_1[] = {
- "Speaker Swap Mode", "Comment for Speaker Swap Mode",
- "Microphone Swap Mode", "Comment for Microphone Swap Mode"};
- const char* modifiers_2[] = {
- "Speaker Some Mode", "Comment for Speaker Some Mode",
- "Microphone Some Mode", "Comment for Microphone Some Mode"};
-
- ResetStubData();
-
- fake_list["_modifiers/HiFi"] = modifiers_1;
- fake_list_size["_modifiers/HiFi"] = 4;
- rc = ucm_swap_mode_exists(mgr);
- EXPECT_EQ(1, rc);
-
- fake_list["_modifiers/HiFi"] = modifiers_2;
- fake_list_size["_modifiers/HiFi"] = 4;
- rc = ucm_swap_mode_exists(mgr);
- EXPECT_EQ(0, rc);
-}
-
-TEST(AlsaUcm, EnableSwapMode) {
- struct cras_use_case_mgr* mgr = &cras_ucm_mgr;
- int rc;
- const char* modifiers[] = {
- "Speaker Swap Mode", "Comment for Speaker Swap Mode",
- "Microphone Swap Mode", "Comment for Microphone Swap Mode"};
- const char* modifiers_enabled[] = {"Speaker Swap Mode"};
-
- ResetStubData();
-
- fake_list["_modifiers/HiFi"] = modifiers;
- fake_list_size["_modifiers/HiFi"] = 4;
-
- fake_list["_enamods"] = modifiers_enabled;
- fake_list_size["_enamods"] = 1;
-
- snd_use_case_set_return = 0;
-
- rc = ucm_enable_swap_mode(mgr, "Headphone", 1);
- EXPECT_EQ(-EPERM, rc);
- EXPECT_EQ(0, snd_use_case_set_called);
-
- rc = ucm_enable_swap_mode(mgr, "Speaker", 1);
- EXPECT_EQ(0, rc);
- EXPECT_EQ(0, snd_use_case_set_called);
-
- rc = ucm_enable_swap_mode(mgr, "Microphone", 1);
- EXPECT_EQ(0, rc);
- EXPECT_EQ(1, snd_use_case_set_called);
-}
-
-TEST(AlsaUcm, DisableSwapMode) {
- struct cras_use_case_mgr* mgr = &cras_ucm_mgr;
- int rc;
- const char* modifiers[] = {
- "Speaker Swap Mode", "Comment for Speaker Swap Mode",
- "Microphone Swap Mode", "Comment for Microphone Swap Mode"};
- const char* modifiers_enabled[] = {"Speaker Swap Mode"};
-
- ResetStubData();
-
- fake_list["_modifiers/HiFi"] = modifiers;
- fake_list_size["_modifiers/HiFi"] = 4;
-
- fake_list["_enamods"] = modifiers_enabled;
- fake_list_size["_enamods"] = 1;
-
- snd_use_case_set_return = 0;
-
- rc = ucm_enable_swap_mode(mgr, "Headphone", 0);
- EXPECT_EQ(-EPERM, rc);
- EXPECT_EQ(0, snd_use_case_set_called);
-
- rc = ucm_enable_swap_mode(mgr, "Microphone", 0);
- EXPECT_EQ(0, rc);
- EXPECT_EQ(0, snd_use_case_set_called);
-
- rc = ucm_enable_swap_mode(mgr, "Speaker", 0);
- EXPECT_EQ(0, rc);
- EXPECT_EQ(1, snd_use_case_set_called);
-}
-
-TEST(AlsaUcm, NoiseCancellationExists) {
- struct cras_use_case_mgr* mgr = &cras_ucm_mgr;
- int rc;
- const char* node = "Internal Mic";
- const char* modifiers_1[] = {"Internal Mic Noise Cancellation", "Comment"};
- const char* modifiers_2[] = {"Internal Mic Noise Augmentation", "Comment"};
- const char* modifiers_3[] = {"Microphone Noise Cancellation", "Comment"};
-
- ResetStubData();
-
- fake_list["_modifiers/HiFi"] = modifiers_1;
- fake_list_size["_modifiers/HiFi"] = 2;
- rc = ucm_node_noise_cancellation_exists(mgr, node);
- EXPECT_EQ(1, rc);
-
- fake_list["_modifiers/HiFi"] = modifiers_2;
- fake_list_size["_modifiers/HiFi"] = 2;
- rc = ucm_node_noise_cancellation_exists(mgr, node);
- EXPECT_EQ(0, rc);
-
- fake_list["_modifiers/HiFi"] = modifiers_3;
- fake_list_size["_modifiers/HiFi"] = 2;
- rc = ucm_node_noise_cancellation_exists(mgr, node);
- EXPECT_EQ(0, rc);
-}
-
-TEST(AlsaUcm, EnableDisableNoiseCancellation) {
- struct cras_use_case_mgr* mgr = &cras_ucm_mgr;
- int rc;
- const char* modifiers[] = {"Internal Mic Noise Cancellation", "Comment1",
- "Microphone Noise Cancellation", "Comment2"};
- const char* modifiers_enabled[] = {"Internal Mic Noise Cancellation"};
-
- ResetStubData();
-
- fake_list["_modifiers/HiFi"] = modifiers;
- fake_list_size["_modifiers/HiFi"] = 4;
-
- fake_list["_enamods"] = modifiers_enabled;
- fake_list_size["_enamods"] = 1;
-
- snd_use_case_set_return = 0;
-
- rc = ucm_enable_node_noise_cancellation(mgr, "Line In", 1);
- EXPECT_EQ(-EPERM, rc); // Modifier is not existed
- EXPECT_EQ(0, snd_use_case_set_called);
-
- rc = ucm_enable_node_noise_cancellation(mgr, "Line In", 0);
- EXPECT_EQ(-EPERM, rc); // Modifier is not existed
- EXPECT_EQ(0, snd_use_case_set_called);
-
- rc = ucm_enable_node_noise_cancellation(mgr, "Microphone", 0);
- EXPECT_EQ(0, rc); // Modifier is already disabled
- EXPECT_EQ(0, snd_use_case_set_called);
-
- rc = ucm_enable_node_noise_cancellation(mgr, "Microphone", 1);
- EXPECT_EQ(0, rc);
- EXPECT_EQ(1, snd_use_case_set_called);
-
- snd_use_case_set_called = 0;
-
- rc = ucm_enable_node_noise_cancellation(mgr, "Internal Mic", 1);
- EXPECT_EQ(0, rc); // Modifier is already enabled
- EXPECT_EQ(0, snd_use_case_set_called);
-
- rc = ucm_enable_node_noise_cancellation(mgr, "Internal Mic", 0);
- EXPECT_EQ(0, rc);
- EXPECT_EQ(1, snd_use_case_set_called);
-}
-
-TEST(AlsaFlag, GetFlag) {
- struct cras_use_case_mgr* mgr = &cras_ucm_mgr;
- char* flag_value;
-
- std::string id = "=FlagName//HiFi";
- std::string value = "1";
- ResetStubData();
-
- snd_use_case_get_value[id] = value;
-
- flag_value = ucm_get_flag(mgr, "FlagName");
- ASSERT_TRUE(flag_value);
- EXPECT_EQ(0, strcmp(flag_value, value.c_str()));
- free(flag_value);
-
- ASSERT_EQ(1, snd_use_case_get_called);
- EXPECT_EQ(snd_use_case_get_id[0], id);
-}
-
-TEST(AlsaUcm, ModifierEnabled) {
- struct cras_use_case_mgr* mgr = &cras_ucm_mgr;
- int enabled;
-
- ResetStubData();
-
- const char* mods[] = {"Mod1", "Mod2"};
- fake_list["_enamods"] = mods;
- fake_list_size["_enamods"] = 2;
-
- enabled = modifier_enabled(mgr, "Mod1");
- EXPECT_EQ(1, enabled);
- enabled = modifier_enabled(mgr, "Mod2");
- EXPECT_EQ(1, enabled);
- enabled = modifier_enabled(mgr, "Mod3");
- EXPECT_EQ(0, enabled);
-}
-
-TEST(AlsaUcm, SetModifierEnabled) {
- struct cras_use_case_mgr* mgr = &cras_ucm_mgr;
-
- ResetStubData();
-
- ucm_set_modifier_enabled(mgr, "Mod1", 1);
- EXPECT_EQ(snd_use_case_set_param[0],
- std::make_pair(std::string("_enamod"), std::string("Mod1")));
- EXPECT_EQ(1, snd_use_case_set_called);
- ucm_set_modifier_enabled(mgr, "Mod1", 0);
- EXPECT_EQ(snd_use_case_set_param[1],
- std::make_pair(std::string("_dismod"), std::string("Mod1")));
- EXPECT_EQ(2, snd_use_case_set_called);
-}
-
-TEST(AlsaUcm, EndWithSuffix) {
- EXPECT_EQ(1, ucm_str_ends_with_suffix("Foo bar", "bar"));
- EXPECT_EQ(1, ucm_str_ends_with_suffix("bar", "bar"));
- EXPECT_EQ(0, ucm_str_ends_with_suffix("Foo car", "bar"));
-}
-
-TEST(AlsaUcm, SectionExistsWithName) {
- struct cras_use_case_mgr* mgr = &cras_ucm_mgr;
- const char* sections[] = {"Sec1", "Comment for Sec1", "Sec2",
- "Comment for Sec2"};
-
- ResetStubData();
-
- fake_list["Identifier"] = sections;
- fake_list_size["Identifier"] = 4;
- EXPECT_EQ(1, ucm_section_exists_with_name(mgr, "Sec1", "Identifier"));
- EXPECT_EQ(1, ucm_section_exists_with_name(mgr, "Sec2", "Identifier"));
- EXPECT_EQ(0, ucm_section_exists_with_name(mgr, "Sec3", "Identifier"));
-}
-
-TEST(AlsaUcm, SectionExistsWithSuffix) {
- struct cras_use_case_mgr* mgr = &cras_ucm_mgr;
-
- ResetStubData();
-
- const char* sections[] = {"Sec1 Suffix1", "Comment for Sec1", "Sec2 Suffix2",
- "Comment for Sec2"};
- fake_list["Identifier"] = sections;
- fake_list_size["Identifier"] = 4;
- EXPECT_EQ(1, ucm_section_exists_with_suffix(mgr, "Suffix1", "Identifier"));
- EXPECT_EQ(1, ucm_section_exists_with_suffix(mgr, "Suffix2", "Identifier"));
- EXPECT_EQ(0, ucm_section_exists_with_suffix(mgr, "Suffix3", "Identifier"));
-}
-
-TEST(AlsaUcm, DisableSoftwareVolume) {
- struct cras_use_case_mgr* mgr = &cras_ucm_mgr;
- unsigned int disable_software_volume;
- std::string id = "=DisableSoftwareVolume//HiFi";
- std::string value = "1";
-
- ResetStubData();
-
- snd_use_case_get_value[id] = value;
-
- disable_software_volume = ucm_get_disable_software_volume(mgr);
- ASSERT_TRUE(disable_software_volume);
-
- ASSERT_EQ(1, snd_use_case_get_called);
- EXPECT_EQ(snd_use_case_get_id[0], id);
-}
-
-TEST(AlsaUcm, GetCoupledMixersForDevice) {
- struct cras_use_case_mgr* mgr = &cras_ucm_mgr;
- struct mixer_name *mixer_names_1, *mixer_names_2, *c;
- const char* devices[] = {"Dev1", "Comment for Dev1", "Dev2",
- "Comment for Dev2"};
-
- ResetStubData();
-
- fake_list["_devices/HiFi"] = devices;
- fake_list_size["_devices/HiFi"] = 4;
- std::string id_1 = "=CoupledMixers/Dev1/HiFi";
- std::string value_1 = "Mixer Name1,Mixer Name2,Mixer Name3";
- std::string id_2 = "=CoupledMixers/Dev2/HiFi";
- std::string value_2 = "";
- snd_use_case_get_value[id_1] = value_1;
- snd_use_case_get_value[id_2] = value_2;
- mixer_names_1 = ucm_get_coupled_mixer_names(mgr, "Dev1");
- mixer_names_2 = ucm_get_coupled_mixer_names(mgr, "Dev2");
-
- ASSERT_TRUE(mixer_names_1);
- EXPECT_EQ(0, strcmp(mixer_names_1->name, "Mixer Name1"));
- EXPECT_EQ(0, strcmp(mixer_names_1->next->name, "Mixer Name2"));
- EXPECT_EQ(0, strcmp(mixer_names_1->next->next->name, "Mixer Name3"));
- EXPECT_EQ(NULL, mixer_names_1->next->next->next);
-
- EXPECT_EQ(NULL, mixer_names_2);
-
- DL_FOREACH (mixer_names_1, c) {
- DL_DELETE(mixer_names_1, c);
- free((void*)c->name);
- free(c);
- }
-}
-
-TEST(AlsaUcm, FreeMixerNames) {
- struct cras_use_case_mgr* mgr = &cras_ucm_mgr;
- struct mixer_name* mixer_names_1;
- const char* devices[] = {"Dev1", "Comment for Dev1"};
-
- ResetStubData();
-
- fake_list["_devices/HiFi"] = devices;
- fake_list_size["_devices/HiFi"] = 2;
- std::string id_1 = "=CoupledMixers/Dev1/HiFi";
- std::string value_1 = "Mixer Name1,Mixer Name2,Mixer Name3";
- snd_use_case_get_value[id_1] = value_1;
- mixer_names_1 = ucm_get_coupled_mixer_names(mgr, "Dev1");
-
- ASSERT_TRUE(mixer_names_1);
- EXPECT_EQ(0, strcmp(mixer_names_1->name, "Mixer Name1"));
- EXPECT_EQ(0, strcmp(mixer_names_1->next->name, "Mixer Name2"));
- EXPECT_EQ(0, strcmp(mixer_names_1->next->next->name, "Mixer Name3"));
- EXPECT_EQ(NULL, mixer_names_1->next->next->next);
-
- /* No way to actually check if memory is freed. */
- mixer_name_free(mixer_names_1);
-}
-
-TEST(AlsaUcm, DefaultNodeGain) {
- struct cras_use_case_mgr* mgr = &cras_ucm_mgr;
- long default_node_gain;
- int ret;
- std::string id = "=DefaultNodeGain/Internal Mic/HiFi";
- std::string value = "-2000";
-
- ResetStubData();
-
- /* Value can be found in UCM. */
- snd_use_case_get_value[id] = value;
-
- ret = ucm_get_default_node_gain(mgr, "Internal Mic", &default_node_gain);
-
- EXPECT_EQ(0, ret);
- EXPECT_EQ(-2000, default_node_gain);
-
- ResetStubData();
-
- /* Value can not be found in UCM. */
- ret = ucm_get_default_node_gain(mgr, "Internal Mic", &default_node_gain);
-
- ASSERT_TRUE(ret);
-}
-
-TEST(AlsaUcm, IntrinsicSensitivity) {
- struct cras_use_case_mgr* mgr = &cras_ucm_mgr;
- long intrinsic_vol;
- int ret;
- std::string id = "=IntrinsicSensitivity/Internal Mic/HiFi";
- std::string value = "-2000";
-
- ResetStubData();
-
- /* Value can be found in UCM. */
- snd_use_case_get_value[id] = value;
-
- ret = ucm_get_intrinsic_sensitivity(mgr, "Internal Mic", &intrinsic_vol);
-
- EXPECT_EQ(0, ret);
- EXPECT_EQ(-2000, intrinsic_vol);
-
- ResetStubData();
-
- /* Value can not be found in UCM. */
- ret = ucm_get_intrinsic_sensitivity(mgr, "Internal Mic", &intrinsic_vol);
-
- ASSERT_TRUE(ret);
-}
-
-TEST(AlsaUcm, UseFullySpecifiedUCMConfig) {
- struct cras_use_case_mgr* mgr = &cras_ucm_mgr;
- int fully_specified_flag;
-
- std::string id = "=FullySpecifiedUCM//HiFi";
- ResetStubData();
-
- /* Flag is not set */
- fully_specified_flag = ucm_has_fully_specified_ucm_flag(mgr);
- ASSERT_FALSE(fully_specified_flag);
-
- /* Flag is set to "1". */
- snd_use_case_get_value[id] = std::string("1");
- fully_specified_flag = ucm_has_fully_specified_ucm_flag(mgr);
- ASSERT_TRUE(fully_specified_flag);
-
- /* Flag is set to "0". */
- snd_use_case_get_value[id] = std::string("0");
- fully_specified_flag = ucm_has_fully_specified_ucm_flag(mgr);
- ASSERT_FALSE(fully_specified_flag);
-}
-
-TEST(AlsaUcm, GetMixerNameForDevice) {
- struct cras_use_case_mgr* mgr = &cras_ucm_mgr;
- const char *mixer_name_1, *mixer_name_2;
- const char* devices[] = {"Dev1", "Comment for Dev1", "Dev2",
- "Comment for Dev2"};
-
- ResetStubData();
-
- fake_list["_devices/HiFi"] = devices;
- fake_list_size["_devices/HiFi"] = 4;
- std::string id_1 = "=PlaybackMixerElem/Dev1/HiFi";
- std::string id_2 = "=CaptureMixerElem/Dev2/HiFi";
- std::string value_1 = "MixerName1";
- std::string value_2 = "MixerName2";
-
- snd_use_case_get_value[id_1] = value_1;
- snd_use_case_get_value[id_2] = value_2;
- mixer_name_1 = ucm_get_playback_mixer_elem_for_dev(mgr, "Dev1");
- mixer_name_2 = ucm_get_capture_mixer_elem_for_dev(mgr, "Dev2");
-
- EXPECT_EQ(0, strcmp(mixer_name_1, value_1.c_str()));
- EXPECT_EQ(0, strcmp(mixer_name_2, value_2.c_str()));
- free((void*)mixer_name_1);
- free((void*)mixer_name_2);
-}
-
-TEST(AlsaUcm, GetMainVolumeMixerName) {
- struct cras_use_case_mgr* mgr = &cras_ucm_mgr;
- struct mixer_name *mixer_names_1, *mixer_names_2, *c;
-
- ResetStubData();
-
- std::string id = "=MainVolumeNames//HiFi";
- std::string value_1 = "Mixer Name1,Mixer Name2,Mixer Name3";
-
- snd_use_case_get_value[id] = value_1;
- mixer_names_1 = ucm_get_main_volume_names(mgr);
-
- ResetStubData();
-
- /* Can not find MainVolumeNames */
- mixer_names_2 = ucm_get_main_volume_names(mgr);
-
- ASSERT_TRUE(mixer_names_1);
- EXPECT_EQ(0, strcmp(mixer_names_1->name, "Mixer Name1"));
- EXPECT_EQ(0, strcmp(mixer_names_1->next->name, "Mixer Name2"));
- EXPECT_EQ(0, strcmp(mixer_names_1->next->next->name, "Mixer Name3"));
- EXPECT_EQ(NULL, mixer_names_1->next->next->next);
-
- DL_FOREACH (mixer_names_1, c) {
- DL_DELETE(mixer_names_1, c);
- free((void*)c->name);
- free(c);
- }
-
- EXPECT_EQ(NULL, mixer_names_2);
-}
-
-TEST(AlsaUcm, ListSectionsByDeviceNameOutput) {
- struct cras_use_case_mgr* mgr = &cras_ucm_mgr;
- void* callback_arg = reinterpret_cast<void*>(0x56);
- int listed = 0;
-
- ResetStubData();
- SetSectionDeviceData();
-
- listed = ucm_list_section_devices_by_device_name(
- mgr, CRAS_STREAM_OUTPUT, "test_card:0", list_devices_callback,
- callback_arg);
-
- EXPECT_EQ(2, listed);
- EXPECT_EQ(2, list_devices_callback_names.size());
- EXPECT_EQ(2, list_devices_callback_args.size());
-
- EXPECT_EQ(0, strcmp(list_devices_callback_names[0].c_str(), "Speaker"));
- EXPECT_EQ(callback_arg, list_devices_callback_args[0]);
-
- EXPECT_EQ(0, strcmp(list_devices_callback_names[1].c_str(), "Headphone"));
- EXPECT_EQ(callback_arg, list_devices_callback_args[1]);
-}
-
-TEST(AlsaUcm, ListSectionsByDeviceNameInput) {
- struct cras_use_case_mgr* mgr = &cras_ucm_mgr;
- void* callback_arg = reinterpret_cast<void*>(0x56);
- int listed = 0;
-
- ResetStubData();
- SetSectionDeviceData();
-
- listed = ucm_list_section_devices_by_device_name(
- mgr, CRAS_STREAM_INPUT, "test_card:0", list_devices_callback,
- callback_arg);
-
- EXPECT_EQ(2, listed);
- EXPECT_EQ(2, list_devices_callback_names.size());
- EXPECT_EQ(2, list_devices_callback_args.size());
-
- EXPECT_EQ(0, strcmp(list_devices_callback_names[0].c_str(), "IntMic"));
- EXPECT_EQ(callback_arg, list_devices_callback_args[0]);
-
- EXPECT_EQ(0, strcmp(list_devices_callback_names[1].c_str(), "ExtMic"));
- EXPECT_EQ(callback_arg, list_devices_callback_args[1]);
-}
-
-TEST(AlsaUcm, GetJackDevForDevice) {
- struct cras_use_case_mgr* mgr = &cras_ucm_mgr;
- const char *jack_name_1, *jack_name_2;
- const char* devices[] = {"Dev1", "Comment for Dev1", "Dev2",
- "Comment for Dev2"};
-
- ResetStubData();
-
- fake_list["_devices/HiFi"] = devices;
- fake_list_size["_devices/HiFi"] = 4;
- std::string id_1 = "=JackDev/Dev1/HiFi";
- std::string value_1 = "JackDev1";
-
- snd_use_case_get_value[id_1] = value_1;
- jack_name_1 = ucm_get_jack_dev_for_dev(mgr, "Dev1");
- jack_name_2 = ucm_get_jack_dev_for_dev(mgr, "Dev2");
-
- EXPECT_EQ(0, strcmp(jack_name_1, value_1.c_str()));
- EXPECT_EQ(NULL, jack_name_2);
-
- free((void*)jack_name_1);
- free((void*)jack_name_2);
-}
-
-TEST(AlsaUcm, GetJackControlForDevice) {
- struct cras_use_case_mgr* mgr = &cras_ucm_mgr;
- const char *jack_name_1, *jack_name_2;
- const char* devices[] = {"Dev1", "Comment for Dev1", "Dev2",
- "Comment for Dev2"};
-
- ResetStubData();
-
- fake_list["_devices/HiFi"] = devices;
- fake_list_size["_devices/HiFi"] = 4;
- std::string id_1 = "=JackControl/Dev1/HiFi";
- std::string value_1 = "JackControl1";
-
- snd_use_case_get_value[id_1] = value_1;
- jack_name_1 = ucm_get_jack_control_for_dev(mgr, "Dev1");
- jack_name_2 = ucm_get_jack_control_for_dev(mgr, "Dev2");
-
- EXPECT_EQ(0, strcmp(jack_name_1, value_1.c_str()));
- EXPECT_EQ(NULL, jack_name_2);
-
- free((void*)jack_name_1);
- free((void*)jack_name_2);
-}
-
-TEST(AlsaUcm, GetPeriodFramesForDevice) {
- struct cras_use_case_mgr* mgr = &cras_ucm_mgr;
- int dma_period_1, dma_period_2, dma_period_3;
- const char* devices[] = {"Dev1", "Comment for Dev1",
- "Dev2", "Comment for Dev2",
- "Dev3", "Comment for Dev3"};
-
- ResetStubData();
-
- fake_list["_devices/HiFi"] = devices;
- fake_list_size["_devices/HiFi"] = 6;
- std::string id_1 = "=DmaPeriodMicrosecs/Dev1/HiFi";
- std::string value_1 = "1000";
- std::string id_2 = "=DmaPeriodMicrosecs/Dev2/HiFi";
- std::string value_2 = "-10";
-
- snd_use_case_get_value[id_1] = value_1;
- snd_use_case_get_value[id_2] = value_2;
-
- dma_period_1 = ucm_get_dma_period_for_dev(mgr, "Dev1");
- dma_period_2 = ucm_get_dma_period_for_dev(mgr, "Dev2");
- dma_period_3 = ucm_get_dma_period_for_dev(mgr, "Dev3");
-
- EXPECT_EQ(1000, dma_period_1);
- EXPECT_EQ(0, dma_period_2);
- EXPECT_EQ(0, dma_period_3);
-}
-
-TEST(AlsaUcm, UcmSection) {
- struct ucm_section* section_list = NULL;
- struct ucm_section* section;
- struct mixer_name* controls = NULL;
- struct mixer_name* m_name;
- int dev_idx = 0;
- int dependent_dev_idx = -1;
- size_t i;
- enum CRAS_STREAM_DIRECTION dir = CRAS_STREAM_OUTPUT;
- static const char* name = "Headphone";
- static const char* pcm_name = "hw:0,1";
- static const char* jack_name = "my-card-name Headset Jack";
- static const char* jack_type = "gpio";
- static const char* mixer_name = "Control1";
- static const char* coupled_names[] = {"Coupled1", "Coupled2"};
-
- section =
- ucm_section_create(NULL, NULL, 0, -1, CRAS_STREAM_OUTPUT, NULL, NULL);
- EXPECT_EQ(reinterpret_cast<struct ucm_section*>(NULL), section);
-
- section = ucm_section_create(name, pcm_name, dev_idx, dependent_dev_idx, dir,
- jack_name, jack_type);
- EXPECT_NE(reinterpret_cast<struct ucm_section*>(NULL), section);
- EXPECT_NE(name, section->name);
- EXPECT_EQ(0, strcmp(name, section->name));
- EXPECT_EQ(dev_idx, section->dev_idx);
- EXPECT_EQ(dir, section->dir);
- EXPECT_NE(jack_name, section->jack_name);
- EXPECT_NE(jack_type, section->jack_type);
- EXPECT_EQ(section->prev, section);
- EXPECT_EQ(reinterpret_cast<const char*>(NULL), section->mixer_name);
- EXPECT_EQ(reinterpret_cast<struct mixer_name*>(NULL), section->coupled);
-
- EXPECT_EQ(-EINVAL, ucm_section_set_mixer_name(section, NULL));
- EXPECT_EQ(-EINVAL, ucm_section_set_mixer_name(NULL, mixer_name));
- EXPECT_EQ(0, ucm_section_set_mixer_name(section, mixer_name));
-
- EXPECT_NE(section->mixer_name, mixer_name);
- EXPECT_EQ(0, strcmp(section->mixer_name, mixer_name));
-
- EXPECT_EQ(-EINVAL, ucm_section_add_coupled(section, NULL, MIXER_NAME_VOLUME));
- EXPECT_EQ(-EINVAL,
- ucm_section_add_coupled(NULL, coupled_names[0], MIXER_NAME_VOLUME));
- EXPECT_EQ(
- 0, ucm_section_add_coupled(section, coupled_names[0], MIXER_NAME_VOLUME));
-
- EXPECT_EQ(-EINVAL, ucm_section_concat_coupled(section, NULL));
- EXPECT_EQ(-EINVAL, ucm_section_concat_coupled(
- NULL, reinterpret_cast<struct mixer_name*>(0x1111)));
-
- controls = NULL;
- for (i = 1; i < ARRAY_SIZE(coupled_names); i++) {
- controls = mixer_name_add(controls, coupled_names[i], CRAS_STREAM_OUTPUT,
- MIXER_NAME_VOLUME);
- }
- /* Add controls to the list of coupled controls for this section. */
- EXPECT_EQ(0, ucm_section_concat_coupled(section, controls));
-
- i = 0;
- DL_FOREACH (section->coupled, m_name) {
- EXPECT_NE(m_name->name, coupled_names[i]);
- EXPECT_EQ(0, strcmp(m_name->name, coupled_names[i]));
- i++;
- }
- EXPECT_EQ(i, ARRAY_SIZE(coupled_names));
-
- DL_APPEND(section_list, section);
- ucm_section_free_list(section_list);
-}
-
-TEST(AlsaUcm, GetSections) {
- struct cras_use_case_mgr* mgr = &cras_ucm_mgr;
- struct ucm_section* sections;
- struct ucm_section* section;
- struct mixer_name* m_name;
- int section_count = 0;
- int dev_idx;
- int i = 0;
- const char* devices[] = {"Headphone", "The headphones jack.",
- "Speaker", "The speakers.",
- "Mic", "Microphone jack.",
- "Internal Mic", "Internal Microphones",
- "HDMI", "HDMI output"};
- const char* ids[] = {"=PlaybackPCM/Headphone/HiFi",
- "=JackDev/Headphone/HiFi",
- "=JackSwitch/Headphone/HiFi",
- "=CoupledMixers/Headphone/HiFi",
-
- "=PlaybackPCM/Speaker/HiFi",
- "=CoupledMixers/Speaker/HiFi",
- "=DependentPCM/Speaker/HiFi",
-
- "=CapturePCM/Mic/HiFi",
- "=JackDev/Mic/HiFi",
- "=JackSwitch/Mic/HiFi",
- "=CaptureMixerElem/Mic/HiFi",
-
- "=CapturePCM/Internal Mic/HiFi",
- "=CoupledMixers/Internal Mic/HiFi",
- "=JackSwitch/Internal Mic/HiFi",
-
- "=PlaybackPCM/HDMI/HiFi",
- "=PlaybackMixerElem/HDMI/HiFi",
-
- NULL};
- const char* values[] = {
- "hw:my-sound-card,0",
- "my-sound-card Headset Jack",
- "2",
- "HP-L,HP-R",
-
- "hw:my-sound-card,1",
- "SPK-L,SPK-R",
- "hw:my-sound-card,0",
-
- "hw:my-sound-card,2",
- "my-sound-card Headset Jack",
- "0",
- "CAPTURE",
-
- "hw:my-sound-card,3",
- "MIC-L,MIC-R",
- "-10",
-
- "hw:my-sound-card,4",
- "HDMI",
- };
-
- ResetStubData();
-
- fake_list["_devices/HiFi"] = devices;
- fake_list_size["_devices/HiFi"] = ARRAY_SIZE(devices);
-
- while (ids[i]) {
- snd_use_case_get_value[ids[i]] = values[i];
- i++;
- }
-
- sections = ucm_get_sections(mgr);
- ASSERT_NE(sections, (struct ucm_section*)NULL);
- DL_FOREACH (sections, section) { section_count++; }
- EXPECT_EQ(section_count, ARRAY_SIZE(devices) / 2);
-
- // Headphone
- section = sections;
- EXPECT_EQ(0, strcmp(section->pcm_name, "hw:my-sound-card,0"));
- EXPECT_EQ(0, strcmp(section->name, "Headphone"));
- EXPECT_EQ(0, section->dev_idx);
- EXPECT_EQ(CRAS_STREAM_OUTPUT, section->dir);
- EXPECT_EQ(0, strcmp(section->jack_name, values[1]));
- EXPECT_EQ(0, strcmp(section->jack_type, "gpio"));
- EXPECT_EQ(NULL, section->mixer_name);
- ASSERT_NE((struct mixer_name*)NULL, section->coupled);
- m_name = section->coupled;
- EXPECT_EQ(0, strcmp(m_name->name, "HP-L"));
- m_name = m_name->next;
- EXPECT_EQ(0, strcmp(m_name->name, "HP-R"));
- EXPECT_EQ(NULL, m_name->next);
- EXPECT_EQ(2, section->jack_switch);
- dev_idx = section->dev_idx;
-
- // Speaker
- section = section->next;
- EXPECT_EQ(0, strcmp(section->pcm_name, "hw:my-sound-card,1"));
- EXPECT_EQ(0, strcmp(section->name, "Speaker"));
- EXPECT_EQ(1, section->dev_idx);
- EXPECT_EQ(CRAS_STREAM_OUTPUT, section->dir);
- EXPECT_EQ(NULL, section->jack_name);
- EXPECT_EQ(NULL, section->jack_type);
- EXPECT_EQ(-1, section->jack_switch);
- EXPECT_EQ(NULL, section->mixer_name);
- EXPECT_EQ(dev_idx, section->dependent_dev_idx);
- ASSERT_NE((struct mixer_name*)NULL, section->coupled);
- m_name = section->coupled;
- EXPECT_EQ(0, strcmp(m_name->name, "SPK-L"));
- m_name = m_name->next;
- EXPECT_EQ(0, strcmp(m_name->name, "SPK-R"));
- EXPECT_EQ(NULL, m_name->next);
-
- // Mic
- section = section->next;
- EXPECT_EQ(0, strcmp(section->pcm_name, "hw:my-sound-card,2"));
- EXPECT_EQ(0, strcmp(section->name, "Mic"));
- EXPECT_EQ(2, section->dev_idx);
- EXPECT_EQ(CRAS_STREAM_INPUT, section->dir);
- EXPECT_EQ(0, strcmp(section->jack_name, values[1]));
- EXPECT_EQ(0, strcmp(section->jack_type, "gpio"));
- EXPECT_EQ(0, section->jack_switch);
- ASSERT_NE((const char*)NULL, section->mixer_name);
- EXPECT_EQ(0, strcmp(section->mixer_name, "CAPTURE"));
- EXPECT_EQ(NULL, section->coupled);
-
- // Internal Mic
- section = section->next;
- EXPECT_EQ(0, strcmp(section->pcm_name, "hw:my-sound-card,3"));
- EXPECT_EQ(0, strcmp(section->name, "Internal Mic"));
- EXPECT_EQ(3, section->dev_idx);
- EXPECT_EQ(CRAS_STREAM_INPUT, section->dir);
- EXPECT_EQ(NULL, section->jack_name);
- EXPECT_EQ(NULL, section->jack_type);
- EXPECT_EQ(-1, section->jack_switch);
- EXPECT_EQ(NULL, section->mixer_name);
- ASSERT_NE((struct mixer_name*)NULL, section->coupled);
- m_name = section->coupled;
- EXPECT_EQ(0, strcmp(m_name->name, "MIC-L"));
- m_name = m_name->next;
- EXPECT_EQ(0, strcmp(m_name->name, "MIC-R"));
-
- // HDMI
- section = section->next;
- EXPECT_EQ(0, strcmp(section->pcm_name, "hw:my-sound-card,4"));
- EXPECT_EQ(0, strcmp(section->name, "HDMI"));
- EXPECT_EQ(4, section->dev_idx);
- EXPECT_EQ(CRAS_STREAM_OUTPUT, section->dir);
- EXPECT_EQ(NULL, section->jack_name);
- EXPECT_EQ(NULL, section->jack_type);
- EXPECT_EQ(-1, section->jack_switch);
- ASSERT_NE((const char*)NULL, section->mixer_name);
- EXPECT_EQ(0, strcmp(section->mixer_name, "HDMI"));
-
- EXPECT_EQ(NULL, section->next);
- ucm_section_free_list(sections);
-}
-
-TEST(AlsaUcm, GetSectionsMissingPCM) {
- struct cras_use_case_mgr* mgr = &cras_ucm_mgr;
- struct ucm_section* sections;
- int i = 0;
- const char* devices[] = {"Headphone", "The headphones jack."};
- const char* ids[] = {"=JackDev/Headphone/HiFi",
- "=CoupledMixers/Headphone/HiFi", NULL};
- const char* values[] = {
- "my-sound-card Headset Jack",
- "HP-L,HP-R",
- };
-
- ResetStubData();
-
- fake_list["_devices/HiFi"] = devices;
- fake_list_size["_devices/HiFi"] = ARRAY_SIZE(devices);
-
- while (ids[i]) {
- snd_use_case_get_value[ids[i]] = values[i];
- i++;
- }
-
- sections = ucm_get_sections(mgr);
- EXPECT_EQ(NULL, sections);
-}
-
-TEST(AlsaUcm, CheckUseCaseVerbs) {
- struct cras_use_case_mgr* mgr = &cras_ucm_mgr;
-
- /* Verifies the mapping between stream types and verbs are correct. */
- mgr->use_case = CRAS_STREAM_TYPE_DEFAULT;
- EXPECT_EQ(0, strcmp("HiFi", uc_verb(mgr)));
- mgr->use_case = CRAS_STREAM_TYPE_MULTIMEDIA;
- EXPECT_EQ(0, strcmp("Multimedia", uc_verb(mgr)));
- mgr->use_case = CRAS_STREAM_TYPE_VOICE_COMMUNICATION;
- EXPECT_EQ(0, strcmp("Voice Call", uc_verb(mgr)));
- mgr->use_case = CRAS_STREAM_TYPE_SPEECH_RECOGNITION;
- EXPECT_EQ(0, strcmp("Speech", uc_verb(mgr)));
- mgr->use_case = CRAS_STREAM_TYPE_PRO_AUDIO;
- EXPECT_EQ(0, strcmp("Pro Audio", uc_verb(mgr)));
-}
-
-TEST(AlsaUcm, GetAvailUseCases) {
- struct cras_use_case_mgr* mgr;
- const char* verbs[] = {"HiFi", "Comment for Verb1",
- "Voice Call", "Comment for Verb2",
- "Speech", "Comment for Verb3"};
-
- ResetStubData();
-
- fake_list["_verbs"] = verbs;
- fake_list_size["_verbs"] = 6;
-
- mgr = ucm_create("foo");
- EXPECT_EQ(0x0D, mgr->avail_use_cases);
- ucm_destroy(mgr);
-}
-
-TEST(AlsaUcm, SetUseCase) {
- struct cras_use_case_mgr* mgr;
- const char* verbs[] = {"HiFi", "Comment for Verb1",
- "Voice Call", "Comment for Verb2",
- "Speech", "Comment for Verb3"};
- int rc;
-
- ResetStubData();
-
- fake_list["_verbs"] = verbs;
- fake_list_size["_verbs"] = 6;
-
- mgr = ucm_create("foo");
- EXPECT_EQ(snd_use_case_set_param[0],
- std::make_pair(std::string("_verb"), std::string("HiFi")));
-
- rc = ucm_set_use_case(mgr, CRAS_STREAM_TYPE_VOICE_COMMUNICATION);
- EXPECT_EQ(0, rc);
- EXPECT_EQ(mgr->use_case, CRAS_STREAM_TYPE_VOICE_COMMUNICATION);
- EXPECT_EQ(snd_use_case_set_param[1],
- std::make_pair(std::string("_verb"), std::string("Voice Call")));
-
- /* Request unavailable use case will fail. */
- rc = ucm_set_use_case(mgr, CRAS_STREAM_TYPE_PRO_AUDIO);
- EXPECT_EQ(-1, rc);
- /* cras_use_case_mgr's use case should not be changed. */
- EXPECT_EQ(mgr->use_case, CRAS_STREAM_TYPE_VOICE_COMMUNICATION);
- /* And snd_use_case_set not being called. */
- EXPECT_EQ(2, snd_use_case_set_param.size());
-
- ucm_destroy(mgr);
-}
-
-/* Stubs */
-
-extern "C" {
-
-int snd_use_case_mgr_open(snd_use_case_mgr_t** uc_mgr, const char* card_name) {
- snd_use_case_mgr_open_called++;
- *uc_mgr = snd_use_case_mgr_open_mgr_ptr;
- return snd_use_case_mgr_open_return;
-}
-
-int snd_use_case_mgr_close(snd_use_case_mgr_t* uc_mgr) {
- snd_use_case_mgr_close_called++;
- return 0;
-}
-
-int snd_use_case_get(snd_use_case_mgr_t* uc_mgr,
- const char* identifier,
- const char** value) {
- snd_use_case_get_called++;
- snd_use_case_get_id.push_back(std::string(identifier));
- if (snd_use_case_get_value.find(identifier) == snd_use_case_get_value.end()) {
- *value = NULL;
- return -1;
- }
- *value = strdup(snd_use_case_get_value[identifier].c_str());
- return 0;
-}
-
-int snd_use_case_set(snd_use_case_mgr_t* uc_mgr,
- const char* identifier,
- const char* value) {
- snd_use_case_set_called++;
- snd_use_case_set_param.push_back(
- std::make_pair(std::string(identifier), std::string(value)));
- return snd_use_case_set_return;
-}
-
-int snd_use_case_get_list(snd_use_case_mgr_t* uc_mgr,
- const char* identifier,
- const char** list[]) {
- *list = fake_list[identifier];
- return fake_list_size[identifier];
-}
-
-int snd_use_case_free_list(const char* list[], int items) {
- snd_use_case_free_list_called++;
- return 0;
-}
-
-int snd_use_case_geti(snd_use_case_mgr_t* uc_mgr,
- const char* identifier,
- long* value) {
- snd_use_case_geti_called++;
- if (snd_use_case_geti_value.find(identifier) ==
- snd_use_case_geti_value.end()) {
- *value = 0;
- return -1;
- }
- *value = snd_use_case_geti_value[identifier];
- return 0;
-}
-
-} /* extern "C" */
-
-} // namespace
-
-int main(int argc, char** argv) {
- ::testing::InitGoogleTest(&argc, argv);
- openlog(NULL, LOG_PERROR, LOG_USER);
- return RUN_ALL_TESTS();
-}