1 /*
2 * Copyright (C) 2021-2022 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include <gtest/gtest.h>
17 #include "bluetooth_errorcode.h"
18 #include "bluetooth_gatt_server.h"
19 #include "bluetooth_host.h"
20 #include "bluetooth_remote_device.h"
21
22 using namespace testing::ext;
23
24 namespace OHOS {
25 namespace Bluetooth {
26 const int TIME = 2;
27 class BluetoothGattServerCallbackCommon : public GattServerCallback {
28 public:
29 BluetoothGattServerCallbackCommon() = default;
30 virtual ~BluetoothGattServerCallbackCommon() = default;
OnConnectionStateUpdate(const BluetoothRemoteDevice & device,int state)31 void OnConnectionStateUpdate(const BluetoothRemoteDevice &device, int state) override
32 {}
OnServiceAdded(GattService * Service,int ret)33 void OnServiceAdded(GattService *Service, int ret) override
34 {}
OnCharacteristicReadRequest(const BluetoothRemoteDevice & device,GattCharacteristic & characteristic,int requestId)35 void OnCharacteristicReadRequest(
36 const BluetoothRemoteDevice &device, GattCharacteristic &characteristic, int requestId) override
37 {}
OnCharacteristicWriteRequest(const BluetoothRemoteDevice & device,GattCharacteristic & characteristic,int requestId)38 void OnCharacteristicWriteRequest(
39 const BluetoothRemoteDevice &device, GattCharacteristic &characteristic, int requestId) override
40 {}
OnDescriptorReadRequest(const BluetoothRemoteDevice & device,GattDescriptor & descriptor,int requestId)41 void OnDescriptorReadRequest(
42 const BluetoothRemoteDevice &device, GattDescriptor &descriptor, int requestId) override
43 {}
OnDescriptorWriteRequest(const BluetoothRemoteDevice & device,GattDescriptor & descriptor,int requestId)44 void OnDescriptorWriteRequest(
45 const BluetoothRemoteDevice &device, GattDescriptor &descriptor, int requestId) override
46 {}
OnMtuUpdate(const BluetoothRemoteDevice & device,int mtu)47 void OnMtuUpdate(const BluetoothRemoteDevice &device, int mtu) override
48 {}
OnNotificationCharacteristicChanged(const BluetoothRemoteDevice & device,int result)49 void OnNotificationCharacteristicChanged(const BluetoothRemoteDevice &device, int result) override
50 {}
OnConnectionParameterChanged(const BluetoothRemoteDevice & device,int interval,int latency,int timeout,int status)51 void OnConnectionParameterChanged(
52 const BluetoothRemoteDevice &device, int interval, int latency, int timeout, int status) override
53 {}
54
55 private:
56 };
57 static BluetoothGattServerCallbackCommon callback_;
58
59 class GattServerTest : public testing::Test {
60 public:
GattServerTest()61 GattServerTest()
62 {}
~GattServerTest()63 ~GattServerTest()
64 {}
65
66 int tempData_ = 0;
67 static void SetUpTestCase(void);
68 static void TearDownTestCase(void);
69 void SetUp();
70 void TearDown();
71 BluetoothHost *host_;
72 };
73
SetUpTestCase(void)74 void GattServerTest::SetUpTestCase(void)
75 {}
TearDownTestCase(void)76 void GattServerTest::TearDownTestCase(void)
77 {}
SetUp()78 void GattServerTest::SetUp()
79 {
80 tempData_ = 0;
81 host_ = &BluetoothHost::GetDefaultHost();
82 host_->EnableBt();
83 host_->EnableBle();
84 sleep(TIME);
85 }
86
TearDown()87 void GattServerTest::TearDown()
88 {
89 host_->DisableBt();
90 host_->DisableBle();
91 host_ = nullptr;
92 sleep(TIME);
93 }
94
95 /*
96 * @tc.number: GattServer001
97 * @tc.name: AddService
98 * @tc.desc: Check the addservice interface.
99 */
100 HWTEST_F(GattServerTest, GattServer_ModuleTest_AddService, TestSize.Level1)
101 {
102 GTEST_LOG_(INFO) << "GattServer_ModuleTest_AddService start";
103 GattServer server(callback_);
104 UUID uuidSerPer;
105 uuidSerPer = UUID::FromString("00001810-0000-1000-8000-00805F9B34F7");
106 GattService serviceOne(uuidSerPer, GattServiceType::PRIMARY);
107 int ret = server.AddService(serviceOne);
108
109 EXPECT_EQ(ret, 0);
110 GTEST_LOG_(INFO) << "GattServer_ModuleTest_AddService end";
111 }
112
113 /*
114 * @tc.number: GattServer002
115 * @tc.name: CancelConnection
116 * @tc.desc: Check the CancelConnection interface.
117 */
118 HWTEST_F(GattServerTest, GattServer_ModuleTest_CancelConnection, TestSize.Level1)
119 {
120 GTEST_LOG_(INFO) << "GattServer_ModuleTest_CancelConnection start";
121 GattServer server(callback_);
122
123 BluetoothRemoteDevice deviceBle_;
124
125 server.CancelConnection(deviceBle_);
126 GTEST_LOG_(INFO) << "GattServer_ModuleTest_CancelConnection end";
127 }
128
129 /*
130 * @tc.number: GattServer003
131 * @tc.name: RemoveService
132 * @tc.desc: Check the RemoveService interface.
133 */
134 HWTEST_F(GattServerTest, GattServer_ModuleTest_RemoveService, TestSize.Level1)
135 {
136 GTEST_LOG_(INFO) << "GattServer_ModuleTest_RemoveService start";
137 GattServer server(callback_);
138
139 UUID uuidSerPer;
140 uuidSerPer = UUID::FromString("00001810-0000-1000-8000-00805F9B34FB");
141 GattService serviceOne(uuidSerPer, 1, 1, GattServiceType::PRIMARY);
142 int result = server.AddService(serviceOne);
143 EXPECT_EQ(result, 0);
144 sleep(5);
145 std::list<GattService> &list = server.GetServices();
146 GTEST_LOG_(INFO) << list.size();
147 int ret = server.RemoveGattService(list.back());
148 EXPECT_EQ(ret, 0);
149 GTEST_LOG_(INFO) << "GattServer_ModuleTest_RemoveService end";
150 }
151
152 /*
153 * @tc.number: GattServer005
154 * @tc.name: ClearServices
155 * @tc.desc: Check the ClearServices interface.
156 */
157 HWTEST_F(GattServerTest, GattServer_ModuleTest_ClearServices, TestSize.Level1)
158 {
159 GTEST_LOG_(INFO) << "GattServer_ModuleTest_ClearServices start";
160 GattServer server(callback_);
161
162 std::list<GattService>& list = server.GetServices();
163 GTEST_LOG_(INFO) << (int)list.size();
164 server.ClearServices();
165 list = server.GetServices();
166 EXPECT_EQ((int)list.size(), 0);
167 GTEST_LOG_(INFO) << "GattServer_ModuleTest_ClearServices end";
168 }
169
170 /*
171 * @tc.number: GattServer006
172 * @tc.name: NotifyCharacteristicChanged
173 * @tc.desc: Check the NotifyCharacteristicChanged interface.
174 */
175 HWTEST_F(GattServerTest, GattServer_ModuleTest_NotifyCharacteristicChanged, TestSize.Level1)
176 {
177 GTEST_LOG_(INFO) << "GattServer_ModuleTest_Notify start";
178 GattServer server(callback_);
179
180 BluetoothRemoteDevice deviceBle_;
181 UUID uuidSerPer;
182 uuidSerPer = UUID::FromString("00001810-0000-1000-8000-00805F9B34FB");
183 GattCharacteristic* aa = new GattCharacteristic(uuidSerPer, 1, 1);
184 int res = server.NotifyCharacteristicChanged(deviceBle_, *aa, false);
185 EXPECT_NE(res, NO_ERROR);
186
187 GTEST_LOG_(INFO) << "GattServer_ModuleTest_Notify end";
188 }
189
190 /*
191 * @tc.number: GattServer007
192 * @tc.name: SendResponse
193 * @tc.desc: Check the SendResponse interface.
194 */
195 HWTEST_F(GattServerTest, GattServer_ModuleTest_SendResponse, TestSize.Level1)
196 {
197 GTEST_LOG_(INFO) << "GattServer_ModuleTest_SendResponse start";
198 GattServer server(callback_);
199
200 BluetoothRemoteDevice deviceBle_;
201 string valueChrTwo = "2";
202 int ret = server.SendResponse(deviceBle_,
203 0,
204 (int)GattStatus::GATT_SUCCESS,
205 1,
206 (uint8_t *)valueChrTwo.c_str(),
207 valueChrTwo.size());
208 EXPECT_NE(ret, NO_ERROR);
209 GTEST_LOG_(INFO) << "GattServer_ModuleTest_SendResponse end";
210 }
211
212 /*
213 * @tc.number: GattServer008
214 * @tc.name: GetServices
215 * @tc.desc: Check the GetServices interface.
216 */
217 HWTEST_F(GattServerTest, GattServer_ModuleTest_GetServices, TestSize.Level1)
218 {
219 GTEST_LOG_(INFO) << "GattServer_ModuleTest_GetServices start";
220 GattServer server(callback_);
221
222 UUID uuidSerPer;
223 uuidSerPer = UUID::FromString("00001810-0000-1000-8000-00805F9B34F5");
224
225 GattService serviceOne(uuidSerPer, GattServiceType::PRIMARY);
226 int ret = server.AddService(serviceOne);
227
228 EXPECT_EQ(ret, 0);
229 sleep(TIME);
230 std::list<GattService> list = server.GetServices();
231 EXPECT_EQ((int)list.size(), 1);
232
233 GTEST_LOG_(INFO) << "GattServer_ModuleTest_GetServices end";
234 }
235
236 /*
237 * @tc.number: GattServer009
238 * @tc.name: GetService
239 * @tc.desc: Check the GetService interface.
240 */
241
242 HWTEST_F(GattServerTest, GattServer_ModuleTest_GetService, TestSize.Level1)
243 {
244 GTEST_LOG_(INFO) << "GattServer_ModuleTest_GetService start";
245 GattServer server(callback_);
246
247 UUID uuidSerPer;
248 uuidSerPer = UUID::FromString("00001810-0000-1000-8000-00805F9B34F9");
249
250 GattService serviceOne(uuidSerPer, GattServiceType::SECONDARY);
251 int ret = server.AddService(serviceOne);
252
253 EXPECT_EQ(ret, 0);
254 sleep(5);
255
256 std::optional<GattService> listSecondary = server.GetService(uuidSerPer, false);
257 EXPECT_FALSE(listSecondary->IsPrimary());
258 GTEST_LOG_(INFO) << "GattServer_ModuleTest_GetService end";
259 }
260 } // namespace Bluetooth
261 } // namespace OHOS
262