diff options
Diffstat (limited to 'cras/src/tests/bt_device_unittest.cc')
-rw-r--r-- | cras/src/tests/bt_device_unittest.cc | 781 |
1 files changed, 0 insertions, 781 deletions
diff --git a/cras/src/tests/bt_device_unittest.cc b/cras/src/tests/bt_device_unittest.cc deleted file mode 100644 index ccb581cc..00000000 --- a/cras/src/tests/bt_device_unittest.cc +++ /dev/null @@ -1,781 +0,0 @@ -// Copyright (c) 2014 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 "cras_bt_constants.h" -#include "cras_bt_device.h" -#include "cras_bt_io.h" -#include "cras_bt_log.h" -#include "cras_iodev.h" -#include "cras_main_message.h" - -#define FAKE_OBJ_PATH "/obj/path" -} - -static const unsigned int CONN_WATCH_MAX_RETRIES = 30; - -static struct cras_iodev* cras_bt_io_create_profile_ret; -static struct cras_iodev* cras_bt_io_append_btio_val; -static struct cras_ionode* cras_bt_io_get_profile_ret; -static unsigned int cras_bt_io_create_called; -static unsigned int cras_bt_io_append_called; -static unsigned int cras_bt_io_remove_called; -static unsigned int cras_bt_io_destroy_called; -static enum cras_bt_device_profile cras_bt_io_create_profile_val; -static enum cras_bt_device_profile cras_bt_io_append_profile_val; -static unsigned int cras_bt_io_try_remove_ret; - -static cras_main_message* cras_main_message_send_msg; -static cras_message_callback cras_main_message_add_handler_callback; -static void* cras_main_message_add_handler_callback_data; -static int cras_tm_create_timer_called; -static int cras_tm_cancel_timer_called; -static int cras_a2dp_start_called; -static int cras_a2dp_suspend_connected_device_called; -static int cras_hfp_ag_remove_conflict_called; -static int cras_hfp_ag_start_called; -static int cras_hfp_ag_suspend_connected_device_called; -static void (*cras_tm_create_timer_cb)(struct cras_timer* t, void* data); -static void* cras_tm_create_timer_cb_data; -static int dbus_message_new_method_call_called; -static const char* dbus_message_new_method_call_method; -static struct cras_bt_device* cras_a2dp_connected_device_ret; -static struct cras_bt_device* cras_a2dp_suspend_connected_device_dev; -static struct cras_timer* cras_tm_cancel_timer_arg; -static struct cras_timer* cras_tm_create_timer_ret; -static size_t cras_iodev_set_node_plugged_called; -static int cras_iodev_set_node_plugged_value; - -struct MockDBusMessage { - int type; - void* value; - MockDBusMessage* next; - MockDBusMessage* recurse; -}; - -void ResetStubData() { - cras_bt_io_get_profile_ret = NULL; - cras_bt_io_create_called = 0; - cras_bt_io_append_called = 0; - cras_bt_io_remove_called = 0; - cras_bt_io_destroy_called = 0; - cras_bt_io_try_remove_ret = 0; - cras_main_message_send_msg = NULL; - cras_tm_create_timer_called = 0; - cras_tm_cancel_timer_called = 0; - cras_a2dp_start_called = 0; - cras_a2dp_suspend_connected_device_called = 0; - cras_hfp_ag_remove_conflict_called = 0; - cras_hfp_ag_start_called = 0; - cras_hfp_ag_suspend_connected_device_called = 0; - dbus_message_new_method_call_method = NULL; - dbus_message_new_method_call_called = 0; - cras_a2dp_connected_device_ret = NULL; - cras_iodev_set_node_plugged_called = 0; -} - -static void FreeMockDBusMessage(MockDBusMessage* head) { - if (head->next != NULL) - FreeMockDBusMessage(head->next); - if (head->recurse != NULL) - FreeMockDBusMessage(head->recurse); - if (head->type == DBUS_TYPE_STRING) - free((char*)head->value); - delete head; -} - -static struct MockDBusMessage* NewMockDBusConnectedMessage(long connected) { - MockDBusMessage* msg = new MockDBusMessage{DBUS_TYPE_ARRAY, NULL}; - MockDBusMessage* dict = - new MockDBusMessage{DBUS_TYPE_STRING, (void*)strdup("Connected")}; - MockDBusMessage* variant = - new MockDBusMessage{DBUS_TYPE_BOOLEAN, (void*)connected}; - - msg->recurse = dict; - dict->next = new MockDBusMessage{DBUS_TYPE_INVALID, NULL}; - dict->next->recurse = variant; - return msg; -} - -namespace { - -class BtDeviceTestSuite : public testing::Test { - protected: - virtual void SetUp() { - ResetStubData(); - bt_iodev1.direction = CRAS_STREAM_OUTPUT; - bt_iodev1.update_active_node = update_active_node; - bt_iodev2.direction = CRAS_STREAM_INPUT; - bt_iodev2.update_active_node = update_active_node; - d1_.direction = CRAS_STREAM_OUTPUT; - d1_.update_active_node = update_active_node; - d2_.direction = CRAS_STREAM_OUTPUT; - d2_.update_active_node = update_active_node; - d3_.direction = CRAS_STREAM_INPUT; - d3_.update_active_node = update_active_node; - btlog = cras_bt_event_log_init(); - } - - virtual void TearDown() { - if (cras_main_message_send_msg) - free(cras_main_message_send_msg); - cras_bt_event_log_deinit(btlog); - } - - static void update_active_node(struct cras_iodev* iodev, - unsigned node_idx, - unsigned dev_enabled) {} - - struct cras_iodev bt_iodev1; - struct cras_iodev bt_iodev2; - struct cras_iodev d3_; - struct cras_iodev d2_; - struct cras_iodev d1_; -}; - -TEST(BtDeviceSuite, CreateBtDevice) { - struct cras_bt_device* device; - - device = cras_bt_device_create(NULL, FAKE_OBJ_PATH); - EXPECT_NE((void*)NULL, device); - - device = cras_bt_device_get(FAKE_OBJ_PATH); - EXPECT_NE((void*)NULL, device); - - cras_bt_device_remove(device); - device = cras_bt_device_get(FAKE_OBJ_PATH); - EXPECT_EQ((void*)NULL, device); -} - -TEST_F(BtDeviceTestSuite, AppendRmIodev) { - struct cras_bt_device* device; - device = cras_bt_device_create(NULL, FAKE_OBJ_PATH); - bt_iodev1.nodes = reinterpret_cast<struct cras_ionode*>(0x123); - cras_bt_io_create_profile_ret = &bt_iodev1; - cras_bt_device_append_iodev(device, &d1_, CRAS_BT_DEVICE_PROFILE_A2DP_SOURCE); - EXPECT_EQ(1, cras_bt_io_create_called); - EXPECT_EQ(0, cras_bt_io_append_called); - EXPECT_EQ(CRAS_BT_DEVICE_PROFILE_A2DP_SOURCE, cras_bt_io_create_profile_val); - cras_bt_device_set_active_profile(device, CRAS_BT_DEVICE_PROFILE_A2DP_SOURCE); - - cras_bt_device_append_iodev(device, &d2_, - CRAS_BT_DEVICE_PROFILE_HFP_AUDIOGATEWAY); - EXPECT_EQ(1, cras_bt_io_create_called); - EXPECT_EQ(1, cras_bt_io_append_called); - EXPECT_EQ(CRAS_BT_DEVICE_PROFILE_HFP_AUDIOGATEWAY, - cras_bt_io_append_profile_val); - EXPECT_EQ(&bt_iodev1, cras_bt_io_append_btio_val); - - /* Test HFP disconnected and switch to A2DP. */ - cras_bt_io_get_profile_ret = bt_iodev1.nodes; - cras_bt_io_try_remove_ret = CRAS_BT_DEVICE_PROFILE_A2DP_SOURCE; - cras_bt_device_set_active_profile(device, - CRAS_BT_DEVICE_PROFILE_HFP_AUDIOGATEWAY); - cras_bt_device_rm_iodev(device, &d2_); - EXPECT_EQ(1, cras_bt_io_remove_called); - EXPECT_EQ(1, cras_iodev_set_node_plugged_called); - EXPECT_EQ(0, cras_iodev_set_node_plugged_value); - - /* Test A2DP disconnection will cause bt_io destroy. */ - cras_bt_io_try_remove_ret = 0; - cras_bt_device_rm_iodev(device, &d1_); - EXPECT_EQ(1, cras_bt_io_remove_called); - EXPECT_EQ(1, cras_bt_io_destroy_called); - EXPECT_EQ(0, cras_bt_device_get_active_profile(device)); - EXPECT_EQ(2, cras_iodev_set_node_plugged_called); - EXPECT_EQ(0, cras_iodev_set_node_plugged_value); - cras_bt_device_remove(device); -} - -TEST_F(BtDeviceTestSuite, SwitchProfile) { - struct cras_bt_device* device; - - ResetStubData(); - device = cras_bt_device_create(NULL, FAKE_OBJ_PATH); - cras_bt_io_create_profile_ret = &bt_iodev1; - cras_bt_device_append_iodev(device, &d1_, CRAS_BT_DEVICE_PROFILE_A2DP_SOURCE); - cras_bt_io_create_profile_ret = &bt_iodev2; - cras_bt_device_append_iodev(device, &d3_, - CRAS_BT_DEVICE_PROFILE_HFP_AUDIOGATEWAY); - - cras_bt_device_start_monitor(); - cras_bt_device_switch_profile_enable_dev(device, &bt_iodev1); - - /* Two bt iodevs were all active. */ - cras_main_message_add_handler_callback( - cras_main_message_send_msg, cras_main_message_add_handler_callback_data); - - /* One bt iodev was active, the other was not. */ - cras_bt_device_switch_profile_enable_dev(device, &bt_iodev2); - cras_main_message_add_handler_callback( - cras_main_message_send_msg, cras_main_message_add_handler_callback_data); - - /* Output bt iodev wasn't active, close the active input iodev. */ - cras_bt_device_switch_profile(device, &bt_iodev2); - cras_main_message_add_handler_callback( - cras_main_message_send_msg, cras_main_message_add_handler_callback_data); - cras_bt_device_remove(device); -} - -TEST_F(BtDeviceTestSuite, SetDeviceConnectedA2dpOnly) { - struct cras_bt_device* device; - struct MockDBusMessage *msg_root, *cur; - ResetStubData(); - - device = cras_bt_device_create(NULL, FAKE_OBJ_PATH); - EXPECT_NE((void*)NULL, device); - - 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); - EXPECT_EQ(1, cras_tm_create_timer_called); - EXPECT_NE((void*)NULL, cras_tm_create_timer_cb); - - /* Schedule another timer, if A2DP not yet configured. */ - cras_tm_create_timer_cb(NULL, cras_tm_create_timer_cb_data); - EXPECT_EQ(2, cras_tm_create_timer_called); - - /* ConnectProfile must not be called, since this is A2DP only case. */ - EXPECT_EQ(0, dbus_message_new_method_call_called); - - cras_bt_device_a2dp_configured(device); - - /* Prepate the iodev created by cras_a2dp_start. */ - cras_bt_io_create_profile_ret = &bt_iodev1; - cras_bt_device_append_iodev(device, &d1_, CRAS_BT_DEVICE_PROFILE_A2DP_SOURCE); - - cras_tm_create_timer_cb(NULL, cras_tm_create_timer_cb_data); - EXPECT_EQ(2, cras_tm_create_timer_called); - EXPECT_EQ(1, cras_hfp_ag_remove_conflict_called); - EXPECT_EQ(1, cras_a2dp_start_called); - EXPECT_EQ(1, cras_iodev_set_node_plugged_called); - EXPECT_EQ(1, cras_iodev_set_node_plugged_value); - - cras_bt_device_remove(device); - FreeMockDBusMessage(msg_root); -} - -TEST_F(BtDeviceTestSuite, SetDeviceConnectedHfpHspOnly) { - struct cras_bt_device* device; - struct MockDBusMessage *msg_root, *cur; - - ResetStubData(); - - device = cras_bt_device_create(NULL, FAKE_OBJ_PATH); - EXPECT_NE((void*)NULL, device); - - 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); - EXPECT_EQ(1, cras_tm_create_timer_called); - EXPECT_NE((void*)NULL, cras_tm_create_timer_cb); - - /* Schedule another timer, if HFP AG not yet intialized. */ - cras_tm_create_timer_cb(NULL, cras_tm_create_timer_cb_data); - EXPECT_EQ(2, cras_tm_create_timer_called); - - /* ConnectProfile must not be called, since this is HFP only case. */ - EXPECT_EQ(0, dbus_message_new_method_call_called); - - cras_bt_device_audio_gateway_initialized(device); - - /* Prepate the iodev created by ag initialization. */ - cras_bt_io_create_profile_ret = &bt_iodev2; - cras_bt_device_append_iodev(device, &d3_, - CRAS_BT_DEVICE_PROFILE_HFP_AUDIOGATEWAY); - - cras_tm_create_timer_cb(NULL, cras_tm_create_timer_cb_data); - EXPECT_EQ(2, cras_tm_create_timer_called); - EXPECT_EQ(1, cras_hfp_ag_remove_conflict_called); - EXPECT_EQ(1, cras_hfp_ag_start_called); - EXPECT_EQ(1, cras_iodev_set_node_plugged_called); - EXPECT_EQ(1, cras_iodev_set_node_plugged_value); - - cras_bt_device_remove(device); - FreeMockDBusMessage(msg_root); -} - -TEST_F(BtDeviceTestSuite, SetDeviceConnectedA2dpHfpHsp) { - struct cras_bt_device* device; - struct MockDBusMessage *msg_root, *cur; - - ResetStubData(); - - device = cras_bt_device_create(NULL, FAKE_OBJ_PATH); - EXPECT_NE((void*)NULL, device); - - 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); - EXPECT_EQ(1, cras_tm_create_timer_called); - EXPECT_NE((void*)NULL, cras_tm_create_timer_cb); - - /* Schedule another timer, if not HFP nor A2DP is ready. */ - cras_tm_create_timer_cb(NULL, cras_tm_create_timer_cb_data); - EXPECT_EQ(2, cras_tm_create_timer_called); - - /* ConnectProfile must not be called, since the first profile connection - * should be initiated by Bluez. - */ - EXPECT_EQ(0, dbus_message_new_method_call_called); - - cras_bt_device_audio_gateway_initialized(device); - - /* Schedule another timer, because A2DP is not ready. */ - cras_tm_create_timer_cb(NULL, cras_tm_create_timer_cb_data); - EXPECT_EQ(3, cras_tm_create_timer_called); - EXPECT_EQ(0, cras_hfp_ag_start_called); - - /* ConnectProfile should be called to connect A2DP, since HFP is connected */ - EXPECT_EQ(1, dbus_message_new_method_call_called); - EXPECT_STREQ("ConnectProfile", dbus_message_new_method_call_method); - - cras_bt_device_a2dp_configured(device); - - cras_tm_create_timer_cb(NULL, cras_tm_create_timer_cb_data); - EXPECT_EQ(3, cras_tm_create_timer_called); - EXPECT_EQ(1, cras_hfp_ag_remove_conflict_called); - EXPECT_EQ(1, cras_a2dp_start_called); - EXPECT_EQ(1, cras_hfp_ag_start_called); - - cras_bt_device_remove(device); - FreeMockDBusMessage(msg_root); -} - -TEST_F(BtDeviceTestSuite, DevConnectedConflictCheck) { - struct cras_bt_device* device; - struct MockDBusMessage *msg_root, *cur; - - ResetStubData(); - - device = cras_bt_device_create(NULL, FAKE_OBJ_PATH); - EXPECT_NE((void*)NULL, device); - - 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); - cras_bt_device_audio_gateway_initialized(device); - cras_bt_device_a2dp_configured(device); - EXPECT_EQ(1, cras_tm_create_timer_called); - - /* Fake that a different device already connected with A2DP */ - cras_a2dp_connected_device_ret = - reinterpret_cast<struct cras_bt_device*>(0x99); - cras_tm_create_timer_cb(NULL, cras_tm_create_timer_cb_data); - EXPECT_EQ(1, cras_tm_create_timer_called); - - /* Expect check conflict in HFP AG and A2DP. */ - EXPECT_EQ(1, cras_hfp_ag_remove_conflict_called); - EXPECT_EQ(1, cras_a2dp_suspend_connected_device_called); - EXPECT_EQ(cras_a2dp_suspend_connected_device_dev, - cras_a2dp_connected_device_ret); - - EXPECT_EQ(1, cras_a2dp_start_called); - EXPECT_EQ(1, cras_hfp_ag_start_called); - - cras_bt_device_remove(device); - FreeMockDBusMessage(msg_root); -} - -TEST_F(BtDeviceTestSuite, A2dpDropped) { - struct cras_bt_device* device; - struct MockDBusMessage *msg_root, *cur; - - ResetStubData(); - - device = cras_bt_device_create(NULL, FAKE_OBJ_PATH); - EXPECT_NE((void*)NULL, device); - - 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); - cras_bt_device_audio_gateway_initialized(device); - cras_bt_device_a2dp_configured(device); - EXPECT_EQ(1, cras_tm_create_timer_called); - EXPECT_NE((void*)NULL, cras_tm_create_timer_cb); - - cras_bt_device_notify_profile_dropped(device, - CRAS_BT_DEVICE_PROFILE_A2DP_SINK); - EXPECT_EQ(2, cras_tm_create_timer_called); - - /* Expect suspend timer is scheduled. */ - cras_tm_create_timer_cb(NULL, cras_tm_create_timer_cb_data); - EXPECT_EQ(1, cras_a2dp_suspend_connected_device_called); - EXPECT_EQ(1, cras_hfp_ag_suspend_connected_device_called); - EXPECT_EQ(1, dbus_message_new_method_call_called); - EXPECT_STREQ("Disconnect", dbus_message_new_method_call_method); - - cras_bt_device_remove(device); - FreeMockDBusMessage(msg_root); -} - -TEST_F(BtDeviceTestSuite, DevConnectDisconnectBackToBack) { - struct cras_bt_device* device; - struct MockDBusMessage *msg_root, *cur; - - ResetStubData(); - - device = cras_bt_device_create(NULL, FAKE_OBJ_PATH); - EXPECT_NE((void*)NULL, device); - - 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); - EXPECT_EQ(1, cras_tm_create_timer_called); - EXPECT_NE((void*)NULL, cras_tm_create_timer_cb); - FreeMockDBusMessage(msg_root); - - cras_bt_device_a2dp_configured(device); - cras_bt_device_audio_gateway_initialized(device); - - /* Expect suspend timer is scheduled. */ - cras_tm_create_timer_ret = reinterpret_cast<struct cras_timer*>(0x101); - cras_bt_device_notify_profile_dropped(device, - CRAS_BT_DEVICE_PROFILE_A2DP_SINK); - EXPECT_EQ(2, cras_tm_create_timer_called); - /* Another profile drop won't schedule another timer because one is - * already armed. */ - EXPECT_NE((void*)NULL, cras_tm_create_timer_cb); - cras_bt_device_notify_profile_dropped(device, - CRAS_BT_DEVICE_PROFILE_HFP_HANDSFREE); - EXPECT_EQ(2, cras_tm_create_timer_called); - - cur = msg_root = NewMockDBusConnectedMessage(0); - cras_bt_device_update_properties(device, (DBusMessageIter*)&cur, NULL); - - /* When BlueZ reports headset disconnection, cancel the pending timer. */ - EXPECT_EQ(cras_tm_cancel_timer_called, 1); - EXPECT_EQ(cras_tm_cancel_timer_arg, (void*)0x101); - FreeMockDBusMessage(msg_root); - - /* Headset connects again. */ - cur = msg_root = NewMockDBusConnectedMessage(1); - cras_bt_device_update_properties(device, (DBusMessageIter*)&cur, NULL); - EXPECT_EQ(3, cras_tm_create_timer_called); - EXPECT_NE((void*)NULL, cras_tm_create_timer_cb); - FreeMockDBusMessage(msg_root); - - /* Headset disconnects, later profile drop events shouldn't trigger - * suspend timer because headset is already in disconnected stats. - */ - cur = msg_root = NewMockDBusConnectedMessage(0); - cras_bt_device_update_properties(device, (DBusMessageIter*)&cur, NULL); - FreeMockDBusMessage(msg_root); - - cras_tm_create_timer_called = 0; - cras_bt_device_notify_profile_dropped(device, - CRAS_BT_DEVICE_PROFILE_A2DP_SINK); - EXPECT_EQ(0, cras_tm_create_timer_called); - cras_bt_device_notify_profile_dropped(device, - CRAS_BT_DEVICE_PROFILE_HFP_HANDSFREE); - EXPECT_EQ(0, cras_tm_create_timer_called); - - cras_bt_device_remove(device); -} - -TEST_F(BtDeviceTestSuite, ConnectionWatchTimeout) { - struct cras_bt_device* device; - struct MockDBusMessage *msg_root, *cur; - - ResetStubData(); - - device = cras_bt_device_create(NULL, FAKE_OBJ_PATH); - EXPECT_NE((void*)NULL, device); - - 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); - EXPECT_EQ(1, cras_tm_create_timer_called); - EXPECT_NE((void*)NULL, cras_tm_create_timer_cb); - - cras_bt_device_a2dp_configured(device); - - for (unsigned int i = 0; i < CONN_WATCH_MAX_RETRIES; i++) { - cras_tm_create_timer_cb(NULL, cras_tm_create_timer_cb_data); - EXPECT_EQ(i + 2, cras_tm_create_timer_called); - EXPECT_EQ(0, cras_a2dp_start_called); - EXPECT_EQ(0, cras_hfp_ag_start_called); - EXPECT_EQ(0, cras_hfp_ag_remove_conflict_called); - } - - dbus_message_new_method_call_called = 0; - - /* Expect suspend timer is scheduled. */ - cras_tm_create_timer_cb(NULL, cras_tm_create_timer_cb_data); - EXPECT_EQ(1, cras_a2dp_suspend_connected_device_called); - EXPECT_EQ(1, cras_hfp_ag_suspend_connected_device_called); - EXPECT_EQ(1, dbus_message_new_method_call_called); - EXPECT_STREQ("Disconnect", dbus_message_new_method_call_method); - - cras_bt_device_remove(device); - FreeMockDBusMessage(msg_root); -} - -/* Stubs */ -extern "C" { - -struct cras_bt_event_log* btlog; - -/* From bt_io */ -struct cras_iodev* cras_bt_io_create(struct cras_bt_device* device, - struct cras_iodev* dev, - enum cras_bt_device_profile profile) { - cras_bt_io_create_called++; - cras_bt_io_create_profile_val = profile; - return cras_bt_io_create_profile_ret; -} -void cras_bt_io_destroy(struct cras_iodev* bt_iodev) { - cras_bt_io_destroy_called++; -} -struct cras_ionode* cras_bt_io_get_profile( - struct cras_iodev* bt_iodev, - enum cras_bt_device_profile profile) { - return cras_bt_io_get_profile_ret; -} -int cras_bt_io_append(struct cras_iodev* bt_iodev, - struct cras_iodev* dev, - enum cras_bt_device_profile profile) { - cras_bt_io_append_called++; - cras_bt_io_append_profile_val = profile; - cras_bt_io_append_btio_val = bt_iodev; - return 0; -} -int cras_bt_io_on_profile(struct cras_iodev* bt_iodev, - enum cras_bt_device_profile profile) { - return 0; -} -unsigned int cras_bt_io_try_remove(struct cras_iodev* bt_iodev, - struct cras_iodev* dev) { - return cras_bt_io_try_remove_ret; -} -int cras_bt_io_remove(struct cras_iodev* bt_iodev, struct cras_iodev* dev) { - cras_bt_io_remove_called++; - return 0; -} - -/* From bt_adapter */ -struct cras_bt_adapter* cras_bt_adapter_get(const char* object_path) { - return NULL; -} -const char* cras_bt_adapter_address(const struct cras_bt_adapter* adapter) { - return NULL; -} - -int cras_bt_adapter_on_usb(struct cras_bt_adapter* adapter) { - return 1; -} - -/* From bt_profile */ -void cras_bt_profile_on_device_disconnected(struct cras_bt_device* device) {} - -/* From hfp_ag_profile */ -struct hfp_slc_handle* cras_hfp_ag_get_slc(struct cras_bt_device* device) { - return NULL; -} - -void cras_hfp_ag_suspend_connected_device(struct cras_bt_device* device) { - cras_hfp_ag_suspend_connected_device_called++; -} - -void cras_a2dp_suspend_connected_device(struct cras_bt_device* device) { - cras_a2dp_suspend_connected_device_called++; - cras_a2dp_suspend_connected_device_dev = device; -} - -void cras_a2dp_start(struct cras_bt_device* device) { - cras_a2dp_start_called++; -} - -struct cras_bt_device* cras_a2dp_connected_device() { - return cras_a2dp_connected_device_ret; -} - -int cras_hfp_ag_remove_conflict(struct cras_bt_device* device) { - cras_hfp_ag_remove_conflict_called++; - return 0; -} - -int cras_hfp_ag_start(struct cras_bt_device* device) { - cras_hfp_ag_start_called++; - return 0; -} - -void cras_hfp_ag_suspend() {} - -/* From hfp_slc */ -int hfp_event_speaker_gain(struct hfp_slc_handle* handle, int gain) { - return 0; -} - -/* From iodev_list */ - -int cras_iodev_open(struct cras_iodev* dev, - unsigned int cb_level, - const struct cras_audio_format* fmt) { - return 0; -} - -int cras_iodev_close(struct cras_iodev* dev) { - return 0; -} - -void cras_iodev_set_node_plugged(struct cras_ionode* ionode, int plugged) { - cras_iodev_set_node_plugged_called++; - cras_iodev_set_node_plugged_value = plugged; -} - -int cras_iodev_list_dev_is_enabled(const struct cras_iodev* dev) { - return 0; -} - -void cras_iodev_list_suspend_dev(struct cras_iodev* dev) {} - -void cras_iodev_list_resume_dev(struct cras_iodev* dev) {} - -void cras_iodev_list_notify_node_volume(struct cras_ionode* node) {} - -int cras_main_message_send(struct cras_main_message* msg) { - // cras_main_message is a local variable from caller, we should allocate - // memory from heap and copy its data - if (cras_main_message_send_msg) - free(cras_main_message_send_msg); - cras_main_message_send_msg = - (struct cras_main_message*)calloc(1, msg->length); - memcpy((void*)cras_main_message_send_msg, (void*)msg, msg->length); - return 0; -} - -int cras_main_message_add_handler(enum CRAS_MAIN_MESSAGE_TYPE type, - cras_message_callback callback, - void* callback_data) { - cras_main_message_add_handler_callback = callback; - cras_main_message_add_handler_callback_data = callback_data; - return 0; -} - -/* From cras_system_state */ -struct cras_tm* cras_system_state_get_tm() { - return NULL; -} - -/* From cras_tm */ -struct cras_timer* cras_tm_create_timer(struct cras_tm* tm, - unsigned int ms, - void (*cb)(struct cras_timer* t, - void* data), - void* cb_data) { - cras_tm_create_timer_called++; - cras_tm_create_timer_cb = cb; - cras_tm_create_timer_cb_data = cb_data; - return cras_tm_create_timer_ret; -} - -void cras_tm_cancel_timer(struct cras_tm* tm, struct cras_timer* t) { - cras_tm_cancel_timer_called++; - cras_tm_cancel_timer_arg = t; -} - -DBusMessage* dbus_message_new_method_call(const char* destination, - const char* path, - const char* iface, - const char* method) { - dbus_message_new_method_call_called++; - dbus_message_new_method_call_method = method; - return reinterpret_cast<DBusMessage*>(0x456); -} - -void dbus_message_unref(DBusMessage* message) {} - -dbus_bool_t dbus_message_append_args(DBusMessage* message, - int first_arg_type, - ...) { - return true; -} - -dbus_bool_t dbus_connection_send_with_reply(DBusConnection* connection, - DBusMessage* message, - DBusPendingCall** pending_return, - int timeout_milliseconds) { - return true; -} - -dbus_bool_t dbus_pending_call_set_notify(DBusPendingCall* pending, - DBusPendingCallNotifyFunction function, - void* user_data, - DBusFreeFunction free_user_data) { - return true; -} - -void dbus_message_iter_recurse(DBusMessageIter* iter, DBusMessageIter* sub) { - MockDBusMessage* msg = *(MockDBusMessage**)iter; - MockDBusMessage** cur = (MockDBusMessage**)sub; - *cur = msg->recurse; -} - -dbus_bool_t dbus_message_iter_next(DBusMessageIter* iter) { - MockDBusMessage** cur = (MockDBusMessage**)iter; - MockDBusMessage* msg = *cur; - *cur = msg->next; - return true; -} - -int dbus_message_iter_get_arg_type(DBusMessageIter* iter) { - MockDBusMessage* msg; - - if (iter == NULL) - return DBUS_TYPE_INVALID; - - msg = *(MockDBusMessage**)iter; - if (msg == NULL) - return DBUS_TYPE_INVALID; - - return msg->type; -} - -void dbus_message_iter_get_basic(DBusMessageIter* iter, void* value) { - MockDBusMessage* msg = *(MockDBusMessage**)iter; - switch (msg->type) { - case DBUS_TYPE_BOOLEAN: - memcpy(value, &msg->value, sizeof(int)); - break; - case DBUS_TYPE_STRING: - memcpy(value, &msg->value, sizeof(char*)); - break; - } -} - -} // extern "C" -} // namespace - -int main(int argc, char** argv) { - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} |