1 /*
2  * Copyright (C) 2021 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 <gmock/gmock.h>
17 #include <gtest/gtest.h>
18 #include "securec.h"
19 #include "bluetooth_gatt_characteristic.h"
20 #include "bluetooth_gatt_descriptor.h"
21 #include "uuid.h"
22 #include "bluetooth_def.h"
23 #include <memory>
24 
25 using namespace testing;
26 using namespace testing::ext;
27 
28 namespace OHOS {
29 namespace Bluetooth {
30 class GattCharacteristicTest : public testing::Test {
31 public:
GattCharacteristicTest()32     GattCharacteristicTest()
33     {}
~GattCharacteristicTest()34     ~GattCharacteristicTest()
35     {}
36 
37     GattCharacteristic *pGattCharacteristic = nullptr;
38     static void SetUpTestCase(void);
39     static void TearDownTestCase(void);
40     void SetUp();
41     void TearDown();
42 public:
43     UUID uuid_;
44     uint16_t handle_ = 1;
45     const int permissions_ = 100;
46     const int properties_ = 200;
47 };
48 
SetUpTestCase(void)49 void GattCharacteristicTest::SetUpTestCase(void)
50 {}
TearDownTestCase(void)51 void GattCharacteristicTest::TearDownTestCase(void)
52 {}
SetUp()53 void GattCharacteristicTest::SetUp()
54 {
55     uuid_ = UUID::RandomUUID();
56 }
57 
TearDown()58 void GattCharacteristicTest::TearDown()
59 {
60 
61 }
62 
63 /*
64  * @tc.number: GattClient001
65  * @tc.name: GattCharacteristic4
66 */
67 HWTEST_F(GattCharacteristicTest, GattCharacteristic_UnitTest_GattCharacteristic4, TestSize.Level1)
68 {
69     GTEST_LOG_(INFO) << "GattCharacteristic_GattCharacteristic(4 parameters) start";
70     pGattCharacteristic = new GattCharacteristic(uuid_, handle_, permissions_, properties_);
71     GTEST_LOG_(INFO) << "GattCharacteristic_GattCharacteristic(4 parameters) end";
72 }
73 
74 /*
75  * @tc.number: GattClient002
76  * @tc.name: GattCharacteristic3
77 */
78 HWTEST_F(GattCharacteristicTest, GattCharacteristic_UnitTest_GattCharacteristic3, TestSize.Level1)
79 {
80     GTEST_LOG_(INFO) << "GattCharacteristic_GattCharacteristic(3 parameters) start";
81     GTEST_LOG_(INFO) << "GattCharacteristic_GattCharacteristic(3 parameters) end";
82 }
83 
84 /*
85  * @tc.number: GattClient003
86  * @tc.name: AddDescriptor
87 */
88 HWTEST_F(GattCharacteristicTest, GattCharacteristic_UnitTest_AddDescriptor, TestSize.Level1)
89 {
90     GTEST_LOG_(INFO) << "GattCharacteristic_AddDescriptor start";
91     pGattCharacteristic = new GattCharacteristic(uuid_, handle_, permissions_, properties_);
92     GattDescriptor *pdescriptor = new GattDescriptor(uuid_, permissions_);
93     pGattCharacteristic->AddDescriptor(*pdescriptor);
94     GTEST_LOG_(INFO) << "GattCharacteristic_AddDescriptor end";
95 }
96 
97 /*
98  * @tc.number: GattClient004
99  * @tc.name: GetDescriptor
100 */
101 HWTEST_F(GattCharacteristicTest, GattCharacteristic_UnitTest_GetDescriptor, TestSize.Level1)
102 {
103     GTEST_LOG_(INFO) << "GattCharacteristic_GetDescriptor start";
104     pGattCharacteristic = new GattCharacteristic(uuid_, handle_, permissions_, properties_);
105     GattDescriptor *pdescriptor = new GattDescriptor(uuid_, permissions_);
106     pGattCharacteristic->AddDescriptor(*pdescriptor);
107 
108     GattDescriptor *pdescriptorTmp = pGattCharacteristic->GetDescriptor(uuid_);
109     if (pdescriptorTmp->GetUuid().Equals(uuid_)) {
110         EXPECT_TRUE(true);
111         GTEST_LOG_(INFO) << "GattCharacteristic_GetDescriptor returns correctly";
112     }
113     GTEST_LOG_(INFO) << "GattCharacteristic_GetDescriptor end";
114 }
115 
116 /*
117  * @tc.number: GattClient005
118  * @tc.name: GetHandle
119 */
120 HWTEST_F(GattCharacteristicTest, GattCharacteristic_UnitTest_GetHandle, TestSize.Level1)
121 {
122     GTEST_LOG_(INFO) << "GattCharacteristic_GetHandle start";
123     pGattCharacteristic = new GattCharacteristic(uuid_, handle_, permissions_, properties_);
124     uint16_t tempHandle = pGattCharacteristic->GetHandle();
125     EXPECT_EQ(handle_, tempHandle);
126     GTEST_LOG_(INFO) << "GattCharacteristic_GetHandle end";
127 }
128 
129 /*
130  * @tc.number: GattClient006
131  * @tc.name: GetPermissions
132 */
133 HWTEST_F(GattCharacteristicTest, GattCharacteristic_UnitTest_GetPermissions, TestSize.Level1)
134 {
135     GTEST_LOG_(INFO) << "GattCharacteristic_GetPermissions start";
136     pGattCharacteristic = new GattCharacteristic(uuid_, handle_, permissions_, properties_);
137     int tempPer = pGattCharacteristic->GetPermissions();
138     EXPECT_EQ(permissions_, tempPer);
139     GTEST_LOG_(INFO) << "GattCharacteristic_GetPermissions end";
140 }
141 
142 /*
143  * @tc.number: GattClient007
144  * @tc.name: GetProperties
145 */
146 HWTEST_F(GattCharacteristicTest, GattCharacteristic_UnitTest_GetProperties, TestSize.Level1)
147 {
148     GTEST_LOG_(INFO) << "GattCharacteristic_GetProperties start";
149     pGattCharacteristic = new GattCharacteristic(uuid_, handle_, permissions_, properties_);
150     int tempPro = pGattCharacteristic->GetProperties();
151     EXPECT_EQ(properties_, tempPro);
152     GTEST_LOG_(INFO) << "GattCharacteristic_GetProperties end";
153 }
154 
155 /*
156  * @tc.number: GattClient008
157  * @tc.name: GetService
158 */
159 HWTEST_F(GattCharacteristicTest, GattCharacteristic_UnitTest_GetService, TestSize.Level1)
160 {
161     GTEST_LOG_(INFO) << "GattCharacteristic_GetService start";
162     pGattCharacteristic = new GattCharacteristic(uuid_, handle_, permissions_, properties_);
163     GattService *tempGattService = pGattCharacteristic->GetService();
164     if (nullptr == tempGattService) {
165         EXPECT_TRUE(true);
166         GTEST_LOG_(INFO) << "GattCharacteristic_GetService returns correctly";
167     }
168     GTEST_LOG_(INFO) << "GattCharacteristic_GetService end";
169 }
170 
171 /*
172  * @tc.number: GattClient009
173  * @tc.name: GetUuid
174 */
175 HWTEST_F(GattCharacteristicTest, GattCharacteristic_UnitTest_GetUuid, TestSize.Level1)
176 {
177     GTEST_LOG_(INFO) << "GattCharacteristic_GetUuid start";
178     pGattCharacteristic = new GattCharacteristic(uuid_, handle_, permissions_, properties_);
179     UUID tempUuid = pGattCharacteristic->GetUuid();
180     if (tempUuid.Equals(uuid_)) {
181         EXPECT_TRUE(true);
182         GTEST_LOG_(INFO) << "GattCharacteristic_GetUuid returns correctly";
183     }
184     GTEST_LOG_(INFO) << "GattCharacteristic_GetUuid end";
185 }
186 
187 /*
188  * @tc.number: GattClient010
189  * @tc.name: SetValue
190 */
191 HWTEST_F(GattCharacteristicTest, GattCharacteristic_UnitTest_SetValue, TestSize.Level1)
192 {
193     GTEST_LOG_(INFO) << "GattCharacteristic_SetValue start";
194     pGattCharacteristic = new GattCharacteristic(uuid_, handle_, permissions_, properties_);
195     size_t length_Set = 1;
196     uint8_t values_Set[1] = {'a'};
197     pGattCharacteristic->SetValue(values_Set, length_Set);
198     GTEST_LOG_(INFO) << "GattCharacteristic_SetValue end";
199 }
200 
201 /*
202  * @tc.number: GattClient011
203  * @tc.name: GetValue
204 */
205 HWTEST_F(GattCharacteristicTest, GattCharacteristic_UnitTest_GetValue, TestSize.Level1)
206 {
207     GTEST_LOG_(INFO) << "GattCharacteristic_GetValue start";
208     pGattCharacteristic = new GattCharacteristic(uuid_, handle_, permissions_, properties_);
209     size_t length_Set = 1;
210     size_t length_Get = 1;
211     size_t *plength_Get = &length_Get;
212     uint8_t values_Set[1] = {'a'};
213     pGattCharacteristic->SetValue(values_Set, length_Set);
214 
215     std::unique_ptr<uint8_t[]> values_Get = std::make_unique<uint8_t[]>(length_Get);
216     (void)memcpy_s(values_Get.get(), length_Get, pGattCharacteristic->GetValue(plength_Get).get(), length_Get);
217     const uint8_t *values = static_cast<uint8_t *>(values_Get.get());
218     uint8_t resultValuesArray = values[0];
219     uint8_t resultValuesPointer = *values;
220 
221     if ('a' == resultValuesArray) {
222         EXPECT_TRUE(true);
223         GTEST_LOG_(INFO) << "GattCharacteristic_GetValue returns correctly";
224     }
225 
226     if ('a' == resultValuesPointer) {
227         EXPECT_TRUE(true);
228         GTEST_LOG_(INFO) << "GattCharacteristic_GetValue returns correctly";
229     }
230 
231     GTEST_LOG_(INFO) << "GattCharacteristic_GetValue end";
232 }
233 
234 /*
235  * @tc.number: GattClient012
236  * @tc.name: SetWriteType
237 */
238 HWTEST_F(GattCharacteristicTest, GattCharacteristic_UnitTest_SetWriteType, TestSize.Level1)
239 {
240     GTEST_LOG_(INFO) << "GattCharacteristic_SetWriteType start";
241     pGattCharacteristic = new GattCharacteristic(uuid_, handle_, permissions_, properties_);
242     GattCharacteristic::WriteType typeTemp = GattCharacteristic::WriteType::DEFAULT;
243     int returnCode = 0;
244     returnCode = pGattCharacteristic->SetWriteType(typeTemp);
245     EXPECT_EQ(returnCode, 0);
246     GTEST_LOG_(INFO) << "GattCharacteristic_SetWriteType end";
247 }
248 
249 /*
250  * @tc.number: GattClient013
251  * @tc.name: GetWriteType
252 */
253 HWTEST_F(GattCharacteristicTest, GattCharacteristic_UnitTest_GetWriteType, TestSize.Level1)
254 {
255     GTEST_LOG_(INFO) << "GattCharacteristic_GetWriteType start";
256     pGattCharacteristic = new GattCharacteristic(uuid_, handle_, permissions_, properties_);
257     GattCharacteristic::WriteType typeTemp = GattCharacteristic::WriteType::DEFAULT;
258     int returnCode = 0;
259     returnCode = pGattCharacteristic->SetWriteType(typeTemp);
260     EXPECT_EQ(returnCode, 0);
261 
262     int resultType = pGattCharacteristic->GetWriteType();
263     if (typeTemp == resultType) {
264         EXPECT_TRUE(true);
265         GTEST_LOG_(INFO) << "GattCharacteristic_GetWriteType returns correctly";
266     }
267     GTEST_LOG_(INFO) << "GattCharacteristic_GetWriteType end";
268 }
269 
270 }  // namespace Bluetooth
271 }  // namespace OHOS
272