1 /******************************************************************************
2 *
3 * Copyright 2015 Google, Inc.
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at:
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 *
17 ******************************************************************************/
18
19 #include "adapter/bluetooth_test.h"
20 #include "btcore/include/property.h"
21 #include "types/bt_transport.h"
22 #include "types/raw_address.h"
23
24 namespace {
25
26 // Each iteration of the test takes about 2 seconds to run, so choose a value
27 // that matches your time constraints. For example, 5 iterations would take
28 // about 10 seconds to run
29 const int kTestRepeatCount = 5;
30
31 } // namespace
32
33 namespace bttest {
34
TEST_F(BluetoothTest,AdapterEnableDisable)35 TEST_F(BluetoothTest, AdapterEnableDisable) {
36 EXPECT_EQ(GetState(), BT_STATE_OFF) << "Test should be run with Adapter disabled";
37
38 EXPECT_EQ(bt_interface()->enable(), BT_STATUS_SUCCESS);
39 semaphore_wait(adapter_state_changed_callback_sem_);
40 EXPECT_EQ(GetState(), BT_STATE_ON) << "Adapter did not turn on.";
41
42 EXPECT_EQ(bt_interface()->disable(), BT_STATUS_SUCCESS);
43 semaphore_wait(adapter_state_changed_callback_sem_);
44 EXPECT_EQ(GetState(), BT_STATE_OFF) << "Adapter did not turn off.";
45 }
46
TEST_F(BluetoothTest,AdapterRepeatedEnableDisable)47 TEST_F(BluetoothTest, AdapterRepeatedEnableDisable) {
48 EXPECT_EQ(GetState(), BT_STATE_OFF) << "Test should be run with Adapter disabled";
49
50 for (int i = 0; i < kTestRepeatCount; ++i) {
51 EXPECT_EQ(bt_interface()->enable(), BT_STATUS_SUCCESS);
52 semaphore_wait(adapter_state_changed_callback_sem_);
53 EXPECT_EQ(GetState(), BT_STATE_ON) << "Adapter did not turn on.";
54
55 EXPECT_EQ(bt_interface()->disable(), BT_STATUS_SUCCESS);
56 semaphore_wait(adapter_state_changed_callback_sem_);
57 EXPECT_EQ(GetState(), BT_STATE_OFF) << "Adapter did not turn off.";
58 }
59 }
60
TEST_F(BluetoothTest,AdapterSetGetName)61 TEST_F(BluetoothTest, AdapterSetGetName) {
62 bt_property_t* new_name = property_new_name("BluetoothTestName1");
63
64 EXPECT_EQ(bt_interface()->enable(), BT_STATUS_SUCCESS);
65 semaphore_wait(adapter_state_changed_callback_sem_);
66 EXPECT_EQ(GetState(), BT_STATE_ON) << "Test should be run with Adapter enabled";
67
68 // Enabling the interface will call the properties callback twice before
69 // ever reaching this point.
70 ClearSemaphore(adapter_properties_callback_sem_);
71
72 EXPECT_EQ(bt_interface()->get_adapter_property(BT_PROPERTY_BDNAME), BT_STATUS_SUCCESS);
73 semaphore_wait(adapter_properties_callback_sem_);
74 EXPECT_GT(GetPropertiesChangedCount(), 0) << "Expected at least one adapter property to change";
75 bt_property_t* name_property = GetProperty(BT_PROPERTY_BDNAME);
76 EXPECT_NE(name_property, nullptr);
77 if (property_equals(name_property, new_name)) {
78 property_free(new_name);
79 new_name = property_new_name("BluetoothTestName2");
80 }
81 std::string old_name((const char*)property_as_name(name_property)->name, name_property->len);
82
83 EXPECT_EQ(bt_interface()->set_adapter_property(new_name), BT_STATUS_SUCCESS);
84 semaphore_wait(adapter_properties_callback_sem_);
85 EXPECT_GT(GetPropertiesChangedCount(), 0) << "Expected at least one adapter property to change";
86 EXPECT_TRUE(GetProperty(BT_PROPERTY_BDNAME)) << "The Bluetooth name property did not change.";
87 EXPECT_TRUE(property_equals(GetProperty(BT_PROPERTY_BDNAME), new_name))
88 << "Bluetooth name " << property_as_name(GetProperty(BT_PROPERTY_BDNAME))->name
89 << " does not match test value " << property_as_name(new_name)->name;
90
91 bt_property_t* old_name_property = property_new_name(old_name.c_str());
92 EXPECT_EQ(bt_interface()->set_adapter_property(old_name_property), BT_STATUS_SUCCESS);
93 semaphore_wait(adapter_properties_callback_sem_);
94 EXPECT_TRUE(property_equals(GetProperty(BT_PROPERTY_BDNAME), old_name_property))
95 << "Bluetooth name " << property_as_name(GetProperty(BT_PROPERTY_BDNAME))->name
96 << " does not match original name" << old_name;
97
98 EXPECT_EQ(bt_interface()->disable(), BT_STATUS_SUCCESS);
99 semaphore_wait(adapter_state_changed_callback_sem_);
100 EXPECT_EQ(GetState(), BT_STATE_OFF) << "Adapter did not turn off.";
101 property_free(new_name);
102 property_free(old_name_property);
103 }
104
TEST_F(BluetoothTest,AdapterStartDiscovery)105 TEST_F(BluetoothTest, AdapterStartDiscovery) {
106 EXPECT_EQ(bt_interface()->enable(), BT_STATUS_SUCCESS);
107 semaphore_wait(adapter_state_changed_callback_sem_);
108 EXPECT_EQ(GetState(), BT_STATE_ON) << "Test should be run with Adapter enabled";
109
110 EXPECT_EQ(bt_interface()->start_discovery(), BT_STATUS_SUCCESS);
111 semaphore_wait(discovery_state_changed_callback_sem_);
112 EXPECT_EQ(GetDiscoveryState(), BT_DISCOVERY_STARTED) << "Unable to start discovery.";
113
114 EXPECT_EQ(bt_interface()->disable(), BT_STATUS_SUCCESS);
115 semaphore_wait(adapter_state_changed_callback_sem_);
116 EXPECT_EQ(GetState(), BT_STATE_OFF) << "Adapter did not turn off.";
117 }
118
TEST_F(BluetoothTest,AdapterCancelDiscovery)119 TEST_F(BluetoothTest, AdapterCancelDiscovery) {
120 EXPECT_EQ(bt_interface()->enable(), BT_STATUS_SUCCESS);
121 semaphore_wait(adapter_state_changed_callback_sem_);
122 EXPECT_EQ(GetState(), BT_STATE_ON) << "Test should be run with Adapter enabled";
123
124 EXPECT_EQ(bt_interface()->start_discovery(), BT_STATUS_SUCCESS);
125 semaphore_wait(discovery_state_changed_callback_sem_);
126 EXPECT_EQ(bt_interface()->cancel_discovery(), BT_STATUS_SUCCESS);
127 semaphore_wait(discovery_state_changed_callback_sem_);
128
129 EXPECT_EQ(GetDiscoveryState(), BT_DISCOVERY_STOPPED) << "Unable to stop discovery.";
130
131 EXPECT_EQ(bt_interface()->disable(), BT_STATUS_SUCCESS);
132 semaphore_wait(adapter_state_changed_callback_sem_);
133 EXPECT_EQ(GetState(), BT_STATE_OFF) << "Adapter did not turn off.";
134 }
135
TEST_F(BluetoothTest,AdapterDisableDuringBonding)136 TEST_F(BluetoothTest, AdapterDisableDuringBonding) {
137 EXPECT_EQ(GetState(), BT_STATE_OFF) << "Test should be run with Adapter disabled";
138
139 RawAddress bdaddr = {{0x22, 0x22, 0x22, 0x22, 0x22, 0x22}};
140
141 for (int i = 0; i < kTestRepeatCount; ++i) {
142 EXPECT_EQ(bt_interface()->enable(), BT_STATUS_SUCCESS);
143 semaphore_wait(adapter_state_changed_callback_sem_);
144 EXPECT_EQ(GetState(), BT_STATE_ON) << "Adapter did not turn on.";
145
146 EXPECT_EQ(bt_interface()->create_bond(&bdaddr, BT_TRANSPORT_BR_EDR), BT_STATUS_SUCCESS);
147
148 EXPECT_EQ(bt_interface()->cancel_bond(&bdaddr), BT_STATUS_SUCCESS);
149
150 EXPECT_EQ(bt_interface()->disable(), BT_STATUS_SUCCESS);
151 semaphore_wait(adapter_state_changed_callback_sem_);
152 EXPECT_EQ(GetState(), BT_STATE_OFF) << "Adapter did not turn off.";
153 }
154 }
155
TEST_F(BluetoothTest,AdapterCleanupDuringDiscovery)156 TEST_F(BluetoothTest, AdapterCleanupDuringDiscovery) {
157 EXPECT_EQ(GetState(), BT_STATE_OFF) << "Test should be run with Adapter disabled";
158
159 bt_callbacks_t* callbacks = bt_callbacks();
160 ASSERT_TRUE(callbacks != nullptr);
161
162 for (int i = 0; i < kTestRepeatCount; ++i) {
163 bt_interface()->init(callbacks, false, false, 0, false);
164 EXPECT_EQ(bt_interface()->enable(), BT_STATUS_SUCCESS);
165 semaphore_wait(adapter_state_changed_callback_sem_);
166 EXPECT_EQ(GetState(), BT_STATE_ON) << "Adapter did not turn on.";
167
168 EXPECT_EQ(bt_interface()->start_discovery(), BT_STATUS_SUCCESS);
169
170 EXPECT_EQ(bt_interface()->disable(), BT_STATUS_SUCCESS);
171 semaphore_wait(adapter_state_changed_callback_sem_);
172 EXPECT_EQ(GetState(), BT_STATE_OFF) << "Adapter did not turn off.";
173 bt_interface()->cleanup();
174 }
175 }
176
177 } // namespace bttest
178