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