diff options
author | Jorge E. Moreira <jemoreira@google.com> | 2021-02-08 17:59:31 -0800 |
---|---|---|
committer | Jorge E. Moreira <jemoreira@google.com> | 2021-02-08 17:59:31 -0800 |
commit | dc2b74a983c1182f9f4e05a8e6e91beb04792c51 (patch) | |
tree | 8c44572911d479dc6dca87dd1cc2e9eca46500ba /cras/src/tests | |
parent | c8f8b3cd94220d03fcdee753d8fc762224c3d177 (diff) | |
parent | 9668bb7e705f4102e0558c522f1488a966a51826 (diff) | |
download | adhd-dc2b74a983c1182f9f4e05a8e6e91beb04792c51.tar.gz |
Merge branch 'upstream-master'
Change-Id: I25af576b68bcd95ee401067ee798e963f9a96264
Diffstat (limited to 'cras/src/tests')
27 files changed, 534 insertions, 294 deletions
diff --git a/cras/src/tests/a2dp_iodev_unittest.cc b/cras/src/tests/a2dp_iodev_unittest.cc index f03a6147..523a62e4 100644 --- a/cras/src/tests/a2dp_iodev_unittest.cc +++ b/cras/src/tests/a2dp_iodev_unittest.cc @@ -44,7 +44,7 @@ static size_t cras_iodev_free_resources_called; static int a2dp_write_return_val[MAX_A2DP_WRITE_CALLS]; static unsigned int a2dp_write_index; static int a2dp_encode_called; -static cras_audio_area* dummy_audio_area; +static cras_audio_area* mock_audio_area; static thread_callback write_callback; static void* write_callback_data; static const char* fake_device_name = "fake device name"; @@ -79,9 +79,9 @@ void ResetStubData() { fake_transport = reinterpret_cast<struct cras_bt_transport*>(0x123); - if (!dummy_audio_area) { - dummy_audio_area = (cras_audio_area*)calloc( - 1, sizeof(*dummy_audio_area) + sizeof(cras_channel_area) * 2); + if (!mock_audio_area) { + mock_audio_area = (cras_audio_area*)calloc( + 1, sizeof(*mock_audio_area) + sizeof(cras_channel_area) * 2); } write_callback = NULL; @@ -108,8 +108,8 @@ class A2dpIodev : public testing::Test { } virtual void TearDown() { - free(dummy_audio_area); - dummy_audio_area = NULL; + free(mock_audio_area); + mock_audio_area = NULL; free(atlog); } }; @@ -899,7 +899,7 @@ int clock_gettime(clockid_t clk_id, struct timespec* tp) { } void cras_iodev_init_audio_area(struct cras_iodev* iodev, int num_channels) { - iodev->area = dummy_audio_area; + iodev->area = mock_audio_area; } void cras_iodev_free_audio_area(struct cras_iodev* iodev) {} @@ -917,12 +917,15 @@ int cras_iodev_fill_odev_zeros(struct cras_iodev* odev, unsigned int frames) { void cras_audio_area_config_buf_pointers(struct cras_audio_area* area, const struct cras_audio_format* fmt, uint8_t* base_buffer) { - dummy_audio_area->channels[0].buf = base_buffer; + mock_audio_area->channels[0].buf = base_buffer; } struct audio_thread* cras_iodev_list_get_audio_thread() { return NULL; } +// From ewma_power +void ewma_power_disable(struct ewma_power* ewma) {} + // From audio_thread struct audio_thread_event_log* atlog; diff --git a/cras/src/tests/alsa_helpers_unittest.cc b/cras/src/tests/alsa_helpers_unittest.cc index 0e8112cd..32df30af 100644 --- a/cras/src/tests/alsa_helpers_unittest.cc +++ b/cras/src/tests/alsa_helpers_unittest.cc @@ -163,34 +163,12 @@ TEST(AlsaHelper, MatchChannelMapCapability51) { } TEST(AlsaHelper, Htimestamp) { - snd_pcm_t* dummy_handle = reinterpret_cast<snd_pcm_t*>(0x1); + snd_pcm_t* mock_handle = reinterpret_cast<snd_pcm_t*>(0x1); snd_pcm_uframes_t used; snd_pcm_uframes_t severe_underrun_frames = 480; struct timespec tstamp; - int htimestamp_enabled = 1; const char* dev_name = "dev_name"; - // Enable htimestamp use. - ResetStubData(); - EXPECT_EQ(0, cras_alsa_set_swparams(dummy_handle, &htimestamp_enabled)); - EXPECT_EQ(snd_pcm_sw_params_set_tstamp_mode_called, 1); - EXPECT_EQ(snd_pcm_sw_params_set_tstamp_type_called, 1); - EXPECT_EQ(1, htimestamp_enabled); - - // Try to enable htimestamp use: not supported. - ResetStubData(); - snd_pcm_sw_params_ret_vals.push_back(-EINVAL); - EXPECT_EQ(0, cras_alsa_set_swparams(dummy_handle, &htimestamp_enabled)); - EXPECT_EQ(snd_pcm_sw_params_set_tstamp_mode_called, 2); - EXPECT_EQ(snd_pcm_sw_params_set_tstamp_type_called, 2); - EXPECT_EQ(0, htimestamp_enabled); - - // Disable htimestamp use. - ResetStubData(); - EXPECT_EQ(0, cras_alsa_set_swparams(dummy_handle, &htimestamp_enabled)); - EXPECT_EQ(snd_pcm_sw_params_set_tstamp_mode_called, 0); - EXPECT_EQ(snd_pcm_sw_params_set_tstamp_type_called, 0); - ResetStubData(); tstamp.tv_sec = 0; tstamp.tv_nsec = 0; @@ -198,7 +176,7 @@ TEST(AlsaHelper, Htimestamp) { snd_pcm_htimestamp_tstamp_ret_val.tv_sec = 10; snd_pcm_htimestamp_tstamp_ret_val.tv_nsec = 10000; - cras_alsa_get_avail_frames(dummy_handle, 48000, severe_underrun_frames, + cras_alsa_get_avail_frames(mock_handle, 48000, severe_underrun_frames, dev_name, &used, &tstamp); EXPECT_EQ(used, snd_pcm_htimestamp_avail_ret_val); EXPECT_EQ(tstamp.tv_sec, snd_pcm_htimestamp_tstamp_ret_val.tv_sec); @@ -206,7 +184,7 @@ TEST(AlsaHelper, Htimestamp) { } TEST(AlsaHelper, GetAvailFramesSevereUnderrun) { - snd_pcm_t* dummy_handle = reinterpret_cast<snd_pcm_t*>(0x1); + snd_pcm_t* mock_handle = reinterpret_cast<snd_pcm_t*>(0x1); snd_pcm_uframes_t avail; snd_pcm_uframes_t severe_underrun_frames = 480; snd_pcm_uframes_t buffer_size = 48000; @@ -216,7 +194,7 @@ TEST(AlsaHelper, GetAvailFramesSevereUnderrun) { ResetStubData(); snd_pcm_htimestamp_avail_ret_val = buffer_size + severe_underrun_frames + 1; - rc = cras_alsa_get_avail_frames(dummy_handle, buffer_size, + rc = cras_alsa_get_avail_frames(mock_handle, buffer_size, severe_underrun_frames, dev_name, &avail, &tstamp); // Returns -EPIPE when severe underrun happens. @@ -224,7 +202,7 @@ TEST(AlsaHelper, GetAvailFramesSevereUnderrun) { ResetStubData(); snd_pcm_htimestamp_avail_ret_val = buffer_size + severe_underrun_frames; - rc = cras_alsa_get_avail_frames(dummy_handle, buffer_size, + rc = cras_alsa_get_avail_frames(mock_handle, buffer_size, severe_underrun_frames, dev_name, &avail, &tstamp); // Underrun which is not severe enough will be masked. @@ -234,7 +212,7 @@ TEST(AlsaHelper, GetAvailFramesSevereUnderrun) { ResetStubData(); snd_pcm_htimestamp_avail_ret_val = buffer_size - 1; - rc = cras_alsa_get_avail_frames(dummy_handle, buffer_size, + rc = cras_alsa_get_avail_frames(mock_handle, buffer_size, severe_underrun_frames, dev_name, &avail, &tstamp); // When avail < buffer_size, there is no underrun. diff --git a/cras/src/tests/alsa_io_unittest.cc b/cras/src/tests/alsa_io_unittest.cc index ba650a2f..b3059a23 100644 --- a/cras/src/tests/alsa_io_unittest.cc +++ b/cras/src/tests/alsa_io_unittest.cc @@ -137,7 +137,6 @@ static int cras_iodev_frames_queued_ret; static int cras_iodev_buffer_avail_ret; static int cras_alsa_resume_appl_ptr_called; static int cras_alsa_resume_appl_ptr_ahead; -static int ucm_get_enable_htimestamp_flag_ret; static const struct cras_volume_curve* fake_get_dBFS_volume_curve_val; static int cras_iodev_dsp_set_swap_mode_for_node_called; static std::map<std::string, long> ucm_get_default_node_gain_values; @@ -220,7 +219,6 @@ void ResetStubData() { cras_iodev_buffer_avail_ret = 0; cras_alsa_resume_appl_ptr_called = 0; cras_alsa_resume_appl_ptr_ahead = 0; - ucm_get_enable_htimestamp_flag_ret = 0; fake_get_dBFS_volume_curve_val = NULL; cras_iodev_dsp_set_swap_mode_for_node_called = 0; ucm_get_default_node_gain_values.clear(); @@ -2473,7 +2471,7 @@ int cras_alsa_set_hwparams(snd_pcm_t* handle, unsigned int dma_period_time) { return 0; } -int cras_alsa_set_swparams(snd_pcm_t* handle, int* enable_htimestamp) { +int cras_alsa_set_swparams(snd_pcm_t* handle) { return 0; } int cras_alsa_get_avail_frames(snd_pcm_t* handle, @@ -2768,10 +2766,6 @@ int ucm_get_min_buffer_level(struct cras_use_case_mgr* mgr, return 0; } -unsigned int ucm_get_enable_htimestamp_flag(struct cras_use_case_mgr* mgr) { - return ucm_get_enable_htimestamp_flag_ret; -} - unsigned int ucm_get_disable_software_volume(struct cras_use_case_mgr* mgr) { return 0; } diff --git a/cras/src/tests/alsa_ucm_unittest.cc b/cras/src/tests/alsa_ucm_unittest.cc index efb82652..44c35879 100644 --- a/cras/src/tests/alsa_ucm_unittest.cc +++ b/cras/src/tests/alsa_ucm_unittest.cc @@ -862,28 +862,6 @@ TEST(AlsaUcm, UseFullySpecifiedUCMConfig) { ASSERT_FALSE(fully_specified_flag); } -TEST(AlsaUcm, EnableHtimestampFlag) { - struct cras_use_case_mgr* mgr = &cras_ucm_mgr; - unsigned int enable_htimestamp_flag; - - std::string id = "=EnableHtimestamp//HiFi"; - ResetStubData(); - - /* Flag is not set */ - enable_htimestamp_flag = ucm_get_enable_htimestamp_flag(mgr); - ASSERT_FALSE(enable_htimestamp_flag); - - /* Flag is set to "1". */ - snd_use_case_get_value[id] = std::string("1"); - enable_htimestamp_flag = ucm_get_enable_htimestamp_flag(mgr); - ASSERT_TRUE(enable_htimestamp_flag); - - /* Flag is set to "0". */ - snd_use_case_get_value[id] = std::string("0"); - enable_htimestamp_flag = ucm_get_enable_htimestamp_flag(mgr); - ASSERT_FALSE(enable_htimestamp_flag); -} - TEST(AlsaUcm, GetMixerNameForDevice) { struct cras_use_case_mgr* mgr = &cras_ucm_mgr; const char *mixer_name_1, *mixer_name_2; diff --git a/cras/src/tests/audio_thread_unittest_obsolete.cc b/cras/src/tests/audio_thread_unittest_obsolete.cc index 0baeb38f..ae9f5ef3 100644 --- a/cras/src/tests/audio_thread_unittest_obsolete.cc +++ b/cras/src/tests/audio_thread_unittest_obsolete.cc @@ -52,8 +52,8 @@ static unsigned int dev_stream_mix_called; static struct timespec time_now; static int cras_fmt_conversion_needed_return_val; -static struct cras_audio_area* dummy_audio_area1; -static struct cras_audio_area* dummy_audio_area2; +static struct cras_audio_area* mock_audio_area1; +static struct cras_audio_area* mock_audio_area2; static struct cras_audio_format cras_iodev_set_format_val; static struct dev_stream_capture_call dev_stream_capture_call; @@ -95,18 +95,18 @@ class ReadStreamSuite : public testing::Test { SetupRstream(&rstream2_, 2); shm2_ = cras_rstream_input_shm(rstream2_); - dummy_audio_area1 = (cras_audio_area*)calloc( + mock_audio_area1 = (cras_audio_area*)calloc( 1, sizeof(cras_audio_area) + 2 * sizeof(cras_channel_area)); - dummy_audio_area1->num_channels = 2; - channel_area_set_channel(&dummy_audio_area1->channels[0], CRAS_CH_FL); - channel_area_set_channel(&dummy_audio_area1->channels[1], CRAS_CH_FR); - rstream_->input_audio_area = dummy_audio_area1; - dummy_audio_area2 = (cras_audio_area*)calloc( + mock_audio_area1->num_channels = 2; + channel_area_set_channel(&mock_audio_area1->channels[0], CRAS_CH_FL); + channel_area_set_channel(&mock_audio_area1->channels[1], CRAS_CH_FR); + rstream_->input_audio_area = mock_audio_area1; + mock_audio_area2 = (cras_audio_area*)calloc( 1, sizeof(cras_audio_area) + 2 * sizeof(cras_channel_area)); - dummy_audio_area2->num_channels = 2; - channel_area_set_channel(&dummy_audio_area2->channels[0], CRAS_CH_FL); - channel_area_set_channel(&dummy_audio_area2->channels[1], CRAS_CH_FR); - rstream2_->input_audio_area = dummy_audio_area2; + mock_audio_area2->num_channels = 2; + channel_area_set_channel(&mock_audio_area2->channels[0], CRAS_CH_FL); + channel_area_set_channel(&mock_audio_area2->channels[1], CRAS_CH_FR); + rstream2_->input_audio_area = mock_audio_area2; dev_stream_mix_dont_fill_next = 0; dev_stream_mix_count = 0; @@ -123,8 +123,8 @@ class ReadStreamSuite : public testing::Test { free(rstream_); free(shm2_->area); free(rstream2_); - free(dummy_audio_area1); - free(dummy_audio_area2); + free(mock_audio_area1); + free(mock_audio_area2); } void SetupRstream(struct cras_rstream** rstream, int fd) { @@ -1444,18 +1444,18 @@ class ActiveDevicesSuite : public testing::Test { rstream2_->buffer_frames -= 50; rstream2_->cb_threshold -= 50; - dummy_audio_area1 = (cras_audio_area*)calloc( + mock_audio_area1 = (cras_audio_area*)calloc( 1, sizeof(cras_audio_area) + 2 * sizeof(cras_channel_area)); - dummy_audio_area1->num_channels = 2; - channel_area_set_channel(&dummy_audio_area1->channels[0], CRAS_CH_FL); - channel_area_set_channel(&dummy_audio_area1->channels[1], CRAS_CH_FR); - rstream_->input_audio_area = dummy_audio_area1; - dummy_audio_area2 = (cras_audio_area*)calloc( + mock_audio_area1->num_channels = 2; + channel_area_set_channel(&mock_audio_area1->channels[0], CRAS_CH_FL); + channel_area_set_channel(&mock_audio_area1->channels[1], CRAS_CH_FR); + rstream_->input_audio_area = mock_audio_area1; + mock_audio_area2 = (cras_audio_area*)calloc( 1, sizeof(cras_audio_area) + 2 * sizeof(cras_channel_area)); - dummy_audio_area2->num_channels = 2; - channel_area_set_channel(&dummy_audio_area2->channels[0], CRAS_CH_FL); - channel_area_set_channel(&dummy_audio_area2->channels[1], CRAS_CH_FR); - rstream2_->input_audio_area = dummy_audio_area2; + mock_audio_area2->num_channels = 2; + channel_area_set_channel(&mock_audio_area2->channels[0], CRAS_CH_FL); + channel_area_set_channel(&mock_audio_area2->channels[1], CRAS_CH_FR); + rstream2_->input_audio_area = mock_audio_area2; cras_iodev_set_format_called = 0; close_dev_called_ = 0; @@ -1483,8 +1483,8 @@ class ActiveDevicesSuite : public testing::Test { shm = cras_rstream_output_shm(rstream_); free(shm->header); free(rstream_); - free(dummy_audio_area1); - free(dummy_audio_area2); + free(mock_audio_area1); + free(mock_audio_area2); } void SetupRstream(struct cras_rstream** rstream) { diff --git a/cras/src/tests/bt_device_unittest.cc b/cras/src/tests/bt_device_unittest.cc index a9213f3d..ccb581cc 100644 --- a/cras/src/tests/bt_device_unittest.cc +++ b/cras/src/tests/bt_device_unittest.cc @@ -228,7 +228,8 @@ TEST_F(BtDeviceTestSuite, SetDeviceConnectedA2dpOnly) { device = cras_bt_device_create(NULL, FAKE_OBJ_PATH); EXPECT_NE((void*)NULL, device); - cras_bt_device_add_supported_profiles(device, A2DP_SINK_UUID); + cras_bt_device_set_supported_profiles(device, + CRAS_BT_DEVICE_PROFILE_A2DP_SINK); cur = msg_root = NewMockDBusConnectedMessage(1); cras_bt_device_update_properties(device, (DBusMessageIter*)&cur, NULL); @@ -268,8 +269,9 @@ TEST_F(BtDeviceTestSuite, SetDeviceConnectedHfpHspOnly) { device = cras_bt_device_create(NULL, FAKE_OBJ_PATH); EXPECT_NE((void*)NULL, device); - cras_bt_device_add_supported_profiles(device, HSP_HS_UUID); - cras_bt_device_add_supported_profiles(device, HFP_HF_UUID); + cras_bt_device_set_supported_profiles( + device, CRAS_BT_DEVICE_PROFILE_HSP_HEADSET | + CRAS_BT_DEVICE_PROFILE_HFP_HANDSFREE); cur = msg_root = NewMockDBusConnectedMessage(1); cras_bt_device_update_properties(device, (DBusMessageIter*)&cur, NULL); @@ -310,9 +312,10 @@ TEST_F(BtDeviceTestSuite, SetDeviceConnectedA2dpHfpHsp) { device = cras_bt_device_create(NULL, FAKE_OBJ_PATH); EXPECT_NE((void*)NULL, device); - cras_bt_device_add_supported_profiles(device, A2DP_SINK_UUID); - cras_bt_device_add_supported_profiles(device, HSP_HS_UUID); - cras_bt_device_add_supported_profiles(device, HFP_HF_UUID); + cras_bt_device_set_supported_profiles( + device, CRAS_BT_DEVICE_PROFILE_A2DP_SINK | + CRAS_BT_DEVICE_PROFILE_HSP_HEADSET | + CRAS_BT_DEVICE_PROFILE_HFP_HANDSFREE); cur = msg_root = NewMockDBusConnectedMessage(1); cras_bt_device_update_properties(device, (DBusMessageIter*)&cur, NULL); @@ -360,9 +363,10 @@ TEST_F(BtDeviceTestSuite, DevConnectedConflictCheck) { device = cras_bt_device_create(NULL, FAKE_OBJ_PATH); EXPECT_NE((void*)NULL, device); - cras_bt_device_add_supported_profiles(device, A2DP_SINK_UUID); - cras_bt_device_add_supported_profiles(device, HSP_HS_UUID); - cras_bt_device_add_supported_profiles(device, HFP_HF_UUID); + cras_bt_device_set_supported_profiles( + device, CRAS_BT_DEVICE_PROFILE_A2DP_SINK | + CRAS_BT_DEVICE_PROFILE_HSP_HEADSET | + CRAS_BT_DEVICE_PROFILE_HFP_HANDSFREE); cur = msg_root = NewMockDBusConnectedMessage(1); cras_bt_device_update_properties(device, (DBusMessageIter*)&cur, NULL); @@ -398,9 +402,10 @@ TEST_F(BtDeviceTestSuite, A2dpDropped) { device = cras_bt_device_create(NULL, FAKE_OBJ_PATH); EXPECT_NE((void*)NULL, device); - cras_bt_device_add_supported_profiles(device, A2DP_SINK_UUID); - cras_bt_device_add_supported_profiles(device, HSP_HS_UUID); - cras_bt_device_add_supported_profiles(device, HFP_HF_UUID); + cras_bt_device_set_supported_profiles( + device, CRAS_BT_DEVICE_PROFILE_A2DP_SINK | + CRAS_BT_DEVICE_PROFILE_HSP_HEADSET | + CRAS_BT_DEVICE_PROFILE_HFP_HANDSFREE); cur = msg_root = NewMockDBusConnectedMessage(1); cras_bt_device_update_properties(device, (DBusMessageIter*)&cur, NULL); @@ -433,9 +438,10 @@ TEST_F(BtDeviceTestSuite, DevConnectDisconnectBackToBack) { device = cras_bt_device_create(NULL, FAKE_OBJ_PATH); EXPECT_NE((void*)NULL, device); - cras_bt_device_add_supported_profiles(device, A2DP_SINK_UUID); - cras_bt_device_add_supported_profiles(device, HSP_HS_UUID); - cras_bt_device_add_supported_profiles(device, HFP_HF_UUID); + cras_bt_device_set_supported_profiles( + device, CRAS_BT_DEVICE_PROFILE_A2DP_SINK | + CRAS_BT_DEVICE_PROFILE_HSP_HEADSET | + CRAS_BT_DEVICE_PROFILE_HFP_HANDSFREE); cur = msg_root = NewMockDBusConnectedMessage(1); cras_bt_device_update_properties(device, (DBusMessageIter*)&cur, NULL); @@ -500,9 +506,10 @@ TEST_F(BtDeviceTestSuite, ConnectionWatchTimeout) { device = cras_bt_device_create(NULL, FAKE_OBJ_PATH); EXPECT_NE((void*)NULL, device); - cras_bt_device_add_supported_profiles(device, A2DP_SINK_UUID); - cras_bt_device_add_supported_profiles(device, HSP_HS_UUID); - cras_bt_device_add_supported_profiles(device, HFP_HF_UUID); + cras_bt_device_set_supported_profiles( + device, CRAS_BT_DEVICE_PROFILE_A2DP_SINK | + CRAS_BT_DEVICE_PROFILE_HSP_HEADSET | + CRAS_BT_DEVICE_PROFILE_HFP_HANDSFREE); cur = msg_root = NewMockDBusConnectedMessage(1); cras_bt_device_update_properties(device, (DBusMessageIter*)&cur, NULL); diff --git a/cras/src/tests/bt_io_unittest.cc b/cras/src/tests/bt_io_unittest.cc index 7ccb669e..ee013cf3 100644 --- a/cras/src/tests/bt_io_unittest.cc +++ b/cras/src/tests/bt_io_unittest.cc @@ -423,7 +423,8 @@ int cras_iodev_list_rm_input(struct cras_iodev* dev) { } // From bt device -int cras_bt_device_get_active_profile(const struct cras_bt_device* device) { +unsigned int cras_bt_device_get_active_profile( + const struct cras_bt_device* device) { return cras_bt_device_get_active_profile_ret; } diff --git a/cras/src/tests/capture_rclient_unittest.cc b/cras/src/tests/capture_rclient_unittest.cc index 4c1ab07f..b749f1a5 100644 --- a/cras/src/tests/capture_rclient_unittest.cc +++ b/cras/src/tests/capture_rclient_unittest.cc @@ -23,8 +23,8 @@ static unsigned int cras_observer_remove_called; static int stream_list_add_called; static int stream_list_add_return; static unsigned int stream_list_rm_called; -static struct cras_audio_shm dummy_shm; -static struct cras_rstream dummy_rstream; +static struct cras_audio_shm mock_shm; +static struct cras_rstream mock_rstream; void ResetStubData() { cras_make_fd_nonblocking_called = 0; @@ -177,44 +177,6 @@ TEST_F(CCRMessageSuite, StreamConnectMessageInvalidClientId) { EXPECT_EQ(stream_id, out_msg.stream_id); } -/* - * TODO(yuhsaun): Remove this test when there are no client uses the old - * craslib. (CRAS_PROTO_VER = 5) - */ -TEST_F(CCRMessageSuite, StreamConnectMessageOldProtocal) { - struct cras_client_stream_connected out_msg; - int rc; - - struct cras_connect_message_old msg; - cras_stream_id_t stream_id = 0x10002; - - msg.proto_version = 5; - msg.direction = CRAS_STREAM_INPUT; - msg.stream_id = stream_id; - msg.stream_type = CRAS_STREAM_TYPE_DEFAULT; - msg.buffer_frames = 480; - msg.cb_threshold = 240; - msg.flags = 0; - msg.effects = 0; - pack_cras_audio_format(&msg.format, &fmt); - msg.dev_idx = NO_DEVICE; - msg.client_shm_size = 0; - msg.client_type = CRAS_CLIENT_TYPE_TEST; - msg.header.id = CRAS_SERVER_CONNECT_STREAM; - msg.header.length = sizeof(struct cras_connect_message_old); - - fd_ = 100; - rc = - rclient_->ops->handle_message_from_client(rclient_, &msg.header, &fd_, 1); - EXPECT_EQ(1, cras_make_fd_nonblocking_called); - EXPECT_EQ(1, stream_list_add_called); - EXPECT_EQ(0, stream_list_rm_called); - - rc = read(pipe_fds_[0], &out_msg, sizeof(out_msg)); - EXPECT_EQ(sizeof(out_msg), rc); - EXPECT_EQ(stream_id, out_msg.stream_id); -} - TEST_F(CCRMessageSuite, StreamDisconnectMessage) { struct cras_disconnect_stream_message msg; cras_stream_id_t stream_id = 0x10002; @@ -290,16 +252,16 @@ int stream_list_add(struct stream_list* list, struct cras_rstream** stream) { int ret; - *stream = &dummy_rstream; + *stream = &mock_rstream; stream_list_add_called++; ret = stream_list_add_return; if (ret) stream_list_add_return = -EINVAL; - dummy_rstream.shm = &dummy_shm; - dummy_rstream.direction = config->direction; - dummy_rstream.stream_id = config->stream_id; + mock_rstream.shm = &mock_shm; + mock_rstream.direction = config->direction; + mock_rstream.stream_id = config->stream_id; return ret; } diff --git a/cras/src/tests/control_rclient_unittest.cc b/cras/src/tests/control_rclient_unittest.cc index b0d01fc6..d6b63aab 100644 --- a/cras/src/tests/control_rclient_unittest.cc +++ b/cras/src/tests/control_rclient_unittest.cc @@ -47,8 +47,8 @@ static unsigned int stream_list_add_stream_called; static unsigned int stream_list_disconnect_stream_called; static unsigned int cras_iodev_list_rm_input_called; static unsigned int cras_iodev_list_rm_output_called; -static struct cras_audio_shm dummy_shm; -static struct cras_rstream dummy_rstream; +static struct cras_audio_shm mock_shm; +static struct cras_rstream mock_rstream; static size_t cras_observer_num_ops_registered; static size_t cras_observer_register_notify_called; static size_t cras_observer_add_called; @@ -222,30 +222,6 @@ TEST_F(RClientMessagesSuite, ConnectMsgWithBadFd) { stream_list_disconnect_stream_called); } -TEST_F(RClientMessagesSuite, ConnectMsgFromOldClient) { - struct cras_client_stream_connected out_msg; - int rc; - - cras_rstream_create_stream_out = rstream_; - cras_iodev_attach_stream_retval = 0; - - connect_msg_.header.length = sizeof(struct cras_connect_message_old); - connect_msg_.proto_version = 5; - - fd_ = 100; - rc = rclient_->ops->handle_message_from_client(rclient_, &connect_msg_.header, - &fd_, 1); - EXPECT_EQ(0, rc); - EXPECT_EQ(1, cras_make_fd_nonblocking_called); - - rc = read(pipe_fds_[0], &out_msg, sizeof(out_msg)); - EXPECT_EQ(sizeof(out_msg), rc); - EXPECT_EQ(stream_id_, out_msg.stream_id); - EXPECT_EQ(0, out_msg.err); - EXPECT_EQ(1, stream_list_add_stream_called); - EXPECT_EQ(0, stream_list_disconnect_stream_called); -} - TEST_F(RClientMessagesSuite, StreamConnectMessageValidDirection) { struct cras_client_stream_connected out_msg; int rc; @@ -911,16 +887,16 @@ int stream_list_add(struct stream_list* list, struct cras_rstream** stream) { int ret; - *stream = &dummy_rstream; + *stream = &mock_rstream; stream_list_add_stream_called++; ret = stream_list_add_stream_return; if (ret) stream_list_add_stream_return = -EINVAL; - dummy_rstream.shm = &dummy_shm; - dummy_rstream.direction = config->direction; - dummy_rstream.stream_id = config->stream_id; + mock_rstream.shm = &mock_shm; + mock_rstream.direction = config->direction; + mock_rstream.stream_id = config->stream_id; return ret; } @@ -987,4 +963,8 @@ bool cras_audio_format_valid(const struct cras_audio_format* fmt) { return true; } +struct packet_status_logger* cras_hfp_ag_get_wbs_logger() { + return NULL; +} + } // extern "C" diff --git a/cras/src/tests/dev_stream_unittest.cc b/cras/src/tests/dev_stream_unittest.cc index 9210021e..640ca932 100644 --- a/cras/src/tests/dev_stream_unittest.cc +++ b/cras/src/tests/dev_stream_unittest.cc @@ -340,7 +340,7 @@ TEST_F(CreateSuite, CreateSRC44to48) { // Converter tmp and output buffers are large enough for device output. unsigned int device_frames = cras_frames_at_rate(in_fmt.frame_rate, kBufferFrames, out_fmt.frame_rate); - EXPECT_LE(kBufferFrames, device_frames); // Sanity check. + EXPECT_LE(kBufferFrames, device_frames); // Soundness check. EXPECT_LE(device_frames, config_format_converter_frames); EXPECT_LE(device_frames, dev_stream->conv_buffer_size_frames); dev_stream_destroy(dev_stream); @@ -364,7 +364,7 @@ TEST_F(CreateSuite, CreateSRC44from48Input) { // Converter tmp and output buffers are large enough for device input. unsigned int device_frames = cras_frames_at_rate(out_fmt.frame_rate, kBufferFrames, in_fmt.frame_rate); - EXPECT_LE(kBufferFrames, device_frames); // Sanity check. + EXPECT_LE(kBufferFrames, device_frames); // Soundness check. EXPECT_LE(device_frames, config_format_converter_frames); EXPECT_EQ(&processed_fmt, config_format_converter_from_fmt); EXPECT_LE(device_frames, dev_stream->conv_buffer_size_frames); @@ -420,7 +420,7 @@ TEST_F(CreateSuite, CreateSRC8to48) { // Converter tmp and output buffers are large enough for device output. unsigned int device_frames = cras_frames_at_rate(in_fmt.frame_rate, kBufferFrames, out_fmt.frame_rate); - EXPECT_LE(kBufferFrames, device_frames); // Sanity check. + EXPECT_LE(kBufferFrames, device_frames); // Soundness check. EXPECT_LE(device_frames, config_format_converter_frames); EXPECT_LE(device_frames, dev_stream->conv_buffer_size_frames); dev_stream_destroy(dev_stream); @@ -441,7 +441,7 @@ TEST_F(CreateSuite, CreateSRC8from48Input) { // Converter tmp and output buffers are large enough for device input. unsigned int device_frames = cras_frames_at_rate(out_fmt.frame_rate, kBufferFrames, in_fmt.frame_rate); - EXPECT_LE(kBufferFrames, device_frames); // Sanity check. + EXPECT_LE(kBufferFrames, device_frames); // Soundness check. EXPECT_LE(device_frames, config_format_converter_frames); EXPECT_LE(device_frames, dev_stream->conv_buffer_size_frames); dev_stream_destroy(dev_stream); diff --git a/cras/src/tests/empty_iodev_unittest.cc b/cras/src/tests/empty_iodev_unittest.cc index 585fba32..148d5301 100644 --- a/cras/src/tests/empty_iodev_unittest.cc +++ b/cras/src/tests/empty_iodev_unittest.cc @@ -13,7 +13,7 @@ extern "C" { static struct timespec clock_gettime_retspec; static struct cras_audio_format fake_format; -static cras_audio_area dummy_audio_area; +static cras_audio_area mock_audio_area; namespace { @@ -57,7 +57,7 @@ int cras_iodev_default_no_stream_playback(struct cras_iodev* odev, int enable) { } void cras_iodev_init_audio_area(struct cras_iodev* iodev, int num_channels) { - iodev->area = &dummy_audio_area; + iodev->area = &mock_audio_area; } void cras_iodev_free_audio_area(struct cras_iodev* iodev) {} diff --git a/cras/src/tests/ewma_power_unittest.cc b/cras/src/tests/ewma_power_unittest.cc new file mode 100644 index 00000000..10f03189 --- /dev/null +++ b/cras/src/tests/ewma_power_unittest.cc @@ -0,0 +1,129 @@ +// Copyright (c) 2020 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> + +extern "C" { +#include "ewma_power.h" +} + +namespace { + +TEST(EWMAPower, RelativePowerValue) { + struct ewma_power ewma; + int16_t buf[480]; + float f; + int i; + + for (i = 0; i < 480; i++) + buf[i] = 0x00fe; + + ewma_power_init(&ewma, 48000); + EXPECT_EQ(48, ewma.step_fr); + + ewma_power_calculate(&ewma, buf, 1, 480); + EXPECT_LT(0.0f, ewma.power); + + // After 10ms of silence the power value decreases. + f = ewma.power; + for (i = 0; i < 480; i++) + buf[i] = 0x00; + ewma_power_calculate(&ewma, buf, 1, 480); + EXPECT_LT(ewma.power, f); + + // After 300ms of silence the power value decreases to insignificant low. + for (i = 0; i < 30; i++) + ewma_power_calculate(&ewma, buf, 1, 480); + EXPECT_LT(ewma.power, 1.0e-10); +} + +TEST(EWMAPower, PowerInStereoData) { + struct ewma_power ewma; + int16_t buf[960]; + int i; + float f; + + ewma_power_init(&ewma, 48000); + + for (i = 0; i < 960; i += 2) { + buf[i] = 0x0; + buf[i + 1] = 0x00fe; + } + ewma_power_calculate(&ewma, buf, 2, 480); + EXPECT_LT(0.0f, ewma.power); + + // After 10ms of silence the power value decreases. + f = ewma.power; + for (i = 0; i < 960; i++) + buf[i] = 0x0; + ewma_power_calculate(&ewma, buf, 2, 480); + EXPECT_LT(ewma.power, f); + + // After 300ms of silence the power value decreases to insignificant low. + for (i = 0; i < 30; i++) + ewma_power_calculate(&ewma, buf, 2, 480); + EXPECT_LT(ewma.power, 1.0e-10); + + // Assume the data is silent in the other channel. + ewma_power_init(&ewma, 48000); + + for (i = 0; i < 960; i += 2) { + buf[i] = 0x0ffe; + buf[i + 1] = 0x0; + } + ewma_power_calculate(&ewma, buf, 2, 480); + EXPECT_LT(0.0f, ewma.power); +} + +TEST(EWMAPower, PowerInAudioArea) { + struct ewma_power ewma; + struct cras_audio_area* area = cras_audio_area_create(4); + struct cras_audio_format* fmt = + cras_audio_format_create(SND_PCM_FORMAT_S16_LE, 48000, 4); + int8_t layout[CRAS_CH_MAX] = {0, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1}; + int16_t buf[1920]; + int i; + float f; + + cras_audio_format_set_channel_layout(fmt, layout); + cras_audio_area_config_channels(area, fmt); + + for (i = 0; i < 1920; i += 4) { + buf[i] = 0x0ffe; + buf[i + 1] = 0x0; + buf[i + 2] = 0x0; + buf[i + 3] = 0x0ffe; + } + ewma_power_init(&ewma, 48000); + ewma_power_calculate_area(&ewma, buf, area, 480); + f = ewma.power; + EXPECT_LT(0.0f, f); + + /* Change the layout in the same audio area. Expect the power be lower because + * one of the channel is now silent. */ + layout[CRAS_CH_FR] = 2; + cras_audio_format_set_channel_layout(fmt, layout); + cras_audio_area_config_channels(area, fmt); + ewma_power_init(&ewma, 48000); + ewma_power_calculate_area(&ewma, buf, area, 480); + EXPECT_GT(f, ewma.power); + + /* Change layout to the two silent channels. Expect power is 0.0f. */ + layout[CRAS_CH_FL] = 1; + cras_audio_format_set_channel_layout(fmt, layout); + cras_audio_area_config_channels(area, fmt); + ewma_power_init(&ewma, 48000); + ewma_power_calculate_area(&ewma, buf, area, 480); + EXPECT_EQ(0.0f, ewma.power); + + cras_audio_format_destroy(fmt); + cras_audio_area_destroy(area); +} + +} // namespace + +int main(int argc, char** argv) { + ::testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} diff --git a/cras/src/tests/fmt_conv_ops_unittest.cc b/cras/src/tests/fmt_conv_ops_unittest.cc index d8feeab3..ebe8b65d 100644 --- a/cras/src/tests/fmt_conv_ops_unittest.cc +++ b/cras/src/tests/fmt_conv_ops_unittest.cc @@ -4,6 +4,8 @@ #include <gtest/gtest.h> #include <limits.h> +#include <math.h> +#include <stdint.h> #include <sys/param.h> #include <memory> @@ -477,7 +479,7 @@ TEST(FormatConverterOpsTest, _51ToStereoS16LE) { const size_t out_ch = 2; const size_t left = 0; const size_t right = 1; - const size_t center = 4; + const size_t center = 2; S16LEPtr src = CreateS16LE(frames * in_ch); S16LEPtr dst = CreateS16LE(frames * out_ch); @@ -486,11 +488,58 @@ TEST(FormatConverterOpsTest, _51ToStereoS16LE) { s16_51_to_stereo((uint8_t*)src.get(), frames, (uint8_t*)dst.get()); EXPECT_EQ(ret, frames); + /* Use the normalized_factor from the left channel = 1 / (|1| + |0.707|) + * to prevent mixing overflow. + */ + const float normalized_factor = 0.585; + + for (size_t i = 0; i < frames; ++i) { + int16_t half_center = src[i * 6 + center] * 0.707 * normalized_factor; + int16_t l = normalized_factor * src[i * 6 + left] + half_center; + int16_t r = normalized_factor * src[i * 6 + right] + half_center; + + EXPECT_EQ(l, dst[i * 2 + left]); + EXPECT_EQ(r, dst[i * 2 + right]); + } +} + +// Test 5.1 to Quad conversion. S16_LE. +TEST(FormatConverterOpsTest, _51ToQuadS16LE) { + const size_t frames = 4096; + const size_t in_ch = 6; + const size_t out_ch = 4; + const unsigned int fl_quad = 0; + const unsigned int fr_quad = 1; + const unsigned int rl_quad = 2; + const unsigned int rr_quad = 3; + + const unsigned int fl_51 = 0; + const unsigned int fr_51 = 1; + const unsigned int center_51 = 2; + const unsigned int lfe_51 = 3; + const unsigned int rl_51 = 4; + const unsigned int rr_51 = 5; + + S16LEPtr src = CreateS16LE(frames * in_ch); + S16LEPtr dst = CreateS16LE(frames * out_ch); + + size_t ret = s16_51_to_quad((uint8_t*)src.get(), frames, (uint8_t*)dst.get()); + EXPECT_EQ(ret, frames); + + /* Use normalized_factor from the left channel = 1 / (|1| + |0.707| + |0.5|) + * to prevent overflow. */ + const float normalized_factor = 0.453; for (size_t i = 0; i < frames; ++i) { - int16_t half_center = src[i * 6 + center] / 2; - EXPECT_EQ(S16AddAndClip(src[i * 6 + left], half_center), dst[i * 2 + left]); - EXPECT_EQ(S16AddAndClip(src[i * 6 + right], half_center), - dst[i * 2 + right]); + int16_t half_center = src[i * 6 + center_51] * 0.707 * normalized_factor; + int16_t lfe = src[6 * i + lfe_51] * 0.5 * normalized_factor; + int16_t fl = normalized_factor * src[6 * i + fl_51] + half_center + lfe; + int16_t fr = normalized_factor * src[6 * i + fr_51] + half_center + lfe; + int16_t rl = normalized_factor * src[6 * i + rl_51] + lfe; + int16_t rr = normalized_factor * src[6 * i + rr_51] + lfe; + EXPECT_EQ(fl, dst[4 * i + fl_quad]); + EXPECT_EQ(fr, dst[4 * i + fr_quad]); + EXPECT_EQ(rl, dst[4 * i + rl_quad]); + EXPECT_EQ(rr, dst[4 * i + rr_quad]); } } diff --git a/cras/src/tests/fmt_conv_unittest.cc b/cras/src/tests/fmt_conv_unittest.cc index 5474f172..c66984ee 100644 --- a/cras/src/tests/fmt_conv_unittest.cc +++ b/cras/src/tests/fmt_conv_unittest.cc @@ -3,6 +3,7 @@ // found in the LICENSE file. #include <gtest/gtest.h> +#include <math.h> #include <sys/param.h> extern "C" { @@ -459,6 +460,81 @@ TEST(FormatConverterTest, SurroundToStereo) { free(out_buff); } +// Test 5.1 to Quad mix. +TEST(FormatConverterTest, SurroundToQuad) { + struct cras_fmt_conv* c; + struct cras_audio_format in_fmt; + struct cras_audio_format out_fmt; + + size_t out_frames; + int16_t* in_buff; + int16_t* out_buff; + unsigned int i; + const size_t buf_size = 4096; + unsigned int in_buf_size = 4096; + + ResetStub(); + in_fmt.format = SND_PCM_FORMAT_S16_LE; + out_fmt.format = SND_PCM_FORMAT_S16_LE; + in_fmt.num_channels = 6; + out_fmt.num_channels = 4; + in_fmt.frame_rate = 48000; + out_fmt.frame_rate = 48000; + for (i = 0; i < CRAS_CH_MAX; i++) + in_fmt.channel_layout[i] = surround_channel_center_layout[i]; + + c = cras_fmt_conv_create(&in_fmt, &out_fmt, buf_size, 0); + ASSERT_NE(c, (void*)NULL); + + out_frames = cras_fmt_conv_out_frames_to_in(c, buf_size); + EXPECT_EQ(buf_size, out_frames); + + out_frames = cras_fmt_conv_in_frames_to_out(c, buf_size); + EXPECT_EQ(buf_size, out_frames); + + in_buff = (int16_t*)malloc(buf_size * 2 * cras_get_format_bytes(&in_fmt)); + + const int16_t in_fl = 100; + const int16_t in_fr = 200; + const int16_t in_rl = 200; + const int16_t in_rr = 300; + const int16_t in_fc = 60; + const int16_t in_lfe = 90; + + for (i = 0; i < buf_size; i++) { + in_buff[i * 6 + CRAS_CH_FL] = in_fl; + in_buff[i * 6 + CRAS_CH_FR] = in_fr; + in_buff[i * 6 + CRAS_CH_RL] = in_rl; + in_buff[i * 6 + CRAS_CH_RR] = in_rr; + in_buff[i * 6 + CRAS_CH_FC] = in_fc; + in_buff[i * 6 + CRAS_CH_LFE] = in_lfe; + } + out_buff = (int16_t*)malloc(buf_size * 2 * cras_get_format_bytes(&out_fmt)); + out_frames = cras_fmt_conv_convert_frames( + c, (uint8_t*)in_buff, (uint8_t*)out_buff, &in_buf_size, buf_size); + EXPECT_EQ(buf_size, out_frames); + + // This is the sum of mtx[CRAS_CH_FL] coefficients. + const float normalize_factor = 1.0 / (1 + 0.707 + 0.5); + + for (i = 0; i < buf_size; i++) { + int16_t lfe = 0.5 * normalize_factor * in_lfe; + int16_t center = 0.707 * normalize_factor * in_fc; + int16_t fl = normalize_factor * in_fl + center + lfe; + int16_t fr = normalize_factor * in_fr + center + lfe; + int16_t rl = normalize_factor * in_rl + lfe; + int16_t rr = normalize_factor * in_rr + lfe; + + EXPECT_EQ(fl, out_buff[i * 4 + CRAS_CH_FL]); + EXPECT_EQ(fr, out_buff[i * 4 + CRAS_CH_FR]); + EXPECT_EQ(rl, out_buff[i * 4 + CRAS_CH_RL]); + EXPECT_EQ(rr, out_buff[i * 4 + CRAS_CH_RR]); + } + cras_fmt_conv_destroy(&c); + free(in_buff); + free(out_buff); +} + // Test Quad to Stereo mix. TEST(FormatConverterTest, QuadToStereo) { struct cras_fmt_conv* c; diff --git a/cras/src/tests/hfp_ag_profile_unittest.cc b/cras/src/tests/hfp_ag_profile_unittest.cc index 1a115f04..3ecd2407 100644 --- a/cras/src/tests/hfp_ag_profile_unittest.cc +++ b/cras/src/tests/hfp_ag_profile_unittest.cc @@ -286,6 +286,9 @@ void cras_bt_device_notify_profile_dropped( cras_bt_device_notify_profile_dropped_profile = profile; } +void hfp_info_set_wbs_logger(struct hfp_info* info, + struct packet_status_logger* wbs_logger) {} + void cras_observer_notify_bt_battery_changed(const char* address, uint32_t level) { return; diff --git a/cras/src/tests/hfp_alsa_iodev_unittest.cc b/cras/src/tests/hfp_alsa_iodev_unittest.cc index 89756948..c5bd4e9a 100644 --- a/cras/src/tests/hfp_alsa_iodev_unittest.cc +++ b/cras/src/tests/hfp_alsa_iodev_unittest.cc @@ -477,6 +477,9 @@ void cras_iodev_set_active_node(struct cras_iodev* iodev, iodev->active_node = node; } +// From ewma_power +void ewma_power_disable(struct ewma_power* ewma) {} + size_t cras_system_get_volume() { return 0; } diff --git a/cras/src/tests/hfp_info_unittest.cc b/cras/src/tests/hfp_info_unittest.cc index 48a1c89c..24f536ae 100644 --- a/cras/src/tests/hfp_info_unittest.cc +++ b/cras/src/tests/hfp_info_unittest.cc @@ -3,10 +3,15 @@ * found in the LICENSE file. */ +#include <gmock/gmock.h> #include <gtest/gtest.h> #include <stdint.h> #include <time.h> +using testing::MatchesRegex; +using testing::internal::CaptureStdout; +using testing::internal::GetCapturedStdout; + extern "C" { #include "cras_hfp_info.c" #include "sbc_codec_stub.h" @@ -504,6 +509,26 @@ TEST(HfpInfo, StartHfpInfoAndWriteMsbc) { hfp_info_destroy(info); } +TEST(HfpInfo, WBSLoggerPacketStatusDumpBinary) { + struct packet_status_logger logger; + char log_regex[64]; + int num_wraps[5] = {0, 0, 0, 1, 1}; + int wp[5] = {40, 150, 162, 100, 32}; + + /* Expect the log line wraps at correct length to avoid feedback redact. */ + snprintf(log_regex, 64, "([01D]{%d}\n)*", PACKET_STATUS_LOG_LINE_WRAP); + + packet_status_logger_init(&logger); + logger.size = PACKET_STATUS_LEN_BYTES * 8; + for (int i = 0; i < 5; i++) { + CaptureStdout(); + logger.num_wraps = num_wraps[i]; + logger.wp = wp[i]; + packet_status_logger_dump_binary(&logger); + EXPECT_THAT(GetCapturedStdout(), MatchesRegex(log_regex)); + } +} + } // namespace extern "C" { @@ -549,6 +574,10 @@ int cras_msbc_plc_handle_good_frames(struct cras_msbc_plc* plc, cras_msbc_plc_handle_good_frames_called++; return MSBC_CODE_SIZE; } +void packet_status_logger_init(struct packet_status_logger* logger) {} + +void packet_status_logger_update(struct packet_status_logger* logger, + bool val) {} } int main(int argc, char** argv) { diff --git a/cras/src/tests/hfp_iodev_unittest.cc b/cras/src/tests/hfp_iodev_unittest.cc index 2a61140e..18262bf9 100644 --- a/cras/src/tests/hfp_iodev_unittest.cc +++ b/cras/src/tests/hfp_iodev_unittest.cc @@ -43,7 +43,7 @@ static size_t hfp_fill_output_with_zeros_called; static size_t hfp_force_output_level_called; static size_t hfp_force_output_level_target; static size_t fake_buffer_size = 500; -static cras_audio_area* dummy_audio_area; +static cras_audio_area* mock_audio_area; void ResetStubData() { cras_bt_device_append_iodev_called = 0; @@ -73,9 +73,9 @@ void ResetStubData() { fake_info = reinterpret_cast<struct hfp_info*>(0x123); - if (!dummy_audio_area) { - dummy_audio_area = (cras_audio_area*)calloc( - 1, sizeof(*dummy_audio_area) + sizeof(cras_channel_area) * 2); + if (!mock_audio_area) { + mock_audio_area = (cras_audio_area*)calloc( + 1, sizeof(*mock_audio_area) + sizeof(cras_channel_area) * 2); } } @@ -86,8 +86,8 @@ class HfpIodev : public testing::Test { virtual void SetUp() { ResetStubData(); } virtual void TearDown() { - free(dummy_audio_area); - dummy_audio_area = NULL; + free(mock_audio_area); + mock_audio_area = NULL; } }; @@ -243,6 +243,9 @@ void cras_iodev_set_active_node(struct cras_iodev* iodev, iodev->active_node = node; } +// From ewma_power +void ewma_power_disable(struct ewma_power* ewma) {} + // From system_state. size_t cras_system_get_volume() { return 0; @@ -351,7 +354,7 @@ void hfp_force_output_level(struct hfp_info* info, unsigned int level) { } void cras_iodev_init_audio_area(struct cras_iodev* iodev, int num_channels) { - iodev->area = dummy_audio_area; + iodev->area = mock_audio_area; } void cras_iodev_free_audio_area(struct cras_iodev* iodev) {} @@ -367,7 +370,7 @@ int cras_iodev_fill_odev_zeros(struct cras_iodev* odev, unsigned int frames) { void cras_audio_area_config_buf_pointers(struct cras_audio_area* area, const struct cras_audio_format* fmt, uint8_t* base_buffer) { - dummy_audio_area->channels[0].buf = base_buffer; + mock_audio_area->channels[0].buf = base_buffer; } int hfp_set_call_status(struct hfp_slc_handle* handle, int call) { diff --git a/cras/src/tests/hfp_slc_unittest.cc b/cras/src/tests/hfp_slc_unittest.cc index 4501b07a..966278f4 100644 --- a/cras/src/tests/hfp_slc_unittest.cc +++ b/cras/src/tests/hfp_slc_unittest.cc @@ -202,7 +202,7 @@ TEST(HfpSlc, InitializeSlcSupportsHfIndicator) { /* Assert "\r\n+BIND: (2)\r\n" response is received */ err = read(sock[1], buf, 256); - chp = strstr(buf, "\r\n+BIND: (2)\r\n"); + chp = strstr(buf, "\r\n+BIND: (1,2)\r\n"); ASSERT_NE((void*)NULL, (void*)chp); chp = strstr(buf, "\r\nOK\r\n"); ASSERT_NE((void*)NULL, (void*)chp); diff --git a/cras/src/tests/iodev_list_unittest.cc b/cras/src/tests/iodev_list_unittest.cc index d40facab..272537fc 100644 --- a/cras/src/tests/iodev_list_unittest.cc +++ b/cras/src/tests/iodev_list_unittest.cc @@ -44,8 +44,8 @@ static struct audio_thread thread; static struct cras_iodev loopback_input; static int cras_iodev_close_called; static struct cras_iodev* cras_iodev_close_dev; -static struct cras_iodev dummy_hotword_iodev; -static struct cras_iodev dummy_empty_iodev[2]; +static struct cras_iodev mock_hotword_iodev; +static struct cras_iodev mock_empty_iodev[2]; static stream_callback* stream_add_cb; static stream_callback* stream_rm_cb; static struct cras_rstream* stream_list_get_ret; @@ -233,11 +233,11 @@ class IoDevTestSuite : public testing::Test { DL_APPEND(fake_sco_out_dev.nodes, &fake_sco_out_node); fake_sco_in_node.is_sco_pcm = 0; fake_sco_out_node.is_sco_pcm = 0; - dummy_empty_iodev[0].state = CRAS_IODEV_STATE_CLOSE; - dummy_empty_iodev[0].update_active_node = update_active_node; - dummy_empty_iodev[1].state = CRAS_IODEV_STATE_CLOSE; - dummy_empty_iodev[1].update_active_node = update_active_node; - dummy_hotword_iodev.update_active_node = update_active_node; + mock_empty_iodev[0].state = CRAS_IODEV_STATE_CLOSE; + mock_empty_iodev[0].update_active_node = update_active_node; + mock_empty_iodev[1].state = CRAS_IODEV_STATE_CLOSE; + mock_empty_iodev[1].update_active_node = update_active_node; + mock_hotword_iodev.update_active_node = update_active_node; } virtual void TearDown() { @@ -681,8 +681,7 @@ TEST_F(IoDevTestSuite, InitDevFailShouldScheduleRetry) { EXPECT_EQ(2, cras_iodev_open_called); EXPECT_EQ(1, audio_thread_add_stream_called); EXPECT_EQ(0, update_active_node_called); - EXPECT_EQ(&dummy_empty_iodev[CRAS_STREAM_OUTPUT], - audio_thread_add_stream_dev); + EXPECT_EQ(&mock_empty_iodev[CRAS_STREAM_OUTPUT], audio_thread_add_stream_dev); EXPECT_NE((void*)NULL, cras_tm_timer_cb); EXPECT_EQ(1, cras_tm_create_timer_called); @@ -693,7 +692,7 @@ TEST_F(IoDevTestSuite, InitDevFailShouldScheduleRetry) { EXPECT_EQ(1, cras_tm_create_timer_called); EXPECT_EQ(1, audio_thread_add_stream_called); - dummy_empty_iodev[CRAS_STREAM_OUTPUT].format = &fmt_; + mock_empty_iodev[CRAS_STREAM_OUTPUT].format = &fmt_; cras_tm_timer_cb = NULL; cras_iodev_open_ret[3] = -5; stream_add_cb(&rstream); @@ -1752,7 +1751,7 @@ TEST_F(IoDevTestSuite, AddRemovePinnedStream) { EXPECT_EQ(2, update_active_node_called); // Unselect d1_ and select to d2_ EXPECT_EQ(&d2_, update_active_node_iodev_val[0]); - EXPECT_EQ(&dummy_empty_iodev[CRAS_STREAM_OUTPUT], + EXPECT_EQ(&mock_empty_iodev[CRAS_STREAM_OUTPUT], update_active_node_iodev_val[1]); // Remove pinned stream from d1, check d1 is closed after stream removed. @@ -1869,14 +1868,14 @@ TEST_F(IoDevTestSuite, HotwordStreamsAddedThenSuspendResume) { EXPECT_EQ(&d1_, audio_thread_disconnect_stream_dev); EXPECT_EQ(2, audio_thread_add_stream_called); EXPECT_EQ(&rstream, audio_thread_add_stream_stream); - EXPECT_EQ(&dummy_hotword_iodev, audio_thread_add_stream_dev); + EXPECT_EQ(&mock_hotword_iodev, audio_thread_add_stream_dev); /* Resume hotword streams, verify the stream disconnects from * the empty iodev and connects back to the real hotword iodev. */ EXPECT_EQ(0, cras_iodev_list_resume_hotword_stream()); EXPECT_EQ(2, audio_thread_disconnect_stream_called); EXPECT_EQ(&rstream, audio_thread_disconnect_stream_stream); - EXPECT_EQ(&dummy_hotword_iodev, audio_thread_disconnect_stream_dev); + EXPECT_EQ(&mock_hotword_iodev, audio_thread_disconnect_stream_dev); EXPECT_EQ(3, audio_thread_add_stream_called); EXPECT_EQ(&rstream, audio_thread_add_stream_stream); EXPECT_EQ(&d1_, audio_thread_add_stream_dev); @@ -1910,7 +1909,7 @@ TEST_F(IoDevTestSuite, HotwordStreamsAddedAfterSuspend) { /* Hotword stream connected, verify it is added to the empty iodev. */ EXPECT_EQ(0, stream_add_cb(&rstream)); EXPECT_EQ(1, audio_thread_add_stream_called); - EXPECT_EQ(&dummy_hotword_iodev, audio_thread_add_stream_dev); + EXPECT_EQ(&mock_hotword_iodev, audio_thread_add_stream_dev); EXPECT_EQ(&rstream, audio_thread_add_stream_stream); /* Resume hotword streams, now the existing hotword stream should disconnect @@ -1918,7 +1917,7 @@ TEST_F(IoDevTestSuite, HotwordStreamsAddedAfterSuspend) { EXPECT_EQ(0, cras_iodev_list_resume_hotword_stream()); EXPECT_EQ(1, audio_thread_disconnect_stream_called); EXPECT_EQ(&rstream, audio_thread_disconnect_stream_stream); - EXPECT_EQ(&dummy_hotword_iodev, audio_thread_disconnect_stream_dev); + EXPECT_EQ(&mock_hotword_iodev, audio_thread_disconnect_stream_dev); EXPECT_EQ(2, audio_thread_add_stream_called); EXPECT_EQ(&rstream, audio_thread_add_stream_stream); EXPECT_EQ(&d1_, audio_thread_add_stream_dev); @@ -2035,9 +2034,9 @@ struct cras_iodev* empty_iodev_create(enum CRAS_STREAM_DIRECTION direction, enum CRAS_NODE_TYPE node_type) { struct cras_iodev* dev; if (node_type == CRAS_NODE_TYPE_HOTWORD) { - dev = &dummy_hotword_iodev; + dev = &mock_hotword_iodev; } else { - dev = &dummy_empty_iodev[direction]; + dev = &mock_empty_iodev[direction]; } dev->direction = direction; if (dev->active_node == NULL) { diff --git a/cras/src/tests/iodev_unittest.cc b/cras/src/tests/iodev_unittest.cc index 03cfee62..21dc4d57 100644 --- a/cras/src/tests/iodev_unittest.cc +++ b/cras/src/tests/iodev_unittest.cc @@ -60,7 +60,7 @@ static unsigned int cras_mix_mute_count; static unsigned int cras_dsp_num_input_channels_return; static unsigned int cras_dsp_num_output_channels_return; struct cras_dsp_context* cras_dsp_context_new_return; -static unsigned int cras_dsp_load_dummy_pipeline_called; +static unsigned int cras_dsp_load_mock_pipeline_called; static unsigned int rate_estimator_add_frames_num_frames; static unsigned int rate_estimator_add_frames_called; static int cras_system_get_mute_return; @@ -148,7 +148,7 @@ void ResetStubData() { cras_dsp_num_input_channels_return = 2; cras_dsp_num_output_channels_return = 2; cras_dsp_context_new_return = NULL; - cras_dsp_load_dummy_pipeline_called = 0; + cras_dsp_load_mock_pipeline_called = 0; rate_estimator_add_frames_num_frames = 0; rate_estimator_add_frames_called = 0; cras_system_get_mute_return = 0; @@ -2240,12 +2240,12 @@ TEST(IoDev, SetExtDspMod) { EXPECT_EQ(3, cras_dsp_get_pipeline_called); EXPECT_EQ(3, cras_dsp_pipeline_set_sink_ext_module_called); - /* If pipeline doesn't exist, dummy pipeline should be loaded. */ + /* If pipeline doesn't exist, mock pipeline should be loaded. */ cras_dsp_get_pipeline_ret = 0x0; cras_iodev_set_ext_dsp_module(&iodev, &ext); EXPECT_EQ(3, ext_mod_configure_called); EXPECT_EQ(5, cras_dsp_get_pipeline_called); - EXPECT_EQ(1, cras_dsp_load_dummy_pipeline_called); + EXPECT_EQ(1, cras_dsp_load_mock_pipeline_called); EXPECT_EQ(4, cras_dsp_pipeline_set_sink_ext_module_called); } @@ -2462,9 +2462,11 @@ unsigned int buffer_share_id_offset(const struct buffer_share* mix, } // From cras_system_state. -void cras_system_state_stream_added(enum CRAS_STREAM_DIRECTION direction) {} +void cras_system_state_stream_added(enum CRAS_STREAM_DIRECTION direction, + enum CRAS_CLIENT_TYPE client_type) {} -void cras_system_state_stream_removed(enum CRAS_STREAM_DIRECTION direction) {} +void cras_system_state_stream_removed(enum CRAS_STREAM_DIRECTION direction, + enum CRAS_CLIENT_TYPE client_type) {} // From cras_dsp struct cras_dsp_context* cras_dsp_context_new(int sample_rate, @@ -2479,9 +2481,9 @@ void cras_dsp_context_free(struct cras_dsp_context* ctx) { } void cras_dsp_load_pipeline(struct cras_dsp_context* ctx) {} -void cras_dsp_load_dummy_pipeline(struct cras_dsp_context* ctx, - unsigned int num_channels) { - cras_dsp_load_dummy_pipeline_called++; +void cras_dsp_load_mock_pipeline(struct cras_dsp_context* ctx, + unsigned int num_channels) { + cras_dsp_load_mock_pipeline_called++; } void cras_dsp_set_variable_string(struct cras_dsp_context* ctx, @@ -2760,6 +2762,18 @@ int cras_server_metrics_device_volume(struct cras_iodev* iodev) { return 0; } +void ewma_power_init(struct ewma_power* ewma, unsigned int rate){}; + +void ewma_power_calculate(struct ewma_power* ewma, + const int16_t* buf, + unsigned int channels, + unsigned int size){}; + +void ewma_power_calculate_area(struct ewma_power* ewma, + const int16_t* buf, + struct cras_audio_area* area, + unsigned int size){}; + } // extern "C" } // namespace diff --git a/cras/src/tests/loopback_iodev_unittest.cc b/cras/src/tests/loopback_iodev_unittest.cc index 1c69ba57..fde50375 100644 --- a/cras/src/tests/loopback_iodev_unittest.cc +++ b/cras/src/tests/loopback_iodev_unittest.cc @@ -29,7 +29,7 @@ static const unsigned int kFrameBytes = 4; static const unsigned int kBufferSize = kBufferFrames * kFrameBytes; static struct timespec time_now; -static cras_audio_area* dummy_audio_area; +static cras_audio_area* mock_audio_area; static loopback_hook_data_t loop_hook; static struct cras_iodev* enabled_dev; static unsigned int cras_iodev_list_add_input_called; @@ -46,8 +46,8 @@ static char* atlog_name; class LoopBackTestSuite : public testing::Test { protected: virtual void SetUp() { - dummy_audio_area = (cras_audio_area*)calloc( - 1, sizeof(*dummy_audio_area) + sizeof(cras_channel_area) * 2); + mock_audio_area = (cras_audio_area*)calloc( + 1, sizeof(*mock_audio_area) + sizeof(cras_channel_area) * 2); for (unsigned int i = 0; i < kBufferSize; i++) { buf_[i] = rand(); } @@ -77,7 +77,7 @@ class LoopBackTestSuite : public testing::Test { EXPECT_EQ(1, cras_iodev_list_rm_input_called); EXPECT_EQ(NULL, device_enabled_callback_cb); EXPECT_EQ(NULL, device_disabled_callback_cb); - free(dummy_audio_area); + free(mock_audio_area); audio_thread_event_log_deinit(atlog, atlog_name); free(atlog_name); } @@ -224,7 +224,7 @@ extern "C" { void cras_audio_area_config_buf_pointers(struct cras_audio_area* area, const struct cras_audio_format* fmt, uint8_t* base_buffer) { - dummy_audio_area->channels[0].buf = base_buffer; + mock_audio_area->channels[0].buf = base_buffer; } void cras_iodev_free_audio_area(struct cras_iodev* iodev) {} @@ -232,7 +232,7 @@ void cras_iodev_free_audio_area(struct cras_iodev* iodev) {} void cras_iodev_free_format(struct cras_iodev* iodev) {} void cras_iodev_init_audio_area(struct cras_iodev* iodev, int num_channels) { - iodev->area = dummy_audio_area; + iodev->area = mock_audio_area; } void cras_iodev_add_node(struct cras_iodev* iodev, struct cras_ionode* node) { diff --git a/cras/src/tests/observer_unittest.cc b/cras/src/tests/observer_unittest.cc index 2053e940..2a8fae2c 100644 --- a/cras/src/tests/observer_unittest.cc +++ b/cras/src/tests/observer_unittest.cc @@ -11,6 +11,8 @@ extern "C" { #include "cras_observer.c" +#include "cras_observer.h" +#include "cras_types.h" } namespace { @@ -56,6 +58,9 @@ static size_t cb_num_active_streams_changed_called; static std::vector<enum CRAS_STREAM_DIRECTION> cb_num_active_streams_changed_dir; static std::vector<uint32_t> cb_num_active_streams_changed_num; +static size_t cb_num_input_streams_with_permission_called; +static std::vector<std::vector<uint32_t>> + cb_num_input_streams_with_permission_array; static void ResetStubData() { cras_alert_destroy_called = 0; @@ -99,6 +104,8 @@ static void ResetStubData() { cb_num_active_streams_changed_called = 0; cb_num_active_streams_changed_dir.clear(); cb_num_active_streams_changed_num.clear(); + cb_num_input_streams_with_permission_called = 0; + cb_num_input_streams_with_permission_array.clear(); } /* System output volume changed. */ @@ -190,6 +197,15 @@ void cb_num_active_streams_changed(void* context, cb_num_active_streams_changed_num.push_back(num_active_streams); } +void cb_num_input_streams_with_permission_changed( + void* context, + uint32_t num_input_streams[CRAS_NUM_CLIENT_TYPE]) { + cb_num_input_streams_with_permission_called++; + cb_context.push_back(context); + cb_num_input_streams_with_permission_array.push_back(std::vector<uint32_t>( + num_input_streams, num_input_streams + CRAS_NUM_CLIENT_TYPE)); +} + class ObserverTest : public testing::Test { protected: virtual void SetUp() { @@ -198,7 +214,7 @@ class ObserverTest : public testing::Test { ResetStubData(); rc = cras_observer_server_init(); ASSERT_EQ(0, rc); - EXPECT_EQ(16, cras_alert_create_called); + EXPECT_EQ(17, cras_alert_create_called); EXPECT_EQ(reinterpret_cast<void*>(output_volume_alert), cras_alert_add_callback_map[g_observer->alerts.output_volume]); EXPECT_EQ(reinterpret_cast<void*>(output_mute_alert), @@ -256,7 +272,7 @@ class ObserverTest : public testing::Test { virtual void TearDown() { cras_observer_server_free(); - EXPECT_EQ(16, cras_alert_destroy_called); + EXPECT_EQ(17, cras_alert_destroy_called); ResetStubData(); } @@ -578,6 +594,37 @@ TEST_F(ObserverTest, NotifyNumActiveStreams) { DoObserverRemoveClear(num_active_streams_alert, data); }; +TEST_F(ObserverTest, NotifyNumInputStreamsWithPermission) { + struct cras_observer_alert_data_input_streams* data; + uint32_t num_input_streams[CRAS_NUM_CLIENT_TYPE] = {}; + for (unsigned type = 0; type < CRAS_NUM_CLIENT_TYPE; ++type) { + num_input_streams[type] = (uint32_t)type; + } + + cras_observer_notify_input_streams_with_permission(num_input_streams); + ASSERT_EQ(cras_alert_pending_data_size_value, sizeof(*data)); + ASSERT_NE(cras_alert_pending_data_value, reinterpret_cast<void*>(NULL)); + data = reinterpret_cast<struct cras_observer_alert_data_input_streams*>( + cras_alert_pending_data_value); + for (unsigned type = 0; type < CRAS_NUM_CLIENT_TYPE; ++type) { + EXPECT_EQ(data->num_input_streams[type], num_input_streams[type]); + } + + ops1_.num_input_streams_with_permission_changed = + cb_num_input_streams_with_permission_changed; + ops2_.num_input_streams_with_permission_changed = + cb_num_input_streams_with_permission_changed; + DoObserverAlert(num_input_streams_with_permission_alert, data); + ASSERT_EQ(2, cb_num_input_streams_with_permission_called); + for (auto cb_num_input_streams : cb_num_input_streams_with_permission_array) { + ASSERT_EQ(cb_num_input_streams.size(), (size_t)CRAS_NUM_CLIENT_TYPE); + for (unsigned type = 0; type < CRAS_NUM_CLIENT_TYPE; ++type) { + EXPECT_EQ(cb_num_input_streams[type], num_input_streams[type]); + } + } + DoObserverRemoveClear(num_input_streams_with_permission_alert, data); +} + TEST_F(ObserverTest, NotifyHotwordTriggered) { struct cras_observer_alert_data_hotword_triggered* data; diff --git a/cras/src/tests/playback_rclient_unittest.cc b/cras/src/tests/playback_rclient_unittest.cc index 7056d2fe..75cbe552 100644 --- a/cras/src/tests/playback_rclient_unittest.cc +++ b/cras/src/tests/playback_rclient_unittest.cc @@ -24,8 +24,8 @@ static unsigned int cras_observer_remove_called; static int stream_list_add_called; static int stream_list_add_return; static unsigned int stream_list_rm_called; -static struct cras_audio_shm dummy_shm; -static struct cras_rstream dummy_rstream; +static struct cras_audio_shm mock_shm; +static struct cras_rstream mock_rstream; void ResetStubData() { audio_format_valid = true; @@ -207,44 +207,6 @@ TEST_F(CPRMessageSuite, StreamConnectMessageInvalidAudioFormat) { EXPECT_EQ(stream_id, out_msg.stream_id); } -/* - * TODO(yuhsaun): Remove this test when there are no client uses the old - * craslib. (CRAS_PROTO_VER = 5) - */ -TEST_F(CPRMessageSuite, StreamConnectMessageOldProtocal) { - struct cras_client_stream_connected out_msg; - int rc; - - struct cras_connect_message_old msg; - cras_stream_id_t stream_id = 0x10002; - - msg.proto_version = 5; - msg.direction = CRAS_STREAM_OUTPUT; - msg.stream_id = stream_id; - msg.stream_type = CRAS_STREAM_TYPE_DEFAULT; - msg.buffer_frames = 480; - msg.cb_threshold = 240; - msg.flags = 0; - msg.effects = 0; - pack_cras_audio_format(&msg.format, &fmt); - msg.dev_idx = NO_DEVICE; - msg.client_shm_size = 0; - msg.client_type = CRAS_CLIENT_TYPE_TEST; - msg.header.id = CRAS_SERVER_CONNECT_STREAM; - msg.header.length = sizeof(struct cras_connect_message_old); - - fd_ = 100; - rc = - rclient_->ops->handle_message_from_client(rclient_, &msg.header, &fd_, 1); - EXPECT_EQ(1, cras_make_fd_nonblocking_called); - EXPECT_EQ(1, stream_list_add_called); - EXPECT_EQ(0, stream_list_rm_called); - - rc = read(pipe_fds_[0], &out_msg, sizeof(out_msg)); - EXPECT_EQ(sizeof(out_msg), rc); - EXPECT_EQ(stream_id, out_msg.stream_id); -} - TEST_F(CPRMessageSuite, StreamDisconnectMessage) { struct cras_disconnect_stream_message msg; cras_stream_id_t stream_id = 0x10002; @@ -320,16 +282,16 @@ int stream_list_add(struct stream_list* list, struct cras_rstream** stream) { int ret; - *stream = &dummy_rstream; + *stream = &mock_rstream; stream_list_add_called++; ret = stream_list_add_return; if (ret) stream_list_add_return = -EINVAL; - dummy_rstream.shm = &dummy_shm; - dummy_rstream.direction = config->direction; - dummy_rstream.stream_id = config->stream_id; + mock_rstream.shm = &mock_shm; + mock_rstream.direction = config->direction; + mock_rstream.stream_id = config->stream_id; return ret; } diff --git a/cras/src/tests/polled_interval_checker_unittest.cc b/cras/src/tests/polled_interval_checker_unittest.cc index c18fdf7e..a4aff09c 100644 --- a/cras/src/tests/polled_interval_checker_unittest.cc +++ b/cras/src/tests/polled_interval_checker_unittest.cc @@ -70,7 +70,7 @@ TEST(PolledIntervalCheckerTest, DoesNotResetAutomatically) { struct polled_interval* interval = create_interval(); - // Sanity check. + // Initial check. EXPECT_FALSE(pic_interval_elapsed(interval)); // Increment time so the interval elapses. @@ -100,7 +100,7 @@ TEST(PolledIntervalCheckerTest, Reset) { struct polled_interval* interval = create_interval(); - // Sanity check. + // Initial check. EXPECT_FALSE(pic_interval_elapsed(interval)); // Increment time so the interval elapses. diff --git a/cras/src/tests/rstream_unittest.cc b/cras/src/tests/rstream_unittest.cc index 77dd6adb..593c805d 100644 --- a/cras/src/tests/rstream_unittest.cc +++ b/cras/src/tests/rstream_unittest.cc @@ -390,10 +390,18 @@ unsigned int buffer_share_id_offset(const struct buffer_share* mix, unsigned int id) { return 0; } +void ewma_power_init(struct ewma_power* ewma, unsigned int rate) {} -void cras_system_state_stream_added(enum CRAS_STREAM_DIRECTION direction) {} +void ewma_power_calculate(struct ewma_power* ewma, + const int16_t* buf, + unsigned int channels, + unsigned int size) {} -void cras_system_state_stream_removed(enum CRAS_STREAM_DIRECTION direction) {} +void cras_system_state_stream_added(enum CRAS_STREAM_DIRECTION direction, + enum CRAS_CLIENT_TYPE client_type) {} + +void cras_system_state_stream_removed(enum CRAS_STREAM_DIRECTION direction, + enum CRAS_CLIENT_TYPE client_type) {} int cras_server_metrics_stream_create( const struct cras_rstream_config* config) { @@ -405,9 +413,13 @@ int cras_server_metrics_stream_destroy(const struct cras_rstream* stream) { } #ifdef HAVE_WEBRTC_APM +#define FAKE_CRAS_APM_PTR reinterpret_cast<struct cras_apm*>(0x99) struct cras_apm_list* cras_apm_list_create(void* stream_ptr, uint64_t effects) { return NULL; } +struct cras_apm* cras_apm_list_get_active_apm(void* stream_ptr, void* dev_ptr) { + return FAKE_CRAS_APM_PTR; +} int cras_apm_list_destroy(struct cras_apm_list* list) { return 0; } diff --git a/cras/src/tests/system_state_unittest.cc b/cras/src/tests/system_state_unittest.cc index e61a43e2..0450df38 100644 --- a/cras/src/tests/system_state_unittest.cc +++ b/cras/src/tests/system_state_unittest.cc @@ -38,6 +38,7 @@ static size_t cras_observer_notify_output_mute_called; static size_t cras_observer_notify_capture_mute_called; static size_t cras_observer_notify_suspend_changed_called; static size_t cras_observer_notify_num_active_streams_called; +static size_t cras_observer_notify_input_streams_with_permission_called; static struct cras_board_config fake_board_config; static void ResetStubData() { @@ -58,6 +59,7 @@ static void ResetStubData() { cras_observer_notify_capture_mute_called = 0; cras_observer_notify_suspend_changed_called = 0; cras_observer_notify_num_active_streams_called = 0; + cras_observer_notify_input_streams_with_permission_called = 0; memset(&fake_board_config, 0, sizeof(fake_board_config)); } @@ -371,11 +373,11 @@ TEST(SystemSettingsStreamCount, StreamCount) { do_sys_init(); EXPECT_EQ(0, cras_system_state_get_active_streams()); - cras_system_state_stream_added(CRAS_STREAM_OUTPUT); + cras_system_state_stream_added(CRAS_STREAM_OUTPUT, CRAS_CLIENT_TYPE_CHROME); EXPECT_EQ(1, cras_system_state_get_active_streams()); struct cras_timespec ts1; cras_system_state_get_last_stream_active_time(&ts1); - cras_system_state_stream_removed(CRAS_STREAM_OUTPUT); + cras_system_state_stream_removed(CRAS_STREAM_OUTPUT, CRAS_CLIENT_TYPE_CHROME); EXPECT_EQ(0, cras_system_state_get_active_streams()); struct cras_timespec ts2; cras_system_state_get_last_stream_active_time(&ts2); @@ -388,9 +390,11 @@ TEST(SystemSettingsStreamCount, StreamCountByDirection) { do_sys_init(); EXPECT_EQ(0, cras_system_state_get_active_streams()); - cras_system_state_stream_added(CRAS_STREAM_OUTPUT); - cras_system_state_stream_added(CRAS_STREAM_INPUT); - cras_system_state_stream_added(CRAS_STREAM_POST_MIX_PRE_DSP); + cras_system_state_stream_added(CRAS_STREAM_OUTPUT, CRAS_CLIENT_TYPE_CHROME); + cras_system_state_stream_added(CRAS_STREAM_INPUT, CRAS_CLIENT_TYPE_CHROME); + cras_system_state_stream_added(CRAS_STREAM_POST_MIX_PRE_DSP, + CRAS_CLIENT_TYPE_CHROME); + EXPECT_EQ(1, cras_observer_notify_input_streams_with_permission_called); EXPECT_EQ( 1, cras_system_state_get_active_streams_by_direction(CRAS_STREAM_OUTPUT)); EXPECT_EQ( @@ -399,9 +403,11 @@ TEST(SystemSettingsStreamCount, StreamCountByDirection) { CRAS_STREAM_POST_MIX_PRE_DSP)); EXPECT_EQ(3, cras_system_state_get_active_streams()); EXPECT_EQ(3, cras_observer_notify_num_active_streams_called); - cras_system_state_stream_removed(CRAS_STREAM_OUTPUT); - cras_system_state_stream_removed(CRAS_STREAM_INPUT); - cras_system_state_stream_removed(CRAS_STREAM_POST_MIX_PRE_DSP); + cras_system_state_stream_removed(CRAS_STREAM_OUTPUT, CRAS_CLIENT_TYPE_CHROME); + cras_system_state_stream_removed(CRAS_STREAM_INPUT, CRAS_CLIENT_TYPE_CHROME); + cras_system_state_stream_removed(CRAS_STREAM_POST_MIX_PRE_DSP, + CRAS_CLIENT_TYPE_CHROME); + EXPECT_EQ(2, cras_observer_notify_input_streams_with_permission_called); EXPECT_EQ( 0, cras_system_state_get_active_streams_by_direction(CRAS_STREAM_OUTPUT)); EXPECT_EQ( @@ -511,6 +517,11 @@ void cras_observer_notify_num_active_streams(enum CRAS_STREAM_DIRECTION dir, cras_observer_notify_num_active_streams_called++; } +void cras_observer_notify_input_streams_with_permission( + uint32_t num_input_streams[CRAS_NUM_CLIENT_TYPE]) { + cras_observer_notify_input_streams_with_permission_called++; +} + void cras_board_config_get(const char* config_path, struct cras_board_config* board_config) { *board_config = fake_board_config; |