1 /*
2  * Copyright (C) 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 <securec.h>
18 
19 #include "bluetooth_def.h"
20 #include "ohos_bt_def.h"
21 #include "ohos_bt_gatt.h"
22 
23 using namespace testing::ext;
24 
25 namespace OHOS {
26 namespace Bluetooth {
27 class GattCTest : public testing::Test {
28 public:
29     static void SetUpTestCase(void);
30     static void TearDownTestCase(void);
31     void SetUp();
32     void TearDown();
33     int scanerId;
34 };
35 
SetUpTestCase(void)36 void GattCTest::SetUpTestCase(void) {}
37 
TearDownTestCase(void)38 void GattCTest::TearDownTestCase(void) {}
39 
SetUp()40 void GattCTest::SetUp()
41 {
42     BleScanCallbacks callbacks;
43     BleRegisterScanCallbacks(&callbacks, &scanerId);
44 }
45 
TearDown()46 void GattCTest::TearDown() {}
47 
48 /*
49  * @tc.name: GattCTest_001
50  * @tc.desc: Test BleStartScanEx when g_BleCentralManager or BleScanConfigs is nullptr
51  * @tc.type: FUNC
52  * @tc.require: issueI5OH5C
53 */
54 HWTEST_F(GattCTest, GattCTest_001, TestSize.Level1)
55 {
56     BleScanConfigs configs;
57     BleScanNativeFilter filter[1];
58     int filterSize = sizeof(filter) / sizeof(BleScanNativeFilter);
59     int res = BleStartScanEx(scanerId, &configs, filter, filterSize);
60     EXPECT_EQ(res, OHOS_BT_STATUS_SUCCESS);
61 
62     BtGattCallbacks btGattCallbacks;
63     BleGattRegisterCallbacks(&btGattCallbacks);
64     res = BleStartScanEx(scanerId, nullptr, filter, filterSize);
65     EXPECT_EQ(res, OHOS_BT_STATUS_FAIL);
66 }
67 
68 /*
69  * @tc.name: GattCTest_002
70  * @tc.desc: Test BleStartScanEx when BleScanNativeFilter is null or filterSize is zero
71  * @tc.type: FUNC
72  * @tc.require: issueI5OH5C
73 */
74 HWTEST_F(GattCTest, GattCTest_002, TestSize.Level1)
75 {
76     BleScanConfigs configs;
77     configs.reportDelayMillis = 0;
78     configs.scanMode = SCAN_MODE_LOW_POWER;
79     configs.legacy = true;
80     configs.phy = PHY_LE_ALL_SUPPORTED;
81 
82     BleScanNativeFilter filter[1];
83     int filterSize = sizeof(filter) / sizeof(BleScanNativeFilter);
84     int res = BleStartScanEx(scanerId, &configs, nullptr, filterSize);
85     EXPECT_EQ(res, OHOS_BT_STATUS_SUCCESS);
86 
87     res = BleStartScanEx(scanerId, &configs, filter, 0);
88     EXPECT_EQ(res, OHOS_BT_STATUS_SUCCESS);
89 }
90 
91 /*
92  * @tc.name: GattCTest_003
93  * @tc.desc: Test BleStartScanEx success status
94  * @tc.type: FUNC
95  * @tc.require: issueI5OH5C
96 */
97 HWTEST_F(GattCTest, GattCTest_003, TestSize.Level1)
98 {
99     BleScanConfigs configs;
100     configs.reportDelayMillis = 0;
101     configs.scanMode = SCAN_MODE_LOW_POWER;
102     configs.legacy = true;
103     configs.phy = PHY_LE_ALL_SUPPORTED;
104 
105     BleScanNativeFilter filter[1];
106     filter[0].address = (char *)"test";
107     filter[0].deviceName = (char *)"test";
108     filter[0].serviceUuid = (unsigned char*)"FFFFFFF0-FFFF-FFFF-FFFF-FFFFFFFFFFFF";
109     filter[0].serviceUuidMask = (unsigned char*)"FFFFFFF0-FFFF-FFFF-FFFF-FFFFFFFFFFFF";
110     filter[0].serviceUuidLength = sizeof("FFFFFFF0-FFFF-FFFF-FFFF-FFFFFFFFFFFF");
111     unsigned char test1[1];
112     unsigned char test2[1];
113     unsigned char test3[1];
114     unsigned char test4[1];
115     filter[0].serviceData = test1;
116     filter[0].serviceDataMask = test2;
117     filter[0].manufactureData = test3;
118     filter[0].manufactureDataMask = test4;
119     filter[0].serviceData[0] = 1;
120     filter[0].serviceDataMask[0] = 1;
121     filter[0].manufactureData[0] = 1;
122     filter[0].manufactureDataMask[0] = 1;
123     filter[0].serviceDataLength = 1;
124     filter[0].manufactureDataLength = 1;
125     filter[0].manufactureId = 1;
126     int filterSize = sizeof(filter) / sizeof(BleScanNativeFilter);
127     int res = BleStartScanEx(scanerId, &configs, filter, filterSize);
128     EXPECT_EQ(res, OHOS_BT_STATUS_SUCCESS);
129 
130     filter[0].address = nullptr;
131     filter[0].deviceName = nullptr;
132     filter[0].serviceUuidMask = nullptr;
133     filter[0].serviceData = nullptr;
134     filter[0].manufactureData = nullptr;
135     res = BleStartScanEx(scanerId, &configs, filter, filterSize);
136     EXPECT_EQ(res, OHOS_BT_STATUS_SUCCESS);
137 
138     filter[0].serviceData = test1;
139     filter[0].manufactureData = test3;
140     filter[0].serviceDataMask = nullptr;
141     filter[0].manufactureDataMask = nullptr;
142     filter[0].serviceUuid = nullptr;
143     res = BleStartScanEx(scanerId, &configs, filter, filterSize);
144     EXPECT_EQ(res, OHOS_BT_STATUS_SUCCESS);
145 }
146 
147 /*
148  * @tc.name: GattCTest_004
149  * @tc.desc: Test BleStartScanEx when serviceUuid's length is random
150  * @tc.type: FUNC
151  * @tc.require: issueI5OH5C
152 */
153 HWTEST_F(GattCTest, GattCTest_004, TestSize.Level1)
154 {
155     BleScanConfigs configs;
156     configs.reportDelayMillis = 0;
157     configs.scanMode = SCAN_MODE_LOW_POWER;
158     configs.legacy = true;
159     configs.phy = PHY_LE_ALL_SUPPORTED;
160 
161     BleScanNativeFilter filter[1];
162     filter[0].address = nullptr;
163     filter[0].deviceName = nullptr;
164     filter[0].serviceUuid = (unsigned char*)"";
165     filter[0].serviceUuidMask = (unsigned char*)"";
166     filter[0].serviceUuidLength = 0;
167     filter[0].serviceData = nullptr;
168     filter[0].manufactureData = nullptr;
169     int filterSize = sizeof(filter) / sizeof(BleScanNativeFilter);
170     int res = BleStartScanEx(scanerId, &configs, filter, filterSize);
171     EXPECT_EQ(res, OHOS_BT_STATUS_SUCCESS);
172 
173     filter[0].serviceUuid = (unsigned char*)"FFFFFFF0-FFFF-FFFF-FFFF-FFFFFFFFFFFF";
174     filter[0].serviceUuidMask = (unsigned char*)"FFFFFFF0-FFFF-FFFF-FFFF-FFFFFFFFFFFF";
175     filter[0].serviceUuidLength = sizeof("FFFFFFF0-FFFF-FFFF-FFFF-FFFFFFFFFFFF");
176     res = BleStartScanEx(scanerId, &configs, filter, filterSize);
177     EXPECT_EQ(res, OHOS_BT_STATUS_SUCCESS);
178 }
179 }  // namespace Bluetooth
180 }  // namespace OHOS
181