1bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal/****************************************************************************** 2bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal * 3bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal * Copyright (C) 2016 The Android Open Source Project 4bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal * 5bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal * Licensed under the Apache License, Version 2.0 (the "License"); 6bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal * you may not use this file except in compliance with the License. 7bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal * You may obtain a copy of the License at: 8bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal * 9bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal * http://www.apache.org/licenses/LICENSE-2.0 10bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal * 11bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal * Unless required by applicable law or agreed to in writing, software 12bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal * distributed under the License is distributed on an "AS IS" BASIS, 13bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal * See the License for the specific language governing permissions and 15bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal * limitations under the License. 16bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal * 17bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal ******************************************************************************/ 18bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal 19bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal#include <gtest/gtest.h> 20bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal 21bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal#include "bta/hf_client/bta_hf_client_int.h" 22bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal#include "bta/include/bta_hf_client_api.h" 23bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal 24bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwalnamespace { 25bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwalconst BD_ADDR bdaddr1 = {0x11, 0x22, 0x33, 0x44, 0x55, 0x66}; 26bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwalconst BD_ADDR bdaddr2 = {0x66, 0x55, 0x44, 0x33, 0x22, 0x11}; 27bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal} // namespace 28bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal 29bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwalclass BtaHfClientTest : public testing::Test { 30bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal protected: 31bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal void SetUp() override { 32bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal // Reset the memory block, this is the state on which the allocate handle 33bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal // would start operating 34bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal bta_hf_client_cb_arr_init(); 35bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal } 36bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal}; 37bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal 38bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal// Test that when we can allocate a device on the block and then check 39bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal// the status of the blocks 40bd3ae7cbf195caf91693046147b34d25b6317485Sanket AgarwalTEST_F(BtaHfClientTest, test_allocate_block_one_device) { 41bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal uint16_t p_handle = 0; 42bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal bool status = bta_hf_client_allocate_handle(bdaddr1, &p_handle); 43bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal 44bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal // Allocation should succeed 45bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal EXPECT_EQ(true, status); 46bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal EXPECT_GT(p_handle, 0); 47bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal} 48bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal 49bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal// Test that we cannot allocate the same device on two separate control blocks 50bd3ae7cbf195caf91693046147b34d25b6317485Sanket AgarwalTEST_F(BtaHfClientTest, test_no_allocate_block_same_device) { 51bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal uint16_t p_handle; 52bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal bool status = bta_hf_client_allocate_handle(bdaddr1, &p_handle); 53bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal 54bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal // Allocation should succeed 55bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal EXPECT_EQ(true, status); 56bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal EXPECT_GT(p_handle, 0); 57bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal 58bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal EXPECT_TRUE(bta_hf_client_find_cb_by_bda(bdaddr1) != NULL); 59bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal 60bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal status = bta_hf_client_allocate_handle(bdaddr1, &p_handle); 61bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal 62bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal // Allocation should fail 63bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal EXPECT_EQ(false, status); 64bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal} 65bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal 66bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal// Test that we can allocate two different devices as separate control blocks 67bd3ae7cbf195caf91693046147b34d25b6317485Sanket AgarwalTEST_F(BtaHfClientTest, test_allocate_block_diff_device) { 68bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal uint16_t p_handle_first; 69bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal bool status = bta_hf_client_allocate_handle(bdaddr1, &p_handle_first); 70bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal 71bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal // Allocation should succeed 72bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal EXPECT_EQ(true, status); 73bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal EXPECT_GT(p_handle_first, 0); 74bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal 75bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal EXPECT_TRUE(bta_hf_client_find_cb_by_bda(bdaddr2) == NULL); 76bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal 77bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal uint16_t p_handle_second; 78bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal status = bta_hf_client_allocate_handle(bdaddr2, &p_handle_second); 79bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal 80bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal // Allocation should succeed 81bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal EXPECT_EQ(true, status); 82bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal EXPECT_GT(p_handle_second, 0); 83bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal EXPECT_NE(p_handle_first, p_handle_second); 84bd3ae7cbf195caf91693046147b34d25b6317485Sanket Agarwal} 85